xsd.exe - 类到模式 - 用于WCF

Nea*_*ers 6 c# wcf schema xsd

我已经创建了一个模式,作为我们公司和外部公司之间商定的接口.我现在正在创建一个WCF C#Web服务来处理该接口.

我运行了XSD实用程序,它创建了一个C#类.模式是在BizTalk中构建的,并引用其他模式,因此总共生成了超过15个类.

我将[DataContract}属性放在每个类的前面.我是否必须在每个属性上放置[DataMember]属性?
当我生成测试客户端程序时,代理没有任何这15个类的代码.

我们曾经在使用.asmx服务时使用这种技术,但不确定它是否与WCF一样.如果我们更改架构,我们会想要重新生成WCF类,然后我们每次都要使用所有[DataMember]属性重新调整它?是否有一个类似于XSD.exe的新工具可以更好地与WCF一起使用?

谢谢,

尼尔沃尔特斯

解决方案(埋在桑德斯之一回答/评论):

将XmlSerializerFormat添加到Interface定义:

    [OperationContract]
    [XmlSerializerFormat]     // ADD THIS LINE 
    Transaction SubmitTransaction(Transaction transactionIn);
Run Code Online (Sandbox Code Playgroud)

两个注意事项:1)在我这样做之后,我在我的代理(服务参考)测试客户端程序中看到了更多.xsds,但是我没有看到我的intellisense中的新类.2)出于某种原因,直到我的项目做了一个构建,我没有在智能感知的所有类(不知道为什么).

mar*_*c_s 5

Neal,除了John给你的所有选项外,你还应该查看Codeplex上的WCSF.blue工具:http://wscfblue.codeplex.com/

这是执行WCF的"契约优先"方法,它提供的众多选项之一是从XSD创建WCF DataContract文件:

替代文字http://i50.tinypic.com/rj1sw0.png

然后弹出一个对话框,您可以在其中设置一系列有关如何从XSD创建C#类文件的参数:

替代文字http://i46.tinypic.com/315h8yh.png

非常有用,即使您只想将它​​用于将XSD转换为用作WCF DataContracts的C#类:-)

另请参阅此博客文章,了解有关XSD DataContract生成过程的更多说明.


Joh*_*ers 4

使用的类[DataContract]将序列化为非常有限的模式。例如,没有属性,只有元素。这是有意为之,是为了性能和互操作性。

一般来说,您可能正在使用的那种模式可能要复杂得多。这样的模式不能与数据契约序列化器一起使用。您将需要使用 XML 序列化程序。

特别是,不要编辑 XSD.EXE 创建的类。事实上,您永远不应该编辑生成的代码,因为一旦再次生成代码,您的编辑就会被删除。这些类应该已经具有 WCF 使用它们所需的属性。

如果您按原样使用它们会发生什么?

  • 对需要 XML 序列化的每个 Web 服务操作使用 [XmlSerializerFormat]。XSD 实用程序已经为您完成了所有其他工作。 (2认同)