我已經開始爲FedEx的webservice API編寫接口。他們有我感興趣的3種不同的API;費率,運送和跟蹤。我正在使用SvcUtil.exe生成服務代理。Coerce類型在C#中具有相同佈局的不同命名空間中
FedEx在各自的WSDL文件中指定了不同的服務端點。每個服務端點都有它自己的XML命名空間(如http://fedex.com/ws/rate/v5和http://fedex.com/ws/ship/v5)
服務端點確實使用了不少相同的類型,如地址,測量,重量,AuthenticationDetail,ClientDetail等..
這裏問題在哪裏,我可以同時向SvcUtil.exe提供所有WSDL文件,通常它會將任何相同類型合併爲一個共享類型,但由於FedEx的每個服務都位於其自己的命名空間中,因此它們會重新聲明這些名稱空間下的每個WSDL文件中的這些類型,而我最終將爲每個名稱空間分配一個地址,地址1和地址2。
爲了解決這個問題,我現在要做的是通過svcutil單獨運行每個WSDL,並將它們分別放在它們自己的.NET名稱空間(例如FedEx.Rate,FedEx.Ship,FedEx.Track)中。與此問題是,現在我在每個名稱空間(Fedex.Rate.Address,FedEx.Ship.Address)中有一個不同的地址類型。
這使得在GetAuthenticationDetail()工廠方法之類的服務之間使用的代碼變得很難推廣,所以我不必在每個使用不同服務的地方重複使用代碼。
有沒有什麼辦法在C#中強制FedEx.Rate.Address到FedEx.Ship.Address?
+1。我正在努力解決同樣的問題,從來沒有找到一個很好的解決方案。 – 2009-02-18 19:53:08
偉大的問題;我以爲我錯誤地導入了WSDL,直到我看得更近,而且他們確實爲不同的名稱空間分配了相同的類型。 – 2009-07-16 00:01:19