当我暴露使用DataContact /数据成员属性的WCF服务,每个服务参考我使在其他项目中该服务与DataContract /数据成员属性(以及IExtensibleDataObject接口实现,等等)生成的类。
在另一个项目中,我必须使用SOAP服务,它的WSDL没有被WCF产生的,而是通过一些其他的工具,我不知道和不能改变的行为。
我的问题是,我的SvcUtil工具代理生成的代码是有点不够灵活:
- 这些类使用Serializable属性代替DataContract(GeneratedCode属性指定使用的System.Xml代替System.Runtime.Serialization的)
- IExtensibleDataObject未实现
- OptionalField属性不使用
- XmlElement的顺序是固定的,这会导致反序列化失败,当一个新的XS:元素被插入在WSDL XS中间:序列...
发生了什么事在SvcUtil工具工具/我用的是WSDL,它具有以这种方式来生成代码?
发生了什么事在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>