WCF学习之旅—WCF服务的WAS寄宿(十二)
上接 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”按钮,最终结果如下。