2016-06-10 9 views
2

У меня есть эта схема:WCF-клиент не может подключиться к службе WCF, размещенной в IIS через ServiceHost?

IIS

  • хостов: OperatorService.svc (подключается к ClientService)
  • Global.asax (на старте): хосты ClientService через ServiceHost

WPF-клиент

  • подключается к ClientService


Если я иду в OperatorService сервис активирован, веб-приложение, запущенное и ClientService успешно прошла в http://localhost:8020/ClientService. Все идет нормально.

теперь я могу получить доступ к ClientService в вышеупомянутом URL в браузере, я могу добавить его через Add Service Reference. Он просто там - работает.

Но когда я пытаюсь подключиться через сгенерированный клиент (выглядит нормально), он внезапно не работает. Метательный:

There was no endpoint listening at http://localhost:8020/ClientService that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

Кроме того OperatorService подключается к этому ClientService себя (это WSDualHttpBinding для обеспечения уведомлений). Он правильно подписывается на эту услугу (вызывает метод) и работает (тот же URL-адрес, что и мой клиент WPF).

Почему я не могу подключиться к моему клиенту WPF?

WPF клиента конфигурации (только соответствующие разделы):

<client> 
    <endpoint address="http://localhost:8020/ClientService" binding="wsDualHttpBinding" 
     bindingConfiguration="DefaultBindingClientService" contract="Server.IClientService" 
     name="DefaultBindingClientService"> 
     <identity> 
      <servicePrincipalName value="host/OHS-UPC" /> 
     </identity> 
    </endpoint> 
</client> 
<bindings> 
    <wsDualHttpBinding> 
     <binding name="DefaultBindingClientService" /> 
    </wsDualHttpBinding> 
</bindings> 

IIS размещенного web.config (для ClientService)

<service name="TelPro.OHS.Server.Services.ClientService" behaviorConfiguration="UnsecuredBehavior"> 
    <endpoint address="" binding="wsDualHttpBinding" bindingConfiguration="DefaultBindingClientService" contract="TelPro.OHS.Server.Services.IClientService"/> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:8020/ClientService"/> 
     </baseAddresses> 
    </host> 
</service> 

<wsDualHttpBinding> 
    <binding name="DefaultBindingClientService"/> 
</wsDualHttpBinding> 

<behavior name="UnsecuredBehavior"> 
    <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false"/> 
    <serviceDebug includeExceptionDetailInFaults="true"/> 
</behavior> 

IIS размещенного web.config (для OperatorService -> ClientService)

<client> 
    <endpoint address="http://localhost:8020/ClientService" binding="wsDualHttpBinding" 
     bindingConfiguration="DefaultBindingClientService" contract="ClientNotificationServer.IClientService" 
     name="DefaultBindingClientService" /> 
</client> 

<wsDualHttpBinding> 
    <binding name="DefaultBindingClientService" /> 
</wsDualHttpBinding> 
+0

Если я правильно вас понимаю, OperatorService также является клиентом ClientService. Можете ли вы показать соответствующую часть web.config OperatorService (конечная точка клиента и привязки), чтобы сравнить его с клиентом WPF? – nodots

+0

Я добавил конфигурацию для OperatorService в качестве клиента ClientService. Это было первое, что я проверил, потому что он соединяется, а другой нет. Так что теперь я думаю, что они идентичны, похоже, что это проблема прав. Я могу создать ClientServiceClient из WPF-клиента для службы (конечная точка/привязка кажется правильной), но когда я вызываю метод, он терпит неудачу. Поэтому я озадачен. – SmartK8

+0

Я также могу подключиться к сервису из WcfTestClient (так оно есть), unfortunatelly WcfTestClient не позволяет вызывать методы, потому что он не поддерживает WsDualHttpBinding. Поэтому я не могу проверить последний шаг. – SmartK8

ответ

0

Я смог решить это, переключившись на порт 80.

http://localhost/ClientService 

Как-то это работает. Я попытался добавить правила на порт 8020 повсюду (даже остановил брандмауэр), проверил любую переадресацию портов, конечные точки Azure и т. Д. Моя теория заключается в том, что проблема, когда сервер пытается подключиться назад (обратный вызов) к клиенту и не имеет прав или что нибудь. Я предполагаю, что у хоста IIS нет достаточных прав для подключения. Если кто-то еще может пролить свет на то, почему, я бы с радостью переключил на них ответ. Но пока я просто рад, что он работает независимо от порта.