当我使用DataContact / DataMember属性公开WCF服务时,我在此服务的其他项目中创建的每个服务引用都会生成具有DataContract / DataMember属性的类(以及IExtensibleDataObject接口实现等)。
在另一个项目中,我必须使用一个SOAP服务,其WSDL尚未由WCF生成,但是使用其他一些我不知道且不能改变行为的工具。
我的问题是我的svcutil代理生成的代码灵活性稍差:
我使用的svcutil工具/ wsdl发生了什么,它必须以这种方式生成代码?
答案 0 :(得分: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>