【问题标题】:How to get a webserice to serialize/deserialize the same type in .net如何让网络服务在.net中序列化/反序列化相同类型
【发布时间】:2008-10-22 04:16:50
【问题描述】:

我想在 Web 方法中使用类型化参数。但是,当 Visual Studio 2005 为客户端创建 Web 引用时,它会自动创建自己的类型。我正在使用 .net 网络服务和 .net 客户端。

例如:

_ 公共函数 Foo() 作为 ServerNamespace.Bar ... 结束函数

在客户端,方法变为 WebServiceInstance.Foo() 作为 ClientNamespace.Webservice.Bar

返回不同的类型。

我开始编写自己的序列化助手类来转换类型,但我认为会有更好的方法......

【问题讨论】:

    标签: .net web-services visual-studio-2005


    【解决方案1】:

    如果您可以升级到 .Net 3.0,我建议您将客户端代理切换到 WCF。 Svcutil.exe 是从 Web 服务生成 WCF 客户端代理的工具;它有一个选项 /reference,它接受一个程序集并重用其中的任何共享类型。 (如果它在您的控制之下,我还建议将服务切换到 WCF :-))

    如果您无法升级,wsdl.exe 有一个选项 /sharetypes 可能会对您有所帮助,尽管我不确定如何准确地升级。

    【讨论】:

      【解决方案2】:

      我之前也问过同样的问题,所以我得到的答案可能会有所帮助:

      Force .NET webservice to use local object class, not proxy class

      【讨论】:

        【解决方案3】:

        这里也有很好的答案:.NET SOAP Common types

        基本上你不应该在服务器和客户端之间共享数据结构。但如果你真的想缝有可能。

        【讨论】:

          【解决方案4】:

          我已升级到 VS 2008 和 WCF。我仍然发现解决方案是半生不熟的。共享类型似乎可以正常工作,只要它们不是类型化集合,它们会转换为数组或 List(Of T)。

          我真的不明白在同一个对象类型、集合或其他对象之间进行序列化有什么难的。

          很多人从代码项目(article)引用了这篇文章

          这适用于某些对象,但对于我的数据对象会生成以下警告(如果我强制它使用 DataContractSerializer):

          警告:可选的 WSDL 扩展 命名空间中的元素“body” 'http://schem as.xmlsoap.org/wsdl/soap12/' 不是 处理。 XPath: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_IService']/wsdl:operation[@name='GetData']/wsdl:output

          我找不到任何有意义的东西可以帮助我进行调试。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-27
            • 2021-12-03
            • 1970-01-01
            • 1970-01-01
            • 2019-11-13
            • 1970-01-01
            • 1970-01-01
            • 2010-12-17
            相关资源
            最近更新 更多