2015-12-21 74 views
0

使用SvcUtil爲SOAP WebService生成的代理。這個網絡服務有許多複雜的類型,每年都會改變。有沒有我可以用來爲所有類生成包裝的工具。在包裝類中使用組合我將調用代理類。用於爲代理類生成包裝的.NET工具

+0

您可以嘗試T4Template。編寫您可以在您生成的代理類上運行的自定義TT以創建包裝類。但是AFAIK不存在這樣的工具,因爲通過代理創建包裝是一個定製的需求。 – vendettamit

+0

那麼,開發人員如何處理對代理的更改?這可能會導致應用程序在很多地方進行更改。 – user2596613

+0

爲了避免某種程度的變化影響,我個人更喜歡使用動態代理調用。意味着你並不需要使用svcutil來生成代理。所有合同都在客戶端和服務器之間共享。所以應用程序只需要端點信息休息通道工廠就可以完成調用的需要。這部分你必須自己做。 – vendettamit

回答

0

Svcutil.exe根據WSDL的XSD部分在客戶端生成POCO類型。不應該涉及T4Template,這太複雜,過度和不適當。 Svcutil.exe可能已經創建了您需要的所有代理類。

如果複雜類型可能每年都在變化,那麼您可以考慮版本控制。

一旦接口發佈,你不應該改變它。這適用於運營合同和數據合同。

你可以參考這篇文章WCF for the Real World和谷歌WCF版本控制。

因此,基本上你可以在合約中明確聲明XML目標名稱空間,並用XML名稱空間映射CLR名稱空間。當您需要更改複雜類型時,您必須提供另一個版本的WCF服務。在所有客戶端升級到最新版本之前的過渡期內,您保持兩個版本都在運行。

+0

如前所述,我無法控制服務。我是客戶,希望確保在每年的服務或複雜類型發生變化時,我無需對應用程序進行太多更改。 – user2596613

+0

除非服務提供者拒絕通過url或可下載的文件發佈WSDL文件,否則您將使用svcutil.exe來針對wsdl文件生成代理類。當然,你無法控制服務,也不應該關心服務是以.NET,Java還是PHP實現的。此服務有一些中斷的更改(希望通過版本控制),您只需要再次針對新發布的WSDL運行svcutil.exe。 – ZZZ