你的位置:首页 > ASP.net教程

[ASP.net教程]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代码如下:

<??><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) 我们此时看客户端的配置文件:

 

<??><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”按钮,最终结果如下。