1

TCPとHTTPの2つのバインディングを使用しています。両方のバインディングに関するmexデータを提供したいと思います。私が欲しいのは、mexHttpBindingがHTTPサービスのみを公開し、mexTcpBindingがTCPサービスのみを公開することです。または、HTTPバインディングからのみ統計サービスにアクセスし、TCPからeventLoggingサービスにアクセスすることは可能ですか?

例えば:

  • TCPの場合、私は

    net.tcp://localhost:9001/ABC/mex
    net.tcp://localhost:9001/ABC/eventLogging
    
  • HTTPの場合

    http://localhost:9002/ABC/stats
    http://localhost:9002/ABC/mex
    

(WCFテストクライアントを使用して)いずれかのベースアドレスに接続すると、すべてのサービスにアクセスできますか?net.tcp:// localhost:9001 / ABCに接続するときのように、HTTPバインディングで提供されるサービスを使用できます。どうしてこんなことに?

<system.serviceModel>
  <services>
    <service behaviorConfiguration="ABCServiceBehavior" name="ABC.Data.DataServiceWCF">
      <endpoint address="eventLogging" binding="netTcpBinding" contract="ABC.Campaign.IEventLoggingService" />
      <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" />
      <endpoint address="stats" binding="basicHttpBinding" contract="ABC.Data.IStatsService" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost:9001/ABC" />
          <add baseAddress="http://localhost:9002/ABC" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <behaviors>
    <serviceBehaviors>
      <behavior name="ABCServiceBehavior">
        <serviceMetadata httpGetEnabled="false" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>
4

1 に答える 1

4

両方のバインディングに関するmexデータを提供したいと思います。私が欲しいのは、mexHttpBindingがHTTPサービスのみを公開し、mexTcpBindingがTCPサービスのみを公開することです。または、HTTPバインディングからのみ統計サービスにアクセスし、TCPからeventLoggingサービスにアクセスすることは可能ですか?

この場合、2つの別個のサービスが必要です。1つは公開eventLoggingのみを行い、もう1つは公開statsのみを行います。

2つの別々のサービスがある場合、一方をHTTP経由で公開すると、そのmexはそれらのメソッドのみを表示し、もう一方はTCP/IP経由で公開してそのメソッドを公開します。

<services>
  <service name="ABC.Data.DataServiceWCFEventlogging"
           behaviorConfiguration="ABCServiceBehavior" >
    <endpoint address="eventLogging" 
              binding="netTcpBinding" 
              contract="ABC.Campaign.IEventLoggingService" />
    <endpoint address="mex" 
              binding="mexTcpBinding" 
              contract="IMetadataExchange" />
    <host>
       <baseAddresses>
         <add baseAddress="net.tcp://localhost:9001/ABC" />
       </baseAddresses>
     </host>
  </service>
  <service name="ABC.Data.DataServiceWCFStats"
           behaviorConfiguration="ABCServiceBehavior" >
     <endpoint address="stats" 
               binding="basicHttpBinding" 
               contract="ABC.Data.IStatsService" />
     <endpoint address="mex" 
               binding="mexHttpBinding" 
               contract="IMetadataExchange" />
     <host>
        <baseAddresses>
           <add baseAddress="http://localhost:9002/ABC" />
        </baseAddresses>
     </host>
  </service>
</services>

同じサービスに両方のメソッドがある場合、その一部のみをhttpで公開し、別の部分をtcp/ipで公開する方法はありません。

于 2010-03-08T15:24:18.030 に答える