Клиент 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 недостаточно прав для подключения. Если кто-нибудь еще сможет пролить свет на причину, я бы с радостью сменил на них ответ. Но пока я просто рад, что это работает независимо от порта.

Другие вопросы по тегам