1

WCF ルーティング サービスと Discovery を組み合わせようとしていますが、連携できないようです。これは私のシナリオです:

クライアントからの要求がルーティング サービスに届きます。ルーティング サービスで検出を使用して正しいエンドポイントを見つけ、見つかったエンドポイントに着信メッセージを送信するようにします。ただし、ルーティング サービスは [ http://tempuri.org]名前空間を検出サービスに送信します。したがって、検出サービスはルーター サービスで受信メッセージの名前空間を想定しているため、その名前空間でサービスを見つけることができません。

クライアント側で検出構成を使用するとエンドポイントを解決できるため、検出サービスを正しく構成したことはわかっています。ただし、私の運用シナリオでは、クライアント側での検出はできません。また、検出を使用してエンドポイントを解決しない場合、ルーター サービスは機能します。

これは私のルーティングと検出の構成です:

<routing>
  <filters>
    <filter name="GreetingsFilter" filterType="EndpointName" filterData="GreetingsRoutingEndpoint"/>
  </filters>
  <filterTables>
    <filterTable name="DefaultTable">
      <add filterName="GreetingsFilter" endpointName="GreetingsDiscoveryEndpoint"/>
    </filterTable>
  </filterTables>
</routing>

<client>
  <endpoint behaviorConfiguration="LoggingBehavior" binding="basicHttpBinding"
    contract="*" name="GreetingsDiscoveryEndpoint"
    kind="dynamicEndpoint" endpointConfiguration="dynamicEndpointConfiguration" />
</client>

<standardEndpoints>
  <dynamicEndpoint>
    <standardEndpoint name="dynamicEndpointConfiguration">
      <discoveryClientSettings>
        <endpoint address="http://server/DiscoveryProxy.svc" behaviorConfiguration="DiscoveryEndpointBehavior" binding="wsHttpBinding" bindingConfiguration="NoSecurityBinding" name="DiscoveryEndpoint" kind="discoveryEndpoint" endpointConfiguration="managedDiscoveryEndpointConfiguration"/>
      </discoveryClientSettings>
    </standardEndpoint>
  </dynamicEndpoint>

  <discoveryEndpoint>
    <standardEndpoint name="managedDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" discoveryMode="Managed"/>
  </discoveryEndpoint>
</standardEndpoints>

これは、検出サービスに何が送信されているかを示すフィドラーの図です。([ http://tempuri] 名前空間に注意してください): [http://tempuri] 名前空間が検出サービスに送信されていることを示す Fiddler のスクリーンショット

私のシナリオが可能かどうか、そしてどのようにアドバイスできますか?

4

1 に答える 1

1

解決策を見つけました。discoveryClientSettings 要素で検索条件を指定する必要がありました。ここで、探しているタイプを明示的に言うことができます。私の standardEndpoints 構成は次のようになります。

<standardEndpoints>
  <dynamicEndpoint>
    <standardEndpoint name="dynamicEndpointConfiguration">

      <discoveryClientSettings>
        <endpoint address="http://server/DiscoveryProxy.svc" behaviorConfiguration="DiscoveryEndpointBehavior" binding="wsHttpBinding" bindingConfiguration="NoSecurityBinding" name="DiscoveryEndpoint" kind="discoveryEndpoint" endpointConfiguration="managedDiscoveryEndpointConfiguration" />
        <findCriteria>
          <types>
            <add name="IGreetingService" namespace="urn:poc:igreetingservice:v1"/>
          </types>
        </findCriteria>
      </discoveryClientSettings>
    </standardEndpoint>
  </dynamicEndpoint>


  <discoveryEndpoint>
    <standardEndpoint name="managedDiscoveryEndpointConfiguration" discoveryVersion="WSDiscovery11" discoveryMode="Managed"/>
  </discoveryEndpoint>
</standardEndpoints>
于 2013-01-16T08:00:12.260 に答える