2009-09-21 90 views
0

我很困惑如何添加/包含/引用WCF所涉及的服務器和客戶端項目所需的一組支持類。常見的WCF對象支持類

在我的C#的解決方案,我有:

  • 服務器項目做服務器類型的東西
  • 一個客戶項目做GUI類型的東西
  • 一個WCF圖書館網絡包含的類定義傳遞的數據對象

Server項目使用正常的引用來包含WCF庫。客戶端項目使用對WCF庫的服務引用。

我的問題是,我有一些實用工具類,這是在使用WCF庫中包含的對象定義的服務器和客戶端項目中都需要的。我不想在服務器和客戶端項目中放置兩個(相同的)這些類的副本 - 我寧願只維護一個副本。這將建議使用類庫,但是參考工作如何呢?這個新的類庫將具有對WCF庫的標準引用,然後服務器和客戶端項目都必須依次引用這個新的類庫。但是,現在客戶端項目不會有WCF庫中包含的數據對象類的兩個不同定義的定義嗎?這些實用程序類還應該包含哪些內容?

回答

1

使用服務引用方法需要一些初始使用WCF的原因,因爲它會爲您生成代碼,以簡化您在WCF早期的生活。然而,隨着您越來越習慣於使用WCF,並意識到服務參考實際上在做什麼,您就會開始意識到服務參考方法有時不僅僅是一種幫助,而是一種阻礙。

例如,就我而言,我有一個WCF服務,它被三個不同的項目使用 - 兩個C#項目和一個託管C++項目。每次我更新WCF服務接口時,我都必須在這三個項目的每一箇中重新生成服務引用。它很快成爲我的頭痛。除此之外(你也遇到過這個問題),服務引用方法只處理DataContract類的結構,而不處理它們的行爲。因此,如果將便利方法添加到服務器端的DataContract類中,則必須手動將該行爲添加到客戶端,因爲它不是通過元數據交換(MEX)操作傳送的。

那時我偶然發現video。其中,米格爾卡斯特羅提出了一個令人信服的案例,以避免完全使用服務引用方法。當你檢查他的論點時,這確實很有意義。

根據他的建議,我建議將您的DataContract類和對它們進行操作的類放在由客戶端和服務器直接引用的類庫(無服務引用)中。正如您將從視頻中看到的那樣,自己編寫客戶端代碼非常簡單,只需在WCF界面更改時對其進行更新即可。

我已經使用了這種方法幾個月,我發現解決方案比使用服務引用方法更加靈活。