У меня есть эта схема: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>
Если я правильно вас понимаю, OperatorService также является клиентом ClientService. Можете ли вы показать соответствующую часть web.config OperatorService (конечная точка клиента и привязки), чтобы сравнить его с клиентом WPF? – nodots
Я добавил конфигурацию для OperatorService в качестве клиента ClientService. Это было первое, что я проверил, потому что он соединяется, а другой нет. Так что теперь я думаю, что они идентичны, похоже, что это проблема прав. Я могу создать ClientServiceClient из WPF-клиента для службы (конечная точка/привязка кажется правильной), но когда я вызываю метод, он терпит неудачу. Поэтому я озадачен. – SmartK8
Я также могу подключиться к сервису из WcfTestClient (так оно есть), unfortunatelly WcfTestClient не позволяет вызывать методы, потому что он не поддерживает WsDualHttpBinding. Поэтому я не могу проверить последний шаг. – SmartK8