如何配置Windows Azure WCF服务Web角色以使用netTcpBinding?

时间:2012-02-27 10:22:47

标签: c# .net windows wcf azure

我在Windows Azure上托管了WCF服务,最近我将其合同更改为双工合同(以支持客户端上的进度条)。我首先使用wsDualHttpBinding,它在我的本地机器上运行良好,但是一旦我部署它就按预期失败了。

我现在正在尝试配置服务以使用netTcpBinding,但我收到错误“指定的协议无效。目前不支持名为'Endpoint1'的绑定的协议'tcp'。”

ServiceDefinition.csdef:

<Endpoints>
  <InputEndpoint name="AlertsEndpoint" protocol="tcp" port="3030" />
</Endpoints>

的Web.config:

 <services>      
      <service name="AlertsService.AlertsService" behaviorConfiguration="AlertsServiceBehavior">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="NetTcp" contract="AlertsService.IAlertsService" />
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="MexTcp" contract="IMetadataExchange" />
      </service>
    </services>  

<bindings>
      <netTcpBinding>
        <binding name="NetTcp" />
      </netTcpBinding>
      <mexTcpBinding>
        <binding name="MexTcp"/>
      </mexTcpBinding>
</bindings>      

3 个答案:

答案 0 :(得分:4)

托管WCF服务的

Web Roles不支持TCP协议。 您需要在Worker Role

中托管您的WCF服务

网络角色:

  

Windows Azure中的Web角色提供对HTTP和HTTPS的支持   协议...

工人角色:

  

...并允许进程使用各种外部进行通信   使用WCF服务的基于TCP的应用程序协议   netTcpBindings绑定

答案 1 :(得分:2)

您可以通过运行启动脚本来启用您在Web角色中为Azure上的WCF启用任何绑定,以启用说明 net.tcp 在一天结束之后只需IIS虽然我承认它的痛苦应该超过应有的程度!)。 Full details can be seen at this article

答案 2 :(得分:1)

让我澄清一下,因为@magnus johansson给出的答案并不完全正确。 Windows Azure中的Web角色肯定支持tcp。但是:在IIS中托管WCF服务仅限于HTTP。如果您选择在IIS之外实例化您自己的ServiceHost,那么您对tcp没有任何问题。

这是一个MSDN article,用于更详细地描述IIS中的WCF托管。