2010-10-14 13 views
2

隨着時間的推移您的Web服務可能會改變,你會怎麼做?如何應對變化? (不同的版本;添加更多的功能,修改甚至刪除功能等)如何使用Web服務管理更改?

回答

3

通常,對於非重大更改(主要是方法的添加),您可以在同一個終點擴展服務合同/實現。再說一次,當我說非破壞性變化時,它意味着語法和語義的變化。

否則,做乾淨的方法是舉辦不同的終點新的服務版本都在一起。在關閉舊版本之前,讓客戶有機會逐漸遷移到新版本(如果需要)。很多時候,您可以使用幕後的大部分服務實現並減少工作量。

此外,有時服務變化並不的方法但在輸入/輸出數據。這些可以通過版本化數據結構來解決。例如,接受XML輸入的函數可能會開始支持輸入中的附加數據/標記。在這種情況下,您可以將其託管在相同的端點上,然後根據數據確定客戶端正在發送的內容。雖然,我寧願在這種情況下有另一種方法或新的終點。

最後,你可以有也有你的服務接口方法可以發出版本信息或驗證由客戶提供的版本信息告訴它的服務實現是否與任何服務合約已內置兼容。這允許客戶在出現不兼容或配置不正確的情況下發送友好的消息。這種情況下的另一種變化可以是向客戶返回兼容服務版本的端點地址(兼容服務的動態發現的種類)。

1

我想補充一點,可以使用相同的代碼在後端,但只返回不同的輸出新的端點。

如果變化是足夠小(如只是一個新的屬性),那麼理想情況下,你可以只更新現有服務端點的輸出;將新的特性添加到輸出中並讓較老的客戶端忽略它。但問題在於,soap的使用者(特別是在.NET世界中)使用工具生成靜態代理,這些代理非常不靈活,無法更改。