【问题标题】:In a WCF proxy-generated client, what determines the serializer used?在 WCF 代理生成的客户端中,什么决定了使用的序列化程序?
【发布时间】:2012-06-17 13:07:36
【问题描述】:

当我使用 DataContact/DataMember 属性公开 WCF 服务时,我在其他项目中对该服务所做的每个服务引用都会生成具有 DataContract/DataMember 属性的类(以及 IExtensibleDataObject 接口实现等)。

在另一个项目中,我必须使用一个 SOAP 服务,它的 WSDL 不是由 WCF 生成的,而是由其他一些我不知道且无法更改行为的工具生成的。

我的问题是我的 svcutil 代理生成的代码不太灵活:

  • 类使用 Serializable 属性而不是 DataContract(GeneratedCode 属性指定使用 System.Xml 而不是 System.Runtime.Serialization)
  • IExtensibleDataObject 未实现
  • 未使用可选字段属性
  • XmlElement 的顺序是固定的,当新的 xs:element 插入到 wsdl xs:sequence 的中间时会导致反序列化失败...

在我使用的 svcutil 工具/wsdl 中发生了什么,它必须以这种方式生成代码?

【问题讨论】:

    标签: wcf serialization wsdl datacontract svcutil.exe


    【解决方案1】:

    在我使用的 svcutil 工具/wsdl 中发生了什么,它必须 用这种方式生成代码?

    Svcutil.exe 工具可用于为 WCF 和 ASMX 服务创建客户端代理。使用 Svcutil.exe 从 ASMX 服务创建代理时,代码中生成的数据类型通常使用 XML 序列化。

    http://msdn.microsoft.com/en-us/library/cc304837.aspx

    更新:

    我最好的猜测是 WSDL 中指定的架构决定了 svcutil.exe 必须使用哪个序列化。

    数据合约序列化模式的命名空间是http://schemas.microsoft.com/2003/10/Serialization,您可以得到更多关于here的详细信息。

    因此,如果 svcutil 看到 wsdl 中指定的此模式,那么它会使用数据合同序列化程序,否则会使用 xml 序列化程序。

    我还检查了 WCF 和 ASMX 的 WSDL。 WCF 服务的 WSDL 包含以下 XSD 部分,而它们在 ASMX 的部分中缺失。

    <xsd:schema targetNamespace="http://tempuri.org/Imports">
    
       <xsd:import schemaLocation="http://localhost:53328/Service1.svc?xsd=xsd0"
         namespace="http://tempuri.org/"/>
    
       <xsd:import schemaLocation="http://localhost:53328/Service1.svc?xsd=xsd1" 
         namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
    
       <xsd:import schemaLocation="http://localhost:53328/Service1.svc?xsd=xsd2" 
          namespace="http://schemas.datacontract.org/2004/07/WcfService1"/>
    </xsd:schema>
    

    【讨论】:

    • 就我而言,我没有使用 WCF 或 asmx 服务。 svcutil.exe 可以为任何格式良好的 wsdl 生成客户端代理(对使用的语法有一些限制,但无论如何)。那么 wsdl 中的什么决定是使用 datacontract 还是 xml 序列化? msdn 上是否有关于此的文档?
    猜你喜欢
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2010-10-22
    相关资源
    最近更新 更多