Как настроить мой сервис WCF для доступа удаленных клиентов - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть служба WCF, которая размещается в службе Windows, и я могу подключиться к ней и использовать ее службы очень хорошо при использовании той же машины, но когда я пытаюсь запустить мой клиент на удаленной машине, время ожидания истекает и не подключится Я думал, что мог бы просто обновить файл app.config для клиента с IP-адресом служебного компьютера вместо localhost, но это не сработало. Вот файл app.config клиента:

<system.serviceModel>
<bindings>
  <wsDualHttpBinding>
    <binding name="WSDualHttpBinding_IWCFService" 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="Message">
        <message clientCredentialType="Windows" negotiateServiceCredential="true"
          algorithmSuite="Default" />
      </security>
    </binding>
  </wsDualHttpBinding>
</bindings>
<client>
  <endpoint address="http://192.168.1.141:8731/Design_Time_Addresses/WCF/WCFService/"
    binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IWCFService"
    contract="WCFService.IWCFService" name="WSDualHttpBinding_IWCFService">
    <identity>
      <dns value="192.168.1.141" />
    </identity>
  </endpoint>
</client>

А вот app.config службы:

<system.serviceModel>
<services>
  <service name="WCF.WCFService" behaviorConfiguration="WCFBehavior">
    <endpoint address="" binding="wsDualHttpBinding" contract="WCF.IWCFService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint
      address="mex"
      binding="mexHttpBinding"
      bindingConfiguration=""
      contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8731/Design_Time_Addresses/WCF/WCFService/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="WCFBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Есть ли что-то, что мне нужно сделать на стороне службы, чтобы разрешить удаленные подключения, или я просто не настраиваю клиента правильно?

Ответы [ 4 ]

3 голосов
/ 21 сентября 2011

Это может показаться упрощенным предложением, но вы проверили брандмауэр на своем сервере, чтобы убедиться, что он не блокирует связь?Я провел три дня, стуча головой по стене, пока не заметил это.

0 голосов
/ 21 апреля 2017

Это может быть лучше, чем просто отключить брандмауэр Windows, чтобы добавить правило для определенного порта, используя:

Брандмауэр -> Расширенные настройки -> Входящие правила -> Новое правило.

0 голосов
/ 21 сентября 2011

Можете ли вы подключиться к вашему сервису?Если это не проблема брандмауэра, я подозреваю, из службы безопасности.Так как он настроен для аутентификации через учетные данные Windows, что требует, чтобы ваша служба и клиент находились в одном домене, исправьте меня, если я не прав.

0 голосов
/ 21 сентября 2011

Похоже, что вы делаете это из дома, основываясь на своем адресе 192.

Вам нужно будет пробить целое в вашем роутере и брандмауэре Windows для запуска.После этого, если вы хотите получить доступ к этой стороне вашего дома, вы должны попытаться использовать DynDNS, чтобы имитировать наличие статического IP-адреса для размещения службы.

...