[英]wsDualHttpBinding Not Working When Deployed Under Azure
WCF Duplex not working under Azure. WCF双工无法在Azure下运行。 Everything works fine under IIS Express. 在IIS Express下一切正常。 I know duplex binding is problematic because of the server callback, but.... I already shut down my firewall. 我知道双工绑定由于服务器回调而出现问题,但是....我已经关闭了防火墙。 TCPView (Sysinternals) shows 10 to 12 packets being sent/received by the client and then it just dies... nothing happens. TCPView(Sysinternals)显示客户端正在发送/接收10到12个数据包,然后它死了……什么也没发生。 I set to 10 minutes all timeouts i could. 我将所有超时设置为10分钟。
Please see my config files below. 请在下面查看我的配置文件。
SERVER CONFIG: 服务器配置:
<system.serviceModel>
<services>
<service behaviorConfiguration="MexBehaviour" name="MySrvc">
<endpoint address="" binding="wsDualHttpBinding" bindingConfiguration="wsDualHttpBinding"
name="wsDualEndpoint" bindingName="wsDualHttpBinding" contract="IMySrvc" />
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="mexHttpBinding"
name="MexEndpoint" bindingName="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://srvc.azurewebsites.net/MySrvc.svc" />
</baseAddresses>
<timeouts openTimeout="00:10:00" />
</host>
</service>
</services>
<bindings>
<wsDualHttpBinding>
<binding name="wsDualHttpBinding" openTimeout="00:10:00" sendTimeout="00:10:00"
clientBaseAddress="http://xxx.xxx.xxx.xxx:xxx">
<security mode="None">
<message clientCredentialType="None" negotiateServiceCredential="false" />
</security>
</binding>
</wsDualHttpBinding>
<mexHttpBinding>
<binding name="mexHttpBinding" />
</mexHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MexBehaviour">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
CLIENT CONFIG: 客户配置:
<system.serviceModel>
<bindings>
<wsDualHttpBinding>
<binding name="wsDualEndpoint">
<security mode="None" />
</binding>
</wsDualHttpBinding>
</bindings>
<client>
<endpoint address="http://srvc.azurewebsites.net/MySrvc.svc"
binding="wsDualHttpBinding" bindingConfiguration="wsDualEndpoint"
contract="SrvcRef.IMySrvc" name="wsDualEndpoint" />
</client>
</system.serviceModel>
I knew this wsDualHttpBinding didn't pass the "smell test".... From Juval Lowy's book, "Programming WCF Services: Mastering WCF and the Azure AppFabric Service Bus": 我知道这个wsDualHttpBinding没有通过“气味测试”。...从Juval Lowy的书中,“对WCF服务进行编程:掌握WCF和Azure AppFabric服务总线”:
...the WSDualHttpBinding is mostly unusable, since it is practically impossible to tunnel through various communication barriers separating the service from the client and the need to find a specific web-server machine makes this impractical. WSDualHttpBinding几乎是不可用的,因为实际上不可能穿越各种将服务与客户端隔离开的通信障碍,并且需要找到特定的Web服务器机器使这不切实际。
I solved my problem by simply using netTcpBinding instead.... You just need to get IIS to work with TCP protocol. 我通过简单地使用netTcpBinding来解决了我的问题。...您只需要使 IIS可以使用TCP协议即可。 There's plenty of articles out there explaining how to do it. 那里有很多文章解释如何做。 Here's one: http://msdn.microsoft.com/en-us/library/ms731053.aspx 这是一个: http : //msdn.microsoft.com/en-us/library/ms731053.aspx
Cheers. 干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.