2008-10-22 42 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:输出

我找不到任何有意义的东西来帮助我调试。