如何通过WCF DataContracts / MessageContracts发送XML文件?

时间:2009-07-01 10:36:28

标签: wcf

我想将xml文件发送到我的wcf服务,我该如何发送? 数据合同或消息合同有什么办法吗? 请帮忙。

3 个答案:

答案 0 :(得分:3)

您可以这样做:

var doc = new XmlDocument();
doc.LoadXml(xmlContent);
var message = Message.CreateMessage(MessageVersion.Soap11, "urn:someRequest", new XmlNodeReader(doc));

var factory = new ChannelFactory<IRequestChannel>("serviceHttpSoap11Endpoint");
var channel = factory.CreateChannel();

var response = channel.Request(message);

channel.Close();

因此,首先在XmlDocument对象中加载XML文件,然后调整上面的示例以发送它。

我刚才写了一篇帖子:http://www.pvle.be/2009/02/send-xmldocument-using-windows-communication-foundation/

答案 1 :(得分:2)

DataContract定义了通过网络传输的XML的C#表示。你不想看原始XML - 相信我.....: - )

基本上,你需要一个C#类,它是你的DataContract来描述你的XML的样子。在客户端和服务器上,您将使用C#类 - 而不是原始XML。如果您的DataContract与XML格式一致,您将能够将原始XML反序列化为DataContract类的类实例。

或者,您可以随时向DataContract添加一个字符串字段,并将原始XML打包并发送到其中。

您拥有的最后一个替代方法是使用WCF契约的基本无类型Message类型 - 在这种情况下,您需要在客户端和服务器端处理原始XML - 根本不是,但如果你真的想 - 这取决于你。

请参阅MSDN documentation on raw messages并查看Kurt Claeys的blog post

马克

答案 2 :(得分:2)

虽然最好遵循marc_s的建议并坚持使用高级数据合同,但有时需要发送任意XML。为此,您可以向OperationContract添加XmlElement参数。

为此,您必须使用XmlSerializer而不是Data Contract Serializer。您需要在服务合同上使用[XmlSerializerFormat]属性。