案例:我有一组 xsd 文件,它们定义了 WSDL 定义中使用的常见类型(Header、ApplicationError)。每个 web 服务在服务特定类型旁边输入一个或多个这些共享类型。
在为服务生成代理时,我不断地为每个服务代理获取这些共享类型的副本,因此我打算将它们放在共享库中并使用 /reference 来包含这些类型。我无法让它工作。
首先,生成代理并包含所有 *.xsd 工作正常,并生成合同。然后使用带有 /dconly 参数的每个 xsd 的 svcutil 不起作用。/XmlSerializer 都作为 /DataContractSerializer。只有 /importXmlType(或 xsd.exe)有效。
然后,如果我将它们放在一个类项目中,添加生成的代码,编译并将其用于 /reference 参数,我仍然会为这些类型生成代码。
即使我使用为代理生成的类,svcutil 仍然无法识别它们。
任何人都有这种模式的经验,也许遇到过同样的问题?
XmlSerializer 作为 DataContractSerializer svcutil /dconly /ser:XmlSerializer ApplicieFout-v0200-b03.xsd 的错误消息
错误:无法导入命名空间“http://schemas.customer.nl/ApplicatieFout-v0200”中的“ApplicatieFout”。元素“FoutCode”上的表单必须是合格的。要么更改架构,以便类型可以映射到数据协定类型,要么使用 ImportXmlType 或使用不同的序列化程序。
如果您使用 /dataContractOnly 选项导入数据合同类型并收到此错误消息,请考虑改用 xsd.exe。在您的服务合同上应用 XmlSerializerFormatAttribute 属性后,可以在 Windows Communication Foundation 中使用由 xsd.exe 生成的类型。或者,考虑使用 /importXmlTypes 选项将这些类型导入为 XML 类型,以便与服务合同上的 DataContractFormatAttribute 属性一起使用。