7

我已经尝试了一个多星期没有任何成功,使用 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 的端点的方案 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 绑定不是一种选择。提前致谢。

4

2 回答 2

3

您需要通过调用在 WAS 中启用 TCP 托管appcmd.exe

%windir%\system32\inetsrv\appcmd.exe set site 
    "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='*']

查看MSDN 文档或 Michele Leroux Bustamante关于此主题的文章- 它包含您需要的所有信息。

马克

于 2009-07-09T18:55:51.193 回答
1

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

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

现在它工作正常。此致,

贡萨洛

于 2009-07-13T10:26:58.070 回答