2012-10-22 34 views
2

我已經構建了一個簡單的客戶端 - 服務器應用程序。當我對服務器進行更改時,我將刪除服務引用並重新創建它以反映我對服務器應用程序所做的更改。每次進行更改時是否需要更新服務參考?

我必須在每個時間我進行了更改服務器應用程序創建它,或有任何方式的服務引用自動更新?

謝謝

回答

2

基本的答案可能是:是的。

WCF和分佈式應用程序的好處是,客戶端和服務器可以獨立發展。更新客戶端以利用更新版本的服務應該是有意識的選擇。

當然,在開發過程中,這可能是一種痛苦。有幾種方法可以緩解這個問題,這裏有一些我能想到的:

  • Use Visual Studio to manage your service reference。如果您更新了服務,只需右鍵單擊並選擇「更新服務參考」,這應該不會花費太多精力。
  • 使用測試驅動的方法來創建您的服務。這使您可以專注於完成服務中的業務邏輯,而無需客戶端訪問它。一旦你有「綠燈」,你創建客戶端。這種方法可以最大限度地減少您需要更新客戶端的次數。
  • 自動使用svcutil創建新的客戶端代碼,只要您需要/需要它。

肯定有更多(甚至更好)的方法,但這些方法可能已經幫助你了。

+3

另一種方法我把我的僱主是要使用的接口,並通過'的ChannelFactory '創建客戶端 - 主要是因爲我不喜歡服務引用的所有額外的混亂。從長遠來看,它還從可擴展性的角度提供了其他好處。 – Tim

+0

好點。這正是我需要知道的。謝謝! –

1

這取決於

如果你正在做的是在不改變現有功能的添加功能,客戶端不需要新的功能,那麼答案是否定的

這是觀念落後'IsRequired'DataMember屬性。如果您向數據協定添加新的實體,但將其標記爲IsRequired = false,則現有系統仍可使用舊合同與服務器進行交互。

顯然,添加新的方法不會打破舊合同或者,客戶不會知道新方法。

1

目前我在我的項目中遇到了同樣類型的問題。

當我添加一些方法或更改數據成員的財產在服務那麼我必須要,否則更新服務引用我的客戶端無法使用更新的東西。

基本上,如果你在服務中添加任何方法,並且你沒有更新服務引用,那麼它的罰款你的代碼不會崩潰,它會像以前一樣工作,但如果你改變一個屬性(數據成員),你是必然需要更新服務引用,否則你的代碼將會中斷。

相關問題