簡體   English   中英

結合WCF路由和發現

[英]Combining WCF Routing and Discovery

我正在嘗試將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]命名空間正在發送到發現服務

如果我的方案可行,有人可以建議我嗎?

我找到了解決方案。 我必須在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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM