我需要创建一个应该接收xml并返回xml的.Net Web服务(WCF是不可能的)。我最初设置的功能如下:
[WebMethod]
public string myFunc(string xmlRequest)
{
如何将HTTP POST内容类型更改为text / xml?另外,我将xml响应作为字符串返回,但在Web服务帮助页面中,它表示响应将是:
HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <string xmlns="http://www.mysite.com/myFunc">string</string>
我需要以某种方式删除该根<string>
元素。
此Web服务由另一家公司调用,该公司可能没有使用.Net将XML作为text / xml发布到我的端点。
答案 0 :(得分:1)
我有一个开源Web服务框架(在.NET和Mono上运行),极大地简化了创建Web服务所需的工作量。它自动配置为为您的所有Web服务提供XML(+ REST),JSON(+ REST),SOAP 1.1 / 1.2端点:
可从以下网址获取:
还有一个实时的javascript和silverlight演示(在CentOS / Nginx上运行): http://www.servicestack.net/ServiceStack.Examples.Clients/Default.htm
此处提供了一个在线教程,介绍了创建和使用Web服务的过程(适用于MonoTouch但适用于所有地方):
答案 1 :(得分:1)
要删除String,您必须像这样制作返回参数xml:
public **System.Xml.XmlDocument** MyFunc(string xmlRequest)
这将使响应变为;
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
xml
答案 2 :(得分:0)
有效的XML文档必须包含根元素。除非string
元素存在,否则它不是XML。否则,它将是一个纯文本响应。
答案 3 :(得分:0)
坚持,您想要将数据发布为XML,但是将其作为XML字符串接收回来吗?如果我没有误解你在说什么,那肯定是你在做什么,而且说实话,这感觉很不对。
无法将字符串解析为Web服务中的XML文档,并且其他公司无法处理单个节点的XML文档的原因是什么?他们不能从该单个节点获取字符串值,然后自己解析字符串XML吗?
答案 4 :(得分:0)
<string>
元素显示原样,因为您的方法被定义为返回一个字符串。在幕后,.NET实际上只接受您的方法返回的任何对象,并将其序列化。序列化字符串表示为<string>actual string contents</string>
。
您要做的是以某种方式返回一个序列化到您想要的消息的对象,或者假设您的字符串实际上包含XML,将其直接写入响应流。
我从未真正尝试过[WebMethod],但可能的工作方式如下:
[WebMethod]
public void myFunc(string xmlRequest)
{
var myXml = @"<?xml version="1.0" encoding="utf-8"?><myRoot><myElement /></myRoot>";
Response.ContentType = "text/xml";
Response.Write(myXml);
Response.Flush();
Response.Close();
}
作为旁注,WCF实际上做了同样的事情。如果您定义WCF服务操作:
[OperationContract]
public string myFunc()
{
return "hi";
}
返回的XML(实际上进一步包含在SOAP中)是<string>hi</string>
就像您在这里使用经典Web服务一样。在WCF中“解包”XML有点痛苦。你必须做一个自定义的消息编写者,IIRC。