Ошибка возврата WCF "Не было прослушивания конечной точки в net.pipe...."
По некоторым причинам я не могу заставить работать конечную точку Net.Pipe (EP) моей службы.
Это служба WCF.Net 4.0, размещенная в IIS7.
Есть две ошибки...
- Во-первых, EP не будет предоставлять метаданные.
- Во-вторых, EP на самом деле не будет работать - я тестирую его через тестовый клиент WCF, который является частью VS2010.
Я думаю, что оба на самом деле связаны с одной и той же проблемой.
Полученная фактическая ошибка...
There was no endpoint listening at net.pipe://[machinename].[domainname]/Services/TestService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
Первое, что я заметил, это то, что независимо от того, как я называю свой канал в базовых адресах, он переименовывается в [machinename]. [Domainname], что кажется странным. Это очевидно в метаданных службы, которые выводятся. Однако, если я использую свое имя канала или это переименованное имя в тестовом клиенте, это не сработает.
Я также включил WAS в Windows Features, установил привязки сайтов для всех протоколов в IIS, а также ввел имена протоколов в поле "Enabled Protocols" в IIS (http, net.tcp, net.pipe). Я также проверил, что "Адаптер слушателя Net.Pipe" запущен в Windows Servics.
Мой http и net.tcp EP оба работают нормально и возвращают метаданные.
Мой конфиг указан ниже - кто-нибудь есть идеи, что может помешать этому EP работать? Я уверен, что это что-то простое!
<system.serviceModel>
<behaviors>
<!-- EP Behaviors -->
<endpointBehaviors>
<behavior name="PayloadMessageInspector">
<MessageHeaderBehavior />
<MessagePayloadBehavior />
</behavior>
</endpointBehaviors>
<!-- Service Behaviors -->
<serviceBehaviors>
<behavior name="GenericServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" policyVersion="Policy15" />
</behavior>
</serviceBehaviors>
</behaviors>
<!-- Bindings Section -->
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<bindings>
<!-- Basic Http Binding -->
<basicHttpBinding>
<binding maxReceivedMessageSize="10485760" maxBufferSize="10485760" maxBufferPoolSize="10485760">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
<!-- Net TCP Binding -->
<netTcpBinding>
<binding maxReceivedMessageSize="10485760" maxBufferSize="10485760" maxBufferPoolSize="10485760" />
</netTcpBinding>
<!-- Net Pipe Binding -->
<netNamedPipeBinding>
<binding maxReceivedMessageSize="10485760" maxBufferSize="10485760" maxBufferPoolSize="10485760" />
</netNamedPipeBinding>
</bindings>
<!-- Services Section -->
<services>
<!-- Membership Service -->
<service name="TestService" behaviorConfiguration="GenericServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost/Services/TestService.svc" />
<add baseAddress="net.tcp://localhost/Services/TestService.svc"/>
<add baseAddress="net.pipe://Dev/Services/TestService.svc"/>
</baseAddresses>
</host>
<!-- HTTP -->
<endpoint
address=""
binding="basicHttpBinding"
contract="ITestService" name="TestServiceBasicHttp" behaviorConfiguration="PayloadMessageInspector" />
<!-- NetTCP -->
<endpoint
address=""
binding="netTcpBinding"
contract="ITestService" name="TestServiceNetTcp" behaviorConfiguration="PayloadMessageInspector" />
<!-- NetPipe -->
<endpoint
address=""
binding="netNamedPipeBinding"
contract="ITestService" name="TestServiceNetPipe" behaviorConfiguration="PayloadMessageInspector" />
<!-- Mex (Net.Tcp / Net.Pipe ) -->
<endpoint name="TestServiceNetTcpMex" address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
<endpoint name="TestServiceNetPipeMex" address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" />
</service>
</services>
<!-- Extensions -->
<extensions>
<behaviorExtensions>
<add name="MessageHeaderBehavior" type="ServiceMessageHeaderBehavior, TestService.Logging" />
<add name="MessagePayloadBehavior" type="ServiceMessagePayloadBehavior, TestService.Logging" />
</behaviorExtensions>
</extensions>
</system.serviceModel>
1 ответ
Тестовый клиент WCF смог увидеть мою конечную точку именованного канала после того, как я добавил следующую конечную точку mex:
Просматривая конфигурацию, сгенерированную тестовым клиентом, я обнаружил, что у меня неверный адрес конечной точки моего клиента. Это в конечном итоге работает на меня...
net.pipe://localhost/{webapproot}/{path}/ServiceName.svc/{relativeaddress}
Я надеюсь, что это помогает кому-то.