上接 WCF學習之旅—WCF服務部署到IIS7.5(九)
WCF學習之旅—WCF服務部署到應用程序(十)
WCF學習之旅—WCF服務的Windows 服務程序寄宿(十一)
八、WAS宿主
IIS7允許通過HTTP外的協議進行激活和網絡通信。此環境適合開發可通過 WCF支持的任何網絡協議(包括http、net.tcp、net.pipe、net.msmq)進行通信的WCF服務。部署簡單、管理方便,這些網絡協議在部署時可像Http一樣,直接丟到IIS7上即可,我們在下面的例子中以net.tcp為協議為例。IIS7以下的版本只能支持Http的通信。
1、確保已安裝IIS7的激活組件
在應用WAS宿主時,必須確保IIS7的激活組件安裝好。打開“控制面板”-->“打開或關閉Windows功能”-->對話框“Windows功能”中查看“Microsoft .NET Framework 3.5.1”中的“WCF的HTTP激活”與“WCF的非HTTP激活”。如果沒安裝,請安裝。如下圖所示。
如果沒有安裝,“勾選相應的功能”,然后點擊“確定”,進行安裝。如下圖所示:
安裝成功后我們打開IIS,點擊“網站”-->“新建網站”,如下圖。
在“添加網站”對話框中,根據如下圖填寫相應的信息,在綁定信息中填寫“808:*”,給網站添加net.tcp協議。如下圖所示
如果只添加了net.tcp協議,則網站無法啟動,如下圖。
使用鼠標點擊WCFWAS網站,需要再次添加HTTP協議。如下圖。
設置成功之后,如下圖。
2、開通net.tcp的協議
在安裝成功并且在指定的網站上綁定了net.tcp以后,我們還要開通.net.tcp協議,點擊我們要部署WCF的網站,在IIS管理器的操作功能區有一項“高級設置”點擊后出現如下圖所示高級配置的窗體
在啟用的協議中添加net.tcp協議(原來只對http協議支持,現在把tcp協議追加上去),中間用逗號隔離開,如上圖所示。
注意:這幾個步驟一個也不能少,否則會出現:“找不到具有綁定 NetTcpBinding 的終結點的與方案 net.tcp 匹配的基址。注冊的基址方案是 [http]”的錯誤信息。
3、建立服務程序
(1)在解決方案下新建WCF服務應用程序項目 WCFHost_WAS。
(2)建立IUser與User,代碼同例二一樣。
(3)修改配置文件Web.config代碼如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <directoryBrowse enabled="false" /> </system.webServer> <system.serviceModel> <bindings> <netTcpBinding> <binding name="netTcpBindConfig"> <security mode="None"> <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /> <message clientCredentialType="Windows" /> </security> </binding> </netTcpBinding> </bindings> <services> <service behaviorConfiguration="BookBehavior" name="WcfServiceLib.BookService"> <endpoint address="" binding="netTcpBinding" contract="WcfServiceLib.IBookService" bindingConfiguration="netTcpBindConfig"></endpoint> <!--元數據交換的終結點--> <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="BookBehavior" > <serviceMetadata/> <serviceDebug includeExceptionDetailInFaults="true" /> <dataContractSerializer maxItemsInObjectGraph="6553600"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> <system.web> <compilation defaultLanguage="c#" /> </system.web> </configuration>
4、部署服務
像其他的Web應用程序一樣,把相關的文件丟到服務器端指定目錄即可。
鼠標右鍵瀏覽User.svc,如現如下所示:
說明部署成功,如上所示的服務地址為:net.tcp://服務器名/User.svc/mex
5 、建立客戶端
(1)在WinClient項目中,添加對服務的引用(在引用上右鍵-->輸入我們定義的服務宿主的基地址(此處為:net.tcp://developer/BookService.svc/mex-->轉到-->確定)。如下圖。
(2) 在From1中添加一個“WAS獲取BOOK”按鈕。如下圖。
(3) 在btnWAS_Click事件中添加如下代碼
private void btnWAS_Click(object sender, EventArgs e) { WASBookWCF.BookServiceClient client = new WASBookWCF.BookServiceClient(); string book = client.GetBook("10"); textBox1.Text = book; }
(4) 我們此時看客戶端的配置文件:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup> <system.serviceModel> <bindings> <netTcpBinding> <bindingname="NetTcpBinding_IBookService"> <securitymode="None" /> </binding> </netTcpBinding> <wsHttpBinding> <binding name="WSHttpBinding_IBookService" /> </wsHttpBinding> </bindings> <client> <endpoint address="http://localhost:8080/BookService" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IBookService" contract="BookServiceReference.IBookService" name="WSHttpBinding_IBookService"> <identity> <userPrincipalName value="DEVELOPER\Administrator" /> </identity> </endpoint> <endpointaddress="net.tcp://developer/BookService.svc"binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IBookService"contract="WASBookWCF.IBookService" name="NetTcpBinding_IBookService" /> </client> </system.serviceModel> </configuration>
(5) 點擊“WAS獲取BOOK”按鈕,最終結果如下。
文章列表