使用netTcpBinding在IIS 7.0中托管WCF服务到底需要做什么?

时间:2009-07-09 18:46:16

标签: wcf iis-7 nettcpbinding

我已经尝试了一个多星期而没有取得任何成功,使用netTcpBinding来托管一个非常简单的类似HelloWorld的wcf服务。

使用http,一切正常。我甚至可以从远程计算机访问我的服务。但是出现了tcp问题。

我已经执行了我应该执行的所有步骤,以便在WAS中托管我的服务:

  • 启用.Net 3.0功能,包括http和非http激活

  • 我已将“网络服务”和“IIS_IUSRS”授予包含该网站的文件夹以下权限:

    • 阅读&执行
    • 列出文件夹内容
  • 在防火墙中打开de端口8100和8086.

  • 在IIS管理器/操作/绑定中,设置了以下绑定:

    • http 8100:*
    • net.tcp 8086:*
  • 在IIS管理器/管理网站/高级设置中,http和net.tcp协议均已启用。

我遇到的原始问题是我能够通过http到达服务但是在尝试使用tcp时出现以下错误:

“无法分派消息,因为端点地址为'net.tcp://myDomain/HelloWorld.Hello.svc'的服务无法用于协议地址。

我在这个网站上发现了一个帖子,其作者遇到了同样的问题,并通过重新安装.net 3.0功能解决了这个问题。所以我尝试了。我还尝试重新安装IIS 7.0以防万一。 现在,情况比起初时更糟糕。如果我在我的Web.Config中使用tcpBinding配置端点我甚至无法使用IE访问我的服务的http地址!我收到以下消息:

无法找到与绑定NetTcpBinding的端点匹配scheme net.tcp的基址。注册的基地址方案是[http]。

Web.Config文件如下:


                          

       name="HelloWorld.Hello">
       <host>
          <baseAddresses>
             <add baseAddress="http://myDomain:8100/HelloWorld/" />
         <add baseAddress="net.tcp://myDomain:8086/HelloWorld/" />
          </baseAddresses>
       </host>          

       <endpoint address=""
                 binding="wsHttpBinding"
                 contract="HelloWorld.IHello"
                 bindingConfiguration="httpInseguro">
       </endpoint>

       <endpoint address=""
                 binding="netTcpBinding"
                 contract="HelloWorld.IHello"
                 bindingConfiguration="netTcpInseguro">
       </endpoint>


       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

    </service>
 </services>

<bindings>

  <wsHttpBinding>
    <binding name ="httpInseguro">
      <security mode ="None" />
    </binding>        
  </wsHttpBinding>

  <netTcpBinding>
    <binding name ="netTcpInseguro">
      <security mode ="None" />
    </binding>        
  </netTcpBinding>

</bindings>

和.svc文件是这样的:

有谁能请给我一个关于发生了什么的线索?我真的不知道还能做什么。这是一个真正的头脑,因为使用http绑定不是一个选项。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

您需要通过调用appcmd.exe

在WAS中启用TCP托管
%windir%\system32\inetsrv\appcmd.exe set site 
    "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='*']

查看MSDN documenation或Michele Leroux Bustamante article on this topic - 它包含您需要的所有信息。

马克

答案 1 :(得分:1)

为了你的回答和链接,请你。我会检查一下。 我忘了告诉,但我已经启用了TCP托管。 有人建议我将其添加到配置文件中:

<endpoint address="mextcp" binding="mexTcpBinding" contract="IMetadataExchange"/>

现在它正常工作。 最好的问候,

的Gonzalo