【问题标题】:generate data class from XSD to use between wcf service and client?从 XSD 生成数据类以在 wcf 服务和客户端之间使用?
【发布时间】:2011-06-06 15:17:37
【问题描述】:

我已经使用xsd.exe工具生成数据类,但是wcf不喜欢要交换的数据类并抛出错误

“尝试序列化参数http://tempuri.org/:orderItems 时出错。InnerException 消息是'Type 'Store.Schemas.Order' 数据合同名称'Order:http://schemas.datacontract.org/ 2004/07/Store.Schemas' 不是预期的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。'。请有关更多详细信息,请参阅 InnerException。 "

有很多基于 XSD 的类。根据 MSDN,它说 http://msdn.microsoft.com/en-us/library/ms751512.aspx ,每个数据类都用 KnownTypeAttribute、DataContractAttribute、DataMemberAttribute 等修饰。

有没有办法可以从 xsd 生成可与 WCF 服务一起使用的数据类?因为不建议更改由 XSD.exe 生成的类,也不是简单的过程。

【问题讨论】:

    标签: xml wcf xsd


    【解决方案1】:

    我想第一个问题是你有没有引用 xsd 的 wsdl。如果是,那么您可以使用 scvutil.exe 并传递 wsdl 路径并确保 xsd 文件也与 wsdl 文件位于同一目录中。这将为您生成所需的数据类。

    HTH

    【讨论】:

    • 您能粘贴示例语法吗?
    • "C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\svcutil.exe" /t:code *.wsdl *.xsd /language:C#
    • 您可以通过将 ?wsdl 附加到服务 (svc) url 来获取 WSDL。一旦你得到它,你将它的副本保存在与你的 xsd 文件相同的位置。然后转到 Visual Studio 并添加服务引用并在服务 URL 中提供 WSDL 文件的路径。如果 WSDL 中的 xsd 匹配,那么您应该生成您的数据类。
    【解决方案2】:

    如果您想使用 XSD.exe 生成类,您将获得 XML 可序列化数据类型,这些数据类型标记有所有这些 Xml 属性,由XmlSerializer 控制其序列化。 Wcf 默认使用DataContractSerializer,它不使用那些用于描述序列化的属性。您必须在您的服务、运营或服务合同中使用XmlSerializerFormat 属性切换到XmlSerializer

    【讨论】:

    • @rauts ...我没明白你所说的 wsdl 是什么意思?我有在 IIS 上运行的服务。你可以复制 SVCutil.exe 的示例语法,它需要 xsd 文件以及服务 url
    • @Ladislav Mrnka.... 我尝试用 [ServiceContract, XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)] 包装接口,但它没有用,仍然抱怨一些xsd 文件中的类
    • @Ladislav mrnka ...我刚从一个使用 xml serilaizer 的客户那里得到了 xsd,如果我生成数据类并使用 XmlSerializer deserlizer = new XmlSerializer(typeof()); 它就可以工作。但仅在服务中不起作用
    • 但这不是服务的工作方式。调用服务 XSD 是不够的。您需要描述服务操作的 WSDL。 XSD 仅从 WSDL 引用。
    • @Ladislav mrnka 我有一个服务 wsdl 和服务合同操作一切。在其中一个操作中用作参数的数据类正在爆炸,因为数据类是由 XSD.exe 生成的,它没有数据合同和数据成员属性
    【解决方案3】:

    http://wscfblue.codeplex.com/开源生成器解决了问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      相关资源
      最近更新 更多