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

 

 

posted @ 2016-06-03 17:15  DotNet菜园  阅读(3060)  评论(1编辑  收藏  举报