實戰演習使Asp.Net Web Service脫離IIS
WSE能夠使ASP.Net Web Service寄宿到Console程序,Windows Service,Com+組件和Windows Forms應用程序中,此時,它能夠用TCP協議或者其他任何可被接受的傳輸協議進行網絡方法的調用。
下面闡述一下如何創建一個不寄宿在IIS中的Web Service,并給出示例項目的源碼。感興趣的同學可以拿下去測試一下。
示例項目將Windows Service作為網絡服務的宿主程序,下面是創建網絡服務和宿主程序的過程
- 打開vs2005
-
創建一個Windows服務
- 單擊文件菜單,選擇新工程
- 在新工程的項目模板中,選擇Windows服務
- 輸入工程名稱,如WindowsServiceToHostASMXWebService
- 點擊確定
-
添加Microsoft.Web.Services3, System.Web.Services, 和 System.Web 的引用
- 項目菜單中,點擊添加引用
- 選擇.Net選項卡,選擇Microsoft.Web.Services3, System.Web.Services, and System.Web ,點擊確定
- 添加配置文件app.config
- 在工程中,添加一個名為HelloService.cs的文件,代碼如下:
Code - 更改工程中的Service.cs的代碼,如下
Code - 添加安裝windows服務必須的ProjectInstaller
- 這樣在服務安裝并啟動(如何安裝和啟動不再贅述,不明白的可以上網查詢)后,便可以作為web service的宿主程序了。下面的內容將闡述如何在創建對這樣服務的代理和在客戶端如何訪問這樣的服務。
-
要創建上面服務的代理,我沒有找到很好的辦法,wsdl.exe能創建代理類,這是.net framework默認提供的工具,但因為沒有發布在web服務器上,因此無法直接對項目中的HelloService生成代理類,我用的是比較笨的方法,我首先創建了一個Asp.Net服務的工程,然后創建一個代碼和HelloService.cs一樣的網絡服務,然后將其發布到Http服務器上,此時wsdl便能訪問到http://localhost/host-in-winservice/service.asmx?wsdl
這樣我用wsdl.exe工具,便可以產生默認的代理類Proxy.cs,操作如下:
- 打開vs2005命令提示行
- cd到一個指定目錄,比如d:\\
- 用wsdl.exe生成默認代理文件Proxy.cs
-
這樣在d盤就能得到一個Proxy.cs的文件,這就是默認的代理類,下面創建客戶端程序
-
創建一個客戶端程序,本文為Console程序,然后添加Microsoft.Web.Services3,
System.Web.Services, and System.Web的引用,將得到的代理類Proxy.cs拷貝到工程中,
下面是最重要的步驟:在前面的翻譯文檔中,提到過使用WSE 3.0的網絡服務的代理基類必須更改為WebServicesClientProtocol,(可參考WSE 3.0 文檔翻譯:WSE架構)
因此必須首先將原代理類的基類做如下圖所示的修改:
原代理類
![]()
新代理類
![]()
并且因為網絡服務的地址變化,將構造函數做如下修改
原代理類
新代理類:
- 修改Proxy后,將Program.cs中的代碼修改如下:
- 測試運行,運行生成的Client.exe,得到如下圖所示,表示成功:
示例項目文件: 示例項目文件
有關生成代理類的方法改進
在寫這篇文章的時候,沒有找到一種比較好的方法,用于生成發布在非IIS中的網絡服務的代理類,所以第九步比較麻煩。經朋友提示,我重新查看了下wse3的文檔,發現了一個十分簡單的辦法,wse3提供了一個與wsdl.exe對應的工具:wsewsdl3.exe,使用它可以方便的產生代理類,步驟如下
wsewsdl3.exe在安裝目錄/Microsoft WSE\v3.0\Tools中,cmd-cd到該目錄后,如下圖所示操作,即可獲取在工具的相同目錄獲得代理類文件,這個文件可以一點都不做修改,很好用
出處:http://jillzhang.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。




[WebService(Namespace 

}
浙公網安備 33010602011771號