2010-09-08 58 views
5

我有一個wcf服務,可以在單個端點地址上公開大量的服務方法。到目前爲止,所有服務方法都是在一個服務合同類中實現的。這個服務契約類實現了幾個服務契約接口。現在我想將服務合同方法的實施分成幾個階段,以避免合同階層不斷增長。我使用ServiceHost的自託管方案。 ServiceHost只採用一種實現服務方法的單一類型,所以似乎所有的東西都必須在這個類中實現。當然,這些方法的肉可以分解成幾個類。但是,還有一種方法可以將方法拆分爲幾個類?WCF在單個端點地址處的大型接口

回答

5

您可以將該服務實施爲partial class,該服務可讓您將實施分割爲多個文件。

如果要求保持單個端點和單個接口,那麼就沒有其他方式將其分開 - 您創建的一個類必須實現所有接口。

我會建議保持服務實現儘可能簡單,並且每個方法都是一個單行代碼,將操作委託給實際實現,然後可以將其分解爲多個類。也許每個操作都做一個也是有道理的?這是我以前用過的成功模式。

+0

謝謝您的回覆。我也考慮過部分課程,但在我看來,部分課程並不能幫助簡化解決方案。我會按照您的建議去使用,每個操作使用一個班輪 – WalterOesch 2010-09-10 21:26:26

0

您可以根據需要創建任意數量的服務合同,每個服務合約都有自己的邏輯。

這種方法的好處在於,您似乎希望將邏輯上相關的功能組合在一起。

不利的一面是調用客戶端現在必須知道調用函數時要使用哪個服務。

0

限制服務中操作的數量是一種很好的方法。正如我現在理解你的場景,你有單一的服務實現,它實現了幾個服務合同。這意味着您的服務中已經有多個端點 - 每個端點都暴露單一合同。在這種情況下,您的客戶已經準備好爲每個需要的合同創建單獨的代理。

現在你想在多個服務實現中劃分你的服務實現類。每個服務實施將實施一個(或更小的一組)服務合同。這將需要修改您的託管應用程序 - 每個服務實現您都需要單獨的ServiceHost。您還需要單獨配置和每個服務實施的唯一地址。

客戶端可以重新創建新的服務,但我認爲它也應該可以簡單地更改端點的地址,它應該工作。

+0

謝謝您的回覆。我目前正在計劃和實施一個相當大的系統的數據交換接口。客戶很可能總是使用可能運行於不同平臺的整個界面。在這樣的情況下,我認爲客戶端只需要一個端點地址是最簡單的。我創建了幾個服務契約接口,讓一個「主接口」繼承自所有服務契約接口。然後servcice合同類實現主接口。 – WalterOesch 2010-09-10 21:32:53