У меня много служб 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 и убедиться в этом.