2

何らかの理由で、サービスの Net.Pipe エンドポイント (EP) を動作させることができません。

これは、IIS7 でホストされる .Net 4.0 WCF サービスです。

欠点は2つ…

  • まず、EP はメタデータを提供しません。
  • 次に、EP は実際には機能しません。VS2010 の一部である WCF テスト クライアントを使用してテストしています。

どちらも実際には同じ問題に関連していると思います。

実際に受け取ったエラーは...

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] に変更されるということです。これは奇妙に思えます。これは、出力されるサービス メタ データで明らかです。ただし、パイプ名またはこの名前を変更した名前をテスト クライアントで使用すると、どちらも機能しません。

また、Windows の機能で WAS を有効にし、IIS ですべてのプロトコルのサイト バインディングを設定し、IIS の [有効なプロトコル] ボックスにプロトコルの名前を入力しました (http、net.tcp、net.pipe)。また、Windows Servics で「Ne​​t.Pipe リスナー アダプター」が起動していることも確認しました。

私の 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> 
4

1 に答える 1

1

次のmexエンドポイントを追加した後、WCFテストクライアントは名前付きパイプエンドポイントを表示できました。

テストクライアントが生成した構成を確認したところ、クライアントのエンドポイントアドレスが間違っていることがわかりました。これは私のために働くことになった...

net.pipe://localhost/{webapproot}/{path}/ServiceName.svc/{relativeaddress}

これが誰かに役立つことを願っています。

于 2013-02-24T02:14:22.043 に答える