Объединение маршрутизации и обнаружения WCF

Я пытаюсь объединить службу маршрутизации WCF с Discovery, но кажется, что они не могут работать вместе. Это мой сценарий:

Запрос от клиента поступает в службу маршрутизации. Я хочу, чтобы служба маршрутизации использовала обнаружение, чтобы найти правильную конечную точку и отправить входящее сообщение найденной конечной точке. Однако служба маршрутизации отправляет пространство имен [ http://tempuri.org%5D службе обнаружения, и поэтому служба обнаружения не может найти службу по этому пространству имен, так как она ожидает пространство имен входящего сообщения в службе маршрутизатора.

Я знаю, что правильно настроил службу обнаружения, потому что она может разрешить конечную точку, если я использую конфигурацию обнаружения на стороне клиента. Однако обнаружение на стороне клиента невозможно в моем производственном сценарии. Также служба маршрутизатора работает, если я не использую обнаружение для разрешения конечной точки.

Это моя конфигурация маршрутизации и обнаружения:

<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%5D):Скриншот Fiddler, показывающий пространство имен [http://tempuri], отправляемое в службу обнаружения

Может кто-нибудь посоветовать мне, если мой сценарий возможен и как?

1 ответ

Решение

Я нашел решение. Мне пришлось указать критерии поиска в элементе discoveryClientSettings. Здесь я мог бы четко сказать, какие типы я ищу. Моя стандартная конфигурация Endpoints теперь выглядит следующим образом:

<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>
Другие вопросы по тегам