Нет прослушивания конечной точки при исключении net.pipe - PullRequest
3 голосов
/ 04 августа 2011

У меня много служб WCF, и мне нужно вызывать одну службу из другой. Я решил использовать netNamedPipeBinding для этой цели.

Мой файл web.config выглядит следующим образом. (Я не скопировал ненужные вещи здесь.)

 <services>
          <service             name="Services.AuthorizationService"    >
            <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" >
            <endpoint
              name="AuthorizationService"
              address=""
              binding="basicHttpBinding"               contract="ServiceContracts.IAuthorizationService" />
            <endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
                   binding="netNamedPipeBinding"                   contract="ServiceContracts.IAuthorizationService"
                   name="AuthorizationNamedPipeEndpoint"/>           
          </service>
</Services>

Раздел клиента в файле web.config выглядит следующим образом:

<client>
      <endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
       binding="netNamedPipeBinding"            contract="ServiceContracts.IAuthorizationService" name="AuthorizationServiceNamedPipe" />
    </client>

Я пытаюсь вызвать один из OperationContract s (GetDetails) следующим образом:

  using (ChannelFactory<IAuthorizationService> authorizationChannel = new ChannelFactory<IAuthorizationService>("AuthorizationServiceNamedPipe"))
                        {
                            IAuthorizationService authorizationService = authorizationChannel.CreateChannel();
                            var response = authorizationService.GetDetails(new GetDetailsRequestMessage());
                        }

Когда я выполняю этот код, я получаю исключение в строке, в которой я вызываю OperationContract GetDetails:

Не было прослушивания конечной точки на net.pipe: //localhost/TestSite/AuthorizationService.svc, который мог бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. См. InnerException, если имеется, для получения более подробной информации.

Я не могу выяснить точную проблему. InnerException также не существует. Я использую компьютер с Windows7, а версия IIS - IIS7.5. Обратите внимание, что я могу вызвать эту услугу из моего приложения Winform без каких-либо проблем. Привязка net.pipe добавляется к привязкам веб-сайта в IIS.

Как обеспечить правильную работу службы с использованием транспорта net.pipe? В случае HTTP мы можем просмотреть в IE и убедиться в этом.

Ответы [ 2 ]

9 голосов
/ 08 августа 2011

Эта проблема была решена после активации компонента Windows Communication Foundation Non-HTTP Activation из Control Panel —> Programs and Features, and then click "Turn Windows Components On or Off" in the left pane. Expand the Microsoft .NET Framework 3.5.

Когда он активирован и вы используете привязку без HTTP, WAS используется автоматически.

Я сделал очень простую и глупую ошибку, но она помогла мне многому научиться.Следующие статьи мне очень помогли:

Расширение служб WCF за пределы HTTP с помощью WAS

Размещение служб WCF в службе активации Windows

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

Последняя ссылка дала мне указатель на то, что связанная с сертификатом сервера конфигурация может вызывать проблемы.И я добавил поведение (которое не видно в вопросе) для службы.Такое поведение использовало сертификаты сервера.

0 голосов
/ 17 декабря 2013

Мы столкнулись с той же проблемой в SharePoint 2013. Что-то случилось во время установки, и параметры активации не были включены.Я не уверен, была ли это проблема с функцией сервера приложений или чем-то еще.

Так что спасибо за пост!Мы смогли исправить проблему SP 2013 тоже.Вот исключение, которое мы видели для тех, кто может столкнуться с ним также:

System.ServiceModel.EndpointNotFoundException: не было конечной точки, прослушивающей net.pipe: //localhost/SecurityTokenServiceApplication/appsts.svc, который может принять сообщение.Это часто вызвано неправильным адресом или действием SOAP.Смотрите InnerException, если имеется, для более подробной информации.--->

System.IO.PipeException: конечная точка канала 'net.pipe: //localhost/SecurityTokenServiceApplication/appsts.svc' не найдена на вашем локальном компьютере.

...