2010-02-11 88 views
1

我需要创建一个.Net Web服务(WCF是不可能的),它应该接收xml并返回xml。我最初设置功能如下:.Net Web服务内容类型

[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发布到我的端点。

回答

1

我有一个开放源码的Web服务框架(在.NET和Mono上运行),大大简化了创建Web服务所需的工作量。它的自动配置,以提供XML(+ REST),JSON(+ REST),SOAP 1.1/1.2端点为您的所有Web服务:

这可从以下

http://www.servicestack.net/

而且还有一个活javascript和Silverlight的演示可以在(在CentOS/Nginx的运行): http://www.servicestack.net/ServiceStack.Examples.Clients/Default.htm

而且可提供一个在线教程,可以引导(对于MonoTouch的,但放之四海而皆准)创建和使用Web服务的过程在这里:

http://www.servicestack.net/monotouch/remote-info/

0

有效的XML文档必须包含一个根元素。除非string元素在那里,否则它不是XML。否则,这将是一个纯文本回应。

0

挂起,你想要将你的数据发布为XML,但将其作为XML字符串接收回来吗?如果我没有误解你在说什么,那当然是你听起来像是在做什么,而且说实话,这感觉是错误的。

不能将字符串解析为Web服务中的XML文档,以及其他公司无法使用单个节点处理XML文档的原因是什么?他们不能从单个节点获取字符串值,然后自己解析字符串XML吗?

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。

1

要删除的字符串,你必须使返回参数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