我在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>
答案 0 :(得分:4)
Web Roles
不支持TCP协议。
您需要在Worker Role
。
网络角色:
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托管。