Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SOAP通过WCF将完整的XML文档发送回调用应用程序_C#_Xml_Wcf - Fatal编程技术网

C# 使用SOAP通过WCF将完整的XML文档发送回调用应用程序

C# 使用SOAP通过WCF将完整的XML文档发送回调用应用程序,c#,xml,wcf,C#,Xml,Wcf,我有一个WCF服务,用于根据多个不同的查询生成XML文件。最后,我只剩下一个完整的XML文件,我需要一种方法将其传递回调用我的服务中的方法的应用程序。如何使用WCF实现这一点 我已经尝试了很多方法,比如发回一个XmlElement并填充它,但是当我这样做的时候,我能做的最好的事情就是传回根元素和里面的内容,因为我丢失了我需要的标题 我试过这个: [OperationContract] XmlElement Foo(MyType myType, string user); 这使我得到了整个

我有一个WCF服务,用于根据多个不同的查询生成XML文件。最后,我只剩下一个完整的XML文件,我需要一种方法将其传递回调用我的服务中的方法的应用程序。如何使用WCF实现这一点

我已经尝试了很多方法,比如发回一个XmlElement并填充它,但是当我这样做的时候,我能做的最好的事情就是传回根元素和里面的内容,因为我丢失了我需要的标题

我试过这个:

 [OperationContract]
 XmlElement Foo(MyType myType, string user);

这使我得到了整个文件减去标题,但我需要标题。我想以XML格式将其作为一个对象发送回去

当我试图发回一个XML文档时,我遇到了很多错误。当我还试图将其作为字符串发送回时,由于它具有特殊字符并干扰SOAP响应,我会收到错误


有什么想法吗?

您可以使用以下命令以字符串格式获取它

return myDocument.DocumentType.ToString() + myDocument.DocumentElement;

现成的WCF基于http的绑定都使用soap包装消息负载,webHttpBinding除外,webHttpBinding支持RESTful风格的接口

或者,您可以查看如何使用WCF实现POX消息传递,可在以下位置找到:

更新

WCF中的REST支持具有完善的安全程序。比如说,


此外,我想说的是,您应该查看服务契约的组成,即端点上公开的操作的数量和类型。您面临的这个问题可能是将POX操作从SOAP操作分离到它们自己的服务端点的充分理由。

我曾尝试将其作为字符串返回,但在SOAP消息中发回时,它抛出了错误,我认为这是由于xml破坏了SOAP消息编码。我得到的通常输入字符串的格式不是正确的消息名称,而是一个。将mydocument.DocumentType.ToString()行放入后,我得到一个空引用异常。我有文档,但我假设没有与之关联的xml文档类型??我确实喜欢POX消息传递的想法,但是这会危及任何安全性或类似问题。我的服务用于许多其他操作,而不仅仅是这个需要发送XML的实例。事实上,只有两个函数使用XML作为返回类型,因此改变整个服务似乎有点过火,并可能因此失去一些功能。有些函数返回一个简单的整数,我不想对客户端代码进行大量更改来支持这种更改。您的看法是什么?我发现有一件事可以让我绕过这个问题,而不必对实际WCF服务的组成做太多更改,那就是包括System.Security,然后使用SecurityElement.Escape(myXmlString)将xml文档编码为一个字符串,该字符串可以通过标准soap响应发送。然后,可以在编码字符串的另一端将该字符串转换为XML文档。你对这种方法有何看法。我倾向于它,因为它需要对客户端和服务器端代码进行最小的更改。听起来它会工作的。我的观点仍然是,您的服务组合仍然可以使用一些重新工作,但是这取决于您必须修改这些端点的频率
return myDocument.DocumentType.ToString() + myDocument.DocumentElement;