Объединение маршрутизации и обнаружения 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):
Может кто-нибудь посоветовать мне, если мой сценарий возможен и как?
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>