2012-11-03 124 views
7

我正在構建一個WCF路由器,它需要充當許多內部Web服務(WCF和ASMX)的代理。路由部分相當直接,但我無法理解服務元數據交換如何在此解決方案中工作。WCF路由和服務元數據

換句話說:客戶端如何獲取路由器後面的內部服務的元數據?我是否需要手動向消費者提供WSDL文件?我能以某種方式設置路由器以返回適當的內部服務的元數據嗎?

或者,也許我的架構是完全錯誤的?

+2

沒有足夠的信心將它張貼作爲一個答案,但我不相信手動提供的WSDL文件是要走的路; AFAIK沒有簡單的方法直接路由元數據。有人問[關於MSDN的一個類似問題](http://social.msdn.microsoft.com/Forums/en/wcf/thread/b31891be-98d3-4440-a617-f584435b01aa),並得到了類似的答案(也許你已經看到了)。 – Jeroen

+2

是的,我見過這些答案中的大部分。實際上,我成功地獲得了一條額外的路徑來直接從服務中提取元數據,但是這引發了新的困難 - 例如,從服務點到內部服務地址的WSDL。我正在研究更多的選擇,並且一旦我擁有了一些東西,就會在這裏發佈。 –

回答

4

我看到2個選項在這裏:

  1. 這可能是建立一個「非透明」代理選項,如果你不希望暴露內部地址。優點是你可以做的不僅僅是路由消息(即這樣的代理可以用作「安全邊界」,解開加密的消息並將它們平滑地傳遞給內部端點)。它還可以提供「可互操作級別」,使用相同的數據類型/消息XML結構將WCF服務公開爲簡單的SOAP。缺點是您必須更新其代碼以及代理服務
  2. 您可以實施WSDL重寫器。有了它,您可以即時屏蔽內部服務URL - 根據您的條件,簡單的字符串替換可能會或可能不足夠。

參考:

+0

這如何幫助獲取路由器後面的內部服務的元數據?你提供了不錯的信息,但我不太明白這是如何回答這個問題的? – Jeroen

+0

我想說的是,你可以用外部端點替換內部端點(它也適用於所描述的體系結構OP),或者你可以即時重寫WSDL,用外部替換內部鏈接在需要的地方。您可以路由元數據,但只有客戶端才能連接到WCF路由器,而無需從原始服務中提取WSDL,則需要執行一些額外的步驟。 – DarkWanderer

+0

實際上,IWsdlExportExtension比消息檢查器更好。回答編輯。 – DarkWanderer

0

你有沒有考慮使用一個簡單的HTTP代理服務器呢?所有使用REST或SOAP的WCF都在其核心HTTP請求。看起來像路由功能(我假設你是基於主機名,URL路徑或參數)可以通過代理HTTP請求來執行,而不需要了解內容。 ASP.Net將自行完成傳入請求的清理工作,但您可以根據需要添加其他自定義篩選。

1

也可以使用相同的「路由器服務」來獲取路由器後面的內部服務的單個WSDL。

退房this thread