在WCF代理生成的客户,决定使用什么串行?(In a WCF proxy-generated cli

2019-10-16 20:40发布

当我暴露使用DataContact /数据成员属性的WCF服务,每个服务参考我使在其他项目中该服务与DataContract /数据成员属性(以及IExtensibleDataObject接口实现,等等)生成的类。

在另一个项目中,我必须使用SOAP服务,它的WSDL没有被WCF产生的,而是通过一些其他的工具,我不知道和不能改变的行为。

我的问题是,我的SvcUtil工具代理生成的代码是有点不够灵活:

  • 这些类使用Serializable属性代替DataContract(GeneratedCode属性指定使用的System.Xml代替System.Runtime.Serialization的)
  • IExtensibleDataObject未实现
  • OptionalField属性不使用
  • XmlElement的顺序是固定的,这会导致反序列化失败,当一个新的XS:元素被插入在WSDL XS中间:序列...

发生了什么事在SvcUtil工具工具/我用的是WSDL,它具有以这种方式来生成代码?

Answer 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 ,你可以得到差不多都是这个价钱细节在这里 。

因此,如果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>


文章来源: In a WCF proxy-generated client, what determines the serializer used?