Ошибка возврата 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}

Я надеюсь, что это помогает кому-то.

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