2012-12-19 3 views
3

Ранее я спросил question, чтобы решить исключение SecurityNegotiationException при попытке получить доступ к службе WCF с удаленного компьютера. Это исключение было разрешено благодаря ответу ValtasarIII.Не удается подключиться к удаленной службе WCF - TimeoutException

Теперь у меня другая проблема. Я разместил свою службу на сервере и хочу подключиться к ней с помощью клиентского приложения. Но, когда я пытаюсь подписаться на службу из клиентского приложения, ничего не происходит, и в конце я получаю исключение:

The open operation did not complete within the allotted timeout of 00:00:59.9939996. The time allotted to this operation may have been a portion of a longer timeout. 

(я могу разделить трассировки стека при необходимости)

Хотя, когда я попробуйте проверить, работает ли служба, я могу успешно получить доступ к ней через браузер с клиентской машины.

Вот мои конфигурации:

Сервис - web.config

<configuration> 
    <system.serviceModel> 
    <bindings> 
     <wsDualHttpBinding> 
     <binding name="wsHttpDual"> 
      <security mode="None"> 
      <message clientCredentialType="None" algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </wsDualHttpBinding> 
    </bindings> 
    <protocolMapping> 
     <add scheme="http" binding="wsDualHttpBinding" bindingConfiguration="wsHttpDual"/> 
    </protocolMapping> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="True"/> 
      <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

Клиент - app.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.serviceModel> 
    <bindings> 
     <wsDualHttpBinding> 
     <binding name="WSDualHttpBinding_ISampleContract" clientBaseAddress="http://95.138.188.232:8000/myClient/"> 
      <!--<security mode="Message"> 
      <message clientCredentialType="Windows" algorithmSuite="Default" /> 
      </security>--> 
      <security mode="None"> 
      <message clientCredentialType="None" algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </wsDualHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://95.138.188.232/autofxtools/service.svc" 
      binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_ISampleContract" 
      contract="ISampleContract" name="WSDualHttpBinding_ISampleContract"> 
     <identity> 
      <servicePrincipalName value="host/95.138.188.232" /> 
     </identity> 
     </endpoint> 

    </client> 
    </system.serviceModel> 
</configuration> 

Я искал решение, но ничего не имеет работал на меня. Конфигурация службы, похоже, не требует никаких требований безопасности. Но клиент с той же конфигурацией фактически работает с той же машины, что и Служба, но не с удаленной машины. Означает ли это, что по-прежнему существует аутентификация Windows (по умолчанию для wsDualHttpBinding)? Если да, то где я иду не так?

В ожидании положительного отзыва.

С уважением.

ответ

2

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

Кроме того, я прочитал в немецком форуме следующее:

Anscheinend Тритт дас Проблема нур бей WsDualBinding Auf, Венна дер порт 80 belegt ист. Gibt wohl keine Möglichkeit den Port mit Hilfe von ClientBaseAdress zu ändern. Einzige Möglichkeit ist hier wohl netTcpBinding.

Который на английском языке означает:

Очевидно, что эта проблема возникает при использовании WsDualBinding в то время как порт 80 уже занят. Кажется, что нет никакого способа изменить порт с помощью ClientBaseAddress. Единственный способ - использовать netTcpBinding.

+0

Да, я принимаю его через IIS. И, как я уже упоминал, я могу получить к нему доступ через браузер на клиентской машине –

+0

Вы уверены, что URL-адрес службы в конфигурации клиента верен? 'http: // 95.138.188.232/autofxtools/service.svc' –

+0

Кроме того, вы предоставляете« clientBaseAddress = »http://95.138.188.232:8000/myClient/« в конфигурации клиента »- это тоже правильно ? –

Смежные вопросы