2011-03-09 82 views
1

場景:WCF服務發現範圍

我有,我想不同的客戶端發現一些服務。執行發現工作是完美的。但是現在我出於不同的原因有不同版本的這些服務。

我的應用程序生命週期中可能會有3-4個不同的層:生產,分段,測試和開發。

我需要支持過去6個月部署的客戶端,因此我可能需要同時運行2 - 3個版本的服務。沒有不同版本的合同,但實施版本略有不同。

我可能還需要根據它們提供的數據類別來分開服務。假設我有一個服務實例提供美國數據,另一個實例提供加拿大數據,可能還有第三個實例提供澳大利亞數據。在某些情況下,該服務可能有多個類別。

因此,從客戶的角度來看,如果我僅僅根據合同要求服務,那麼當我真的只想與生產,美國版本1.1的服務交談時,我可能會得到9-15個端點。我知道該服務的存在範圍,但我無法成功創建一系列範圍,這些範圍允許我在我的環境中需要的那種靈活性。

我前面的例子我正在尋找一個非常具體的服務,但我可能也想看到一個特定合約的所有服務只是生產,無論他們是哪個國家或哪個版本。我可能還需要在混合中增加額外的「範圍」。總的來說,我可能有4-6個標準被用作「範圍」。

問題:

餘地建立這種複雜的濾波或做我需要做一些定製的正確方法?

如果範圍是正確的方法做到這一點,你可以指我一個樣本,我可以看看?

如果我需要去定製是否有一個標準的方法來擴展「範圍」行爲,以便我可以欺騙它做我想做的事情?

源代碼:

http://nardax.codeplex.com/

回答

4

是的,範圍是要走的路。我想向你推薦一篇由Juval Lowy撰寫的偉大文章Discover a New WCF with DiscoveryProgramming WCF services書的作者)。下面是一個使用範圍就直接報價:

作用域是 定製發現和添加 複雜的行爲,你的應用程序 非常有用,寫 框架或管理工具時尤其如此。 經典用於示波器的目的是爲了使 客戶端能夠區分 不同 應用程序中的多態服務。但是,這是一種罕見的情況。我發現 示波器很方便,當涉及到 區分 同一應用程序中的端點類型。

例如,假設對於給定的 合同,您有多個 實現。 您有用於生產 的 工作模式以及用於 測試或診斷的模擬模式。使用範圍 ,客戶端可以挑選並選擇所需的正確實現類型 ,並且不同客戶端從不衝突 彼此之間通過消耗另一個服務的 。您也可以使用 根據調用的上下文,在同一個客戶端上選取不同的端點 。您可以使用 具有用於分析的端點, 調試,診斷,測試, 儀器等。

這很適合您想要解決的問題。

該文章還包含在配置和代碼中聲明範圍的好例子。從服務消費者的角度來看,我看到兩種選擇:如果要在發現階段過濾服務,或者您可以獲取所有服務並檢查其範圍,則可以將所有期望的範圍填充到FindCriteria實例中,並將其傳遞給DiscoveryClient.Find方法手。

範圍本身是一個Uri對象,因此它可以使用「key = value」表示法將很多不同的信息放在那裏。這應該關注「擴展」範圍過濾,並且它不會限制您的前向可兼容性。