我想将xml文件发送到我的wcf服务,我该如何发送? 数据合同或消息合同有什么办法吗? 请帮忙。
答案 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]属性。