【问题标题】:What exactly do I need to do to host a WCF service in IIS 7.0 using netTcpBinding?使用 netTcpBinding 在 IIS 7.0 中托管 WCF 服务到底需要做什么?
【发布时间】:2009-07-09 18:46:15
【问题描述】:

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

【问题讨论】:

  • 您运行的是什么版本的 .NET?
  • 嗨,约翰,这是 .net 3.5。问候。
  • 我也遇到了同样的问题。您在配置文件中添加了什么以使其正常工作?
  • 嗨 Luiz,不幸的是,自几个月前以来,我们不再使用 netTcpBinding 运行 owr 服务,因此我没有当时最终可以使用的配置文件。但是,我记得马克上面的回答在当时有所帮助。可以肯定的一件事是,我必须检查互联网上的几个网站才能弄清楚。我无法在单个站点中找到完整的程序。最良好的祝愿,贡萨洛
  • 谢谢 Gonzalo,我会继续寻找和尝试。到目前为止,我已经尝试了很多不同的建议。

标签: wcf iis-7 nettcpbinding


【解决方案1】:

您需要通过调用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 - 它包含您需要的所有信息。

马克

【讨论】:

  • 您也可以通过 IIS7 Gui 执行此操作。转到您的站点 -> 编辑绑定并添加具有相应端口的 net.tcp 绑定:*
  • +1 来自我@marc,如果可能的话,还有更多!我确实注意到,在我的环境中,我需要将绑定信息指定为“808:*”,也许这应该编辑到您的答案中?还发现有不正确的'*'会破坏事情。我需要在此之前将其删除。再次感谢,拯救了我的一天!
【解决方案2】:

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

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

现在一切正常。 最好的问候,

贡萨洛

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2022-12-13
    相关资源
    最近更新 更多