wsDualHttpBinding не работает при развертывании в Azure
WCF Duplex не работает под Azure. Все отлично работает под IIS Express. Я знаю, что дуплексное связывание проблематично из-за обратного вызова сервера, но.... Я уже выключил свой брандмауэр. TCPView (Sysinternals) показывает от 10 до 12 пакетов, отправленных / полученных клиентом, а затем он просто умирает... ничего не происходит. Я установил на 10 минут все тайм-ауты, которые мог.
Пожалуйста, смотрите мои файлы конфигурации ниже.
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" />
КОНФИГ КЛИЕНТА:
<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>
1 ответ
Я знал, что этот wsDualHttpBinding не прошел "тест на запах".... Из книги Джувала Лоуи "Программирование служб WCF: освоение WCF и служебная шина Azure AppFabric":
... WSDualHttpBinding в основном непригоден для использования, поскольку практически невозможно туннелировать через различные коммуникационные барьеры, отделяющие сервис от клиента, и необходимость найти конкретную машину веб-сервера делает это непрактичным.
Я решил свою проблему, просто используя вместо этого netTcpBinding.... Вам просто нужно настроить IIS для работы с протоколом TCP. Там много статей, объясняющих, как это сделать. Вот один из них: http://msdn.microsoft.com/en-us/library/ms731053.aspx
Приветствия.