2009-09-14 62 views
0

如果我沒有在單獨的程序集中保留服務合同,代理和服務,服務合同和代理駐留在客戶端程序集中,並且服務駐留在服務程序集中。WCF DataContract

如果我不將數據合同保存在單獨的程序集中,它應該駐留在哪裏,客戶端還是服務端?

數據合同可以駐留在兩個程序集中嗎?

回答

2

在典型的面向服務的場景中,您的服務器端服務庫中有DataContract。任何會打電話給你的人都會爲你的服務添加一個客戶端代理連接,因此實際上會重複你的DataContract。

因此,在「正常」情況下,您在服務器端擁有您的「主」DataContract,並在每個訪問您的服務的客戶端代理中有一個單獨的類。這些客戶副本在電話上是「相同的」,例如它們會序列化成相同的消息格式 - 這實際上就是您的客戶端和服務器之間的所有內容 - 串行化消息被反覆發送。

作爲一名服務開發人員,您必須在服務器端擁有DataContract。但同樣也適用於服務合同 - 這些服務合同也必須在服務器端 - 否則您將無法將您的服務接口發佈到世界上供任何可能連接到您的服務的人使用。

我建議以下至少兩個項目的每個服務器:

  • 其中包含了服務合同(IService接口),數據合同,以及可能的故障一類庫合同
  • 一個類庫自託管EXE(控制檯應用程序),它包含實際的服務實現(實現服務接口的類)

Marc

0

我強烈建議有一個單獨的程序集,包含客戶端和服務器端引用的接口和合約。

0

答案是 - 這取決於。

通常最好將它們分開,但可能會出現將它們放在一起的情況。

當您將它們分開時,您可以引用和使用數據合同,而無需拖動您的操作合同,從而爲您構建應用程序的方式提供了更大的靈活性。

您也可以獨立版本您的合同。

但這一切都取決於您的實際應用。