0

tcpバインディングで使用したい2つのコントラクトを持つサービスがあります。サービス構成ファイルは次のとおりです。

<system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="ServiceDocumentos" transferMode="Streamed"
                 maxBufferSize="67108864"
                      maxReceivedMessageSize="67108864" maxBufferPoolSize="67108864"
                   closeTimeout="00:00:10"
                       openTimeout="00:00:10" receiveTimeout="00:20:00"
                       sendTimeout="00:01:00" maxConnections="100"/>
        <binding name="ServiceCore" transferMode="Buffered"
                 maxBufferSize="67108864"
                      maxReceivedMessageSize="67108864" maxBufferPoolSize="67108864"
                   closeTimeout="00:00:10"
                       openTimeout="00:00:10" receiveTimeout="00:20:00"
                       sendTimeout="00:01:00" maxConnections="100"/>
      </netTcpBinding>

      <basicHttpBinding>
        <binding name="ServiceDocumentos" messageEncoding="Mtom" transferMode="Streamed"  />
        <binding name="ServiceCore" messageEncoding="Mtom" transferMode="Buffered" />
      </basicHttpBinding>

      <wsDualHttpBinding>
        <binding name="ServiceDocumentos" messageEncoding="Mtom"/>
        <binding name="ServiceCore" messageEncoding="Mtom"/>
      </wsDualHttpBinding>
    </bindings>

    <services>
      <service behaviorConfiguration="CMMSService" name="GTS.CMMS.Service.Service">
        <endpoint binding="netTcpBinding" bindingConfiguration="ServiceDocumentos"
                 name="ServiceDocumentos" contract="GTS.CMMS.Service.IServiceDocumentos"
         address="ServiceDocumentos/">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

        <endpoint address ="net.tcp://localhost:6000/CMMSService/ServiceCore/"
                 binding="netTcpBinding" bindingConfiguration="ServiceCore"
                 name="ServiceCore" contract="GTS.CMMS.Service.IService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"
                 listenUriMode="Explicit">
        </endpoint>

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8500/CMMSService" />
            <add baseAddress="net.tcp://localhost:8501/CMMSService" />
          </baseAddresses>
        </host>


      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CMMSService">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

また、クライアント構成ファイルは次のとおりです。

<system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="ServiceDocumentos" closeTimeout="00:01:00" openTimeout="00:01:00"
         receiveTimeout="00:10:00" sendTimeout="00:01:00" hostNameComparisonMode="StrongWildcard"
         maxBufferSize="3670016" maxBufferPoolSize="524288" maxReceivedMessageSize="3670016"
         transferMode="Streamed">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="65536"
           maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        </binding>
        <binding name="ServiceCore" closeTimeout="00:01:00" openTimeout="00:01:00"
         receiveTimeout="00:10:00" sendTimeout="00:01:00" hostNameComparisonMode="StrongWildcard"
         maxBufferSize="2097152" maxBufferPoolSize="524288" maxReceivedMessageSize="2097152"
         transferMode="Buffered">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="65536"
           maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </netTcpBinding>

      <basicHttpBinding>
        <binding name="ServiceDocumentos" closeTimeout="00:01:00" openTimeout="00:01:00"
         receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
         bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferSize="3670016" maxBufferPoolSize="524288" maxReceivedMessageSize="3670016"
         messageEncoding="Mtom" textEncoding="utf-8" transferMode="Streamed"
         useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="65536"
           maxBytesPerRead="4096" maxNameTableCharCount="16384" />
        </binding>
        <binding name="ServiceCore" closeTimeout="00:01:00" openTimeout="00:01:00"
         receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
         bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
         maxBufferSize="2097152" maxBufferPoolSize="524288" maxReceivedMessageSize="2097152"
         messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"
         useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="65536"
           maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
             realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>

      <wsDualHttpBinding>
        <binding name="ServiceDocumentos" messageEncoding="Mtom"/>
        <binding name="ServiceCore" messageEncoding="Mtom"/>
      </wsDualHttpBinding>
    </bindings>

    <client>
      <!--<endpoint address="net.tcp://localhost:8501/CMMSService/ServiceDocumentos/"
       binding="netTcpBinding" bindingConfiguration="ServiceDocumentos"
       contract="IServiceDocumentos" name="ServiceDocumentos" />
      <endpoint address="net.tcp://localhost:8501/CMMSService/ServiceCore/"
       binding="netTcpBinding" bindingConfiguration="ServiceCore"
       contract="IService" name="ServiceCore" />-->

      <endpoint address="net.tcp://localhost:8501/CMMSService/ServiceDocumentos/"
       binding="netTcpBinding" bindingConfiguration="ServiceDocumentos"
       contract="IServiceDocumentos" name="ServiceDocumentos" />
      <endpoint address="net.tcp://localhost:6000/CMMSService/ServiceCore/"
       binding="netTcpBinding" bindingConfiguration="ServiceCore"
       contract="IService" name="ServiceCore" />
    </client>
  </system.serviceModel>

さまざまなバインディングでテストを行っています。たとえば、一方のコントラクトに対してIServiceDocumentosがtcpを使用し、もう一方のコントラクトに対してwsDualHttpBindingを使用するメインコントラクトがすべて正常に機能する場合。2つの契約を使用できます。

2つのコントラクトにtcpを使用すると、エラーtcp10061が発生します。

問題は同じポートの使用である可能性があると思うので、契約ごとに個別の完全なアドレスを使用しようとしますが、問題は解決しません。ただし、エンドポイントごとに完全に個別のアドレスを使用する場合は、異なるバインディングを使用すると機能します。

また、サービスtcpポート共有(Windows XPのサービス)にスターを付けようとしましたが、問題は解決していません。

ファイアウォールを無効にしようとしましたが、これで問題が解決しません。

ありがとう。

編集:

サービスを実行しているときに、次のコマンドを使用します。

netstat -ona || find "6000"

次の情報を取得します。

TCP0.0.0.0:60000.0.0.0リスニング2690

ですから、ポーは開いて聞いていると思います。

4

1 に答える 1

2

サービス エンドポイントの宛先を間違った方法で定義したと思います。ポート共有を有効にしている限り、TCP アドレスごとに異なるポートを使用する必要はありません。これは、任意の .NET 3.0 インストールで利用できる Net.TCP ポート共有サービスを使用して実現されます。デフォルトでは、このサービスは有効になっていないため、自分で有効にする必要があります。Net.TCP ポート共有サービスを有効にする方法に関連して、次のリンクを確認してください: http://msdn.microsoft.com/en-us/library/ms733925.aspx .

于 2012-06-28T11:11:44.700 に答える