2010-02-11 123 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