1

我正在尝试将 WCF 路由服务与发现相结合,但似乎它们不能一起工作。这是我的场景:

来自客户端的请求进入路由服务。我希望路由服务使用发现来找到正确的端点并将传入消息发送到找到的端点。然而,路由服务向发现服务发送了一个 [ 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] 命名空间): Fiddler 屏幕截图显示正在发送到发现服务的 [http://tempuri] 命名空间

如果我的情况可行,有人可以建议我吗?

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 回答