涉及.NET XmlDocument类型的WCF DataContract/ServiceOperation

涉及.NET XmlDocument类型的WCF DataContract/ServiceOperation,.net,wcf,datacontract,datamember,.net,Wcf,Datacontract,Datamember,我只是想知道在WCF通信中要通过有线发送的数据合同。我知道,为了实现互操作性,不建议(甚至可能不允许?)将本机.NET类型作为数据契约的一部分发送 我希望有一个服务能够接受.NETXmlDocument类型作为ServiceOperation的输入。如果我要创建一个包装类(用DataContract属性标记),它保存XmlDocument类型(用DataMember属性标记),并将其用作服务操作的参数,这是否合法/可能 我如何确保互操作性,同时仍然具有XmlDocument类型的便利性?接受st

我只是想知道在WCF通信中要通过有线发送的数据合同。我知道,为了实现互操作性,不建议(甚至可能不允许?)将本机.NET类型作为数据契约的一部分发送

我希望有一个服务能够接受.NET
XmlDocument
类型作为
ServiceOperation
的输入。如果我要创建一个包装类(用
DataContract
属性标记),它保存
XmlDocument
类型(用
DataMember
属性标记),并将其用作
服务操作的参数,这是否合法/可能

我如何确保互操作性,同时仍然具有
XmlDocument
类型的便利性?接受
string
作为
servicecooperation
的参数,然后在服务端使用
XmlDocument.LoadXml(string)
方法实例化
XmlDocument
是否是更好的设计选择

为所有的帮助/意见/评论干杯,我刚刚开始接触wcf,所以我只想在我开始创建服务之前澄清我头脑中的任何困惑


谢谢

传递字符串对于互操作来说更好,但是如果你想传递CLR数据类型,你可以考虑用KnownType属性标记你的类。

通常,开发人员为了“互操作性”而编写代码,而他们根本没有理由/需要这样做

使用本机.NET类型完全可以。示例:为了序列化,您会将“点”分解为两个整数吗

但是,遗憾的是,System.Xml.Xml文档。。。不可序列化:)


但是你可以使用“XElement”。。。在第二种情况下,我要做的是在一个单独的dll中创建一个数据协定,并在两个应用程序上引用它(我猜您可以控制这两个服务)。因此,当您在服务B中为服务A创建代理类时,可以说您的数据协定来自数据协定dll的已知类型和点。顺便说一句,与2008年相比,默认情况下是这样的。如果您使用的是.NET3.0,则可能需要使用svcutil手动创建类

我希望这有帮助


干杯,瓦格纳。

您的XML文档有XSD吗?如果是这样,那么使用svcutil.exe(svcutil.exe/dconly schemaName.xsd)生成DataContract复合结构就相当容易了。此时,您可以选择使用在XML文档和可在服务接口和实现中使用的数据契约组合之间移动(如果您选择这样做的话)

此外,我同意之前的海报中关于兼容性的雅格尼评论

JB

您需要添加[XmlSerializerFormat]属性

因此(不使用Datacontract,尽管您也可以使用它):

[ServiceContract(Namespace=“urn:SerializationTest”)]

[XmlSerializerFormat]

公共接口IBlah

{

[经营合同]

XmlDocument Returnxmldoc()


}

直接抄袭了斯科特·梅森的作品。干得好。