Клиент WCF не может подключиться к службе WCF, размещенной в IIS через ServiceHost?
У меня есть такая схема:
IIS
- hosts: OperatorService.svc (подключается к ClientService)
- Global.asax (при запуске): размещает ClientService через ServiceHost
Клиент WPF
- подключается к ClientService
Если я перехожу к OperatorService, служба активируется, веб-приложение запускается, и ClientService успешно размещается на http://localhost:8020/ClientService
, Все идет нормально.
Теперь я могу получить доступ к ClientService по вышеупомянутому URL-адресу в браузере, я могу добавить его с помощью Добавить ссылку на службу. Это просто там - работает.
Но когда я пытаюсь подключиться через сгенерированный клиент (выглядит нормально), он вдруг не работает. Метание:
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>
1 ответ
Я смог решить это, переключившись на порт 80.
http://localhost/ClientService
Как-то это работает. Я пытался добавить правила к порту 8020 везде (даже остановил брандмауэр), проверил переадресацию портов, конечные точки Azure и т. Д. Моя теория состоит в том, что проблема, когда сервер пытается подключиться к клиенту и не имеет прав или что-то. Я полагаю, что у службы IIS недостаточно прав для подключения. Если кто-нибудь еще сможет пролить свет на причину, я бы с радостью сменил на них ответ. Но пока я просто рад, что это работает независимо от порта.