wsDualHttpBinding не работает вне сети с клиентом WPF - PullRequest
1 голос
/ 16 февраля 2011

Я пытался реализовать DuplexCommunication между WPF и WCF, связь работает хорошо при внутреннем тестировании, в сети, когда мы пытались получить доступ к этой внешней сети после публикации ее снаружи, мы можем получить доступ к услуге черезвеб-браузер, но клиент WPF выдает ошибку, когда мы пытаемся открыть соединение.ниже приведены настройки как на стороне сервера, так и на стороне клиента.Сервер:

  <wsDualHttpBinding>
    <binding closeTimeout="00:01:00"
                   openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                   bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                   maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                   messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00" />
      <security mode="None" />
    </binding>
  </wsDualHttpBinding>

  <service behaviorConfiguration="DuplexServices.DuplexServiceBehavior" name="DuplexServices.DuplexService">
    <endpoint address="dual" binding="wsDualHttpBinding" contract="DuplexServices.IDuplexService" >
     </endpoint>
   </service>

Клиент:

<wsDualHttpBinding>
            <binding name="WSDualHttpBinding_DuplexService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" >
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <reliableSession ordered="true" inactivityTimeout="00:10:00" />
                <security mode="None">
                </security>
            </binding>
        </wsDualHttpBinding>

     <client>
    <endpoint address="http://XXX.com/DuplexServices/DuplexService.svc/dual"
            binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_DuplexService"
            contract="DuplexServiceeReference.DuplexService" name="WSDualHttpBinding_DuplexService">
                    </endpoint>
     </client>

Я попытался указать значения baseAddresses и identity со значением dns на стороне сервера, также попытался указать clientBaseAddress на стороне клиента, но все жеэто не будет работать вне сети.

всегда возникает ошибка тайм-аута при попытке открыть дуплексное соединение из приложения WPF: Ошибка: «Операция открытия не завершена в течение отведенного времени ожидания 00: 00: 09.4911018. Возможно, время, отведенное для этой операции, былочасть более длительного тайм-аута. "

Я думаю, что что-то не так в части конфигурации, но не уверен, что это, любая помощь в этом очень ценится.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 18 июня 2011

WsDualHttpBinding не подходит для пересечения брандмауэров - для этого требуется, чтобы сервер открыл соединение с клиентом, по умолчанию для случайного адреса на порту 80. Используемый порт может быть настроен clientBaseAddress на привязке, но все же требует, чтобы межсетевой экранразрешить входящие соединения, которые, как вы надеетесь, будут запрещены сетевыми администраторами.Если вы хотите выполнить дуплексную работу в WCF, вам следует использовать NetTcpBinding, который использует одно исходящее соединение, и обратные вызовы выполняются по этому соединению

Я писал об этом здесь

1 голос
/ 30 апреля 2011

Открыт ли порт 80 на клиенте для приема входящих соединений, и правильно ли порт перенаправлен через любые маршрутизаторы NAT? Двойные HTTP-привязки требуют, чтобы сервер мог открывать второе HTTP-соединение с клиентом и в Интернете (вне локальной сети), который почти всегда дает сбой из-за брандмауэров и домашних маршрутизаторов.

...