1. 程式人生 > >使用C#創建及調用WCF完整實例 (Windows服務宿主)

使用C#創建及調用WCF完整實例 (Windows服務宿主)

targe fse 切換 目的 water fcm config文件 mark art

關於WCF的概念、原理、優缺點等,在這裏就不多說了,網上很多,可以自行搜索,比我解釋的要專業的多。

這裏直接說使用Windows 服務(Windows Service)作為宿主如何實現,其它方式不在此次教程之內

文章最後有本例的下載連接,包含源代碼、說明教程、編譯後文件

實例環境:Windows Server 2008 R2 + VS 2010(C#)

打開 VS 2010,選擇 新建項目,選擇 ”WCF”|”WCF 服務庫 ”,註意這裏是”WCF 服務庫 ”,不是"WCF 服務應用程序"

技術分享技術分享技術分享

確定後,系統會自動建立默認文件 ” Service1.cs”和” IService1.cs”,其實也是系統給你的示例

技術分享技術分享

打開"IService1.cs",你可以看到系統給你的示例代碼,將光標定位到"IService1"上,按F2健,可將接口重命為你想要的名子,重命名後將解決管理器中文件也同命修改。我修改為 ”IMyFirstService”;打開“Service1.cs",按相同方法修改

技術分享技術分享

回到MyFirstService,在這裏我定義了兩個函數"Base64Encrypt"和"Base64Decrypt",請註意格式,[OperationContract]一定要有,否則外部無法訪問

切換到"MyFirstService",接口實現,編寫具體代碼。

技術分享

好了,WCF服務庫的代碼部分就結束了,下面要開始配置,打開項目下的App.config文件

技術分享

技術分享技術分享

這裏,我們主要看system.servicemodel節點,有2體個子節點"services"和"behaviors",其中"behaviors"節點主要是安全和調試方面的設置,我們不在此討論,主要說一下第1個子節點"services",我們來看一下"services"節點內技術分享

技術分享

估計大多數人和我一樣,這些是什麽亂七八糟的東西,頭大。既然開頭說了,本文只說如何實現,所以不說其所以然了,肯定,這樣的配置無法在後面的宿主裏成功調用,為什麽呢,因為缺少了binding的配置,而默認並未生成配置節點,那好我們自己來加,註意標識的地方

技術分享

技術分享

配置一下項目屬性,我的生成目錄在F:\WCFTEST,生成項目

好的,WCF服務庫已工作已結束。

開始宿主程序

右擊解決方案,添加|新建項目”Windows”|”Windows 服務”,項目名就默認吧,不改了

在Windows服務項目中添加WCF服務庫的引用

技術分享

技術分享技術分享

技術分享

打開"WindowsService1"項目的App.config,發現什麽都沒有

技術分享技術分享

將“MyTestWcfServiceLibrary”項目中的App.config文件的內容全部復制過來(即現在2個項目的App.config文件內容是完全一樣的)

開始編寫Windows服務的代碼,要先添加system.servicemodel引用,並using

技術分享技術分享

添加服務安裝程序

技術分享技術分享

配置安裝程序

技術分享技術分享

技術分享

技術分享

好的,WCF宿主程序也結束了,成生項目

開始編寫客戶端調用

右擊解決方案|添加|新建項目|Windows|windows 窗體應用程序,項目名就默認吧(WindowsFormsApplication1),添加2個label,2個textbox,3個button

技術分享技術分享

右擊引用|添加服務引用,服務地址在windows服務項目中App.config文件中,依次展開找到system.serviceModel|services|service|host|baseAddresses|add節點,baseAddress等於號後的雙引號中的字符串即為服務地址,註意如果是生產環境,那麽你服務所使用的端口號在開啟。本例地址為“http://localhost:8732/Design_Time_Addresses/MyTestWcfServiceLibrary/Service1/”

技術分享

技術分享技術分享

(下載連接中的教程中此圖使用錯誤,應該是這樣的圖,教程中使用的是在WindowsService1中的服務引用的圖)

技術分享

技術分享

技術分享

此時,服務地址是localhost,所以可以直接引用成功,如果服務地址是一個網絡地址,需要在宿主服務器中將服務啟動後才可以引用服務,否則會提示找不到服務。也就是說如果你的服務地址是“http://192.168.1.1:8732/Design_Time_Addresses/MyTestWcfServiceLibrary/Service1/”,,那麽你要先將服務安裝並啟動服務,這樣才可以添加服務引用

客戶端代碼

技術分享技術分享

設為啟動項目,運行

編碼

技術分享技術分享

解碼

技術分享

技術分享

文中所寫的全部在這個下載中(寫了這麽詳細了,如果還沒做出來,那就花點錢吧^_^)

http://download.csdn.net/detail/meerio/9215083

使用C#創建及調用WCF完整實例 (Windows服務宿主)