2010-10-20 74 views
0

在學習WCF的過程中。服務合同(接口)應該暴露給客戶嗎?

要examplify,可以說我有3個組件:

1)Service.Contract:它有)的界面的MyType IMyInterface的定義(;

2.)服務:它具有接口的MyType爲MyService()的執行情況:IMyInterface的;

3)客戶端:它調用服務。

我的基本問題是應該「Service.Contract」項目被暴露在「客戶」的項目,因爲它需要知道接口的原型。如果是的話,它不違背SOA原則嗎?如果不是,那麼我們如何才能通過終端地址實現對服務的調用?

回答

0

的一般方法是添加一個服務引用到你的項目,創造出實現公開的數據合同和客戶端調用函數爲您服務基於客戶端類。您實際上不使用定義服務的接口或定義數據協定的類。

+0

是的。添加服務引用的竅門。謝謝! – Oshin 2010-10-20 06:41:21

+1

此答案並不完整。向客戶端添加服務引用將簡單地重新創建Service.Contract程序集中定義的類型。 SOA要求您使用契約而不是行爲,並且通過在客戶端添加對Service.Contract程序集的引用,您不會違反該原則。如果您正在構建服務器和客戶端,那麼在共享兩者之間的合同組件時沒有問題。 – 2010-10-20 07:30:42

1

是。界面需要暴露給客戶端。否則,客戶端不知道該服務上有哪些可用的方法。

有一些可以用來生成從服務的元數據爲你的界面代碼(假設你把服務暴露數據)可用的工具,因此客戶端不需要實際的接口文件。這實際上是當您使用Visual Studio(或其他開發工具)並使用「添加服務引用」時發生的情況。

或者有一個命令行工具,附帶的dotNet - svcutil.exe的:
http://msdn.microsoft.com/en-us/library/ms733133.aspx
http://en.csharp-online.net/WCF_Essentials%E2%80%94Generating_the_Proxy

我不知道爲什麼這違反了SOA原則。正如我以前的評論所說。如果客戶不知道實施的合同是什麼,客戶如何知道如何致電您的服務?

+0

羅傑。我錯過了在客戶端上生成接口代碼的部分。添加服務引用的技巧。謝謝! – Oshin 2010-10-20 06:39:11