我正在尝试将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]命名空间):
如果我的情景可能,以及如何,有人可以建议我吗?
答案 0 :(得分: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>