2008-10-22 57 views
1

我想在web方法中使用類型化的參數。但是,當Visual Studio 2005爲客戶端創建Web引用時,它會自動創建它自己的類型。我正在使用.net Web服務和.net客戶端。如何讓一個webserice序列化/反序列化在.net中的相同類型.net

例如:

<的WebMethod> _ 公共函數foo()作爲ServerNamespace.Bar ...在客戶端 端功能

的方法變得 WebServiceInstance.Foo()作爲ClientNamespace .Webservice.Bar

返回不同的類型。

我開始寫我自己的序列化輔助類轉換的類型,但我本來以爲會有一個更好的辦法....

回答

3

如果你可以升級到.NET 3.0,我建議切換到WCF爲您的客戶端代理。 Svcutil.exe是從Web服務生成WCF客戶端代理的工具;它有一個選項/引用,它接受一個程序集並重用它的任何共享類型。 (我也建議switchnig WCF的服務,如果它在你的控制之下:-))

如果你不能升級,wsdl.exe有一個選項/ sharetypes可能會幫助你,雖然我不知道如何完全做到這一點。

0

也有一個很好的答案在這裏:.NET SOAP Common types

基本上你是不是應該共享的服務器和客戶端之間的數據結構。但是,如果你真的想在那裏縫合成爲可能性。

0

我已經升級到VS 2008和WCF。我仍然覺得解決方案是半熟的。只要共享類型不是類型化的集合,它們就會轉換爲數組或List或List(Of T)。

我真的不明白什麼是很難串行化到和來自相同的對象類型,集合或其他。

許多人引用這篇文章從代碼項目(article)

這對某些對象的作品,但我的數據對象生成以下警告(如果我強迫它使用的DataContractSerializer):

警告:可選的WSDL擴展 命名空間中的元素'body' 'http://schem as.xmlsoap.org/wsdl/soap12/'不是 處理的。的XPath: // WSDL:定義[@的targetNamespace = 'http://tempuri.org/ ']/WSDL:結合[@名稱=' WSHttpBinding_IService ']/WSDL:操作[@名稱=' 的GetData']/WSDL:輸出

我找不到任何有意義的東西來幫助我調試。