2010-06-23 144 views
1

我正在處理遺留的Web服務,並且遇到了麻煩,試圖調整方法對以前定義的XML的響應。可悲的是,改變WSDL是沒有問題的,並且使問題進一步複雜化,它與WSDL.exe工具不兼容。 !Webservice返回自定義XML

的哦 - 所以通緝XML:

<soap:Envelope 
xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <Response xmlns="my/Namespace">Success</Response> 
    </soap:Body> 
</soap:Envelope> 

通過實驗 - 因爲我在.NET不流利 - 我已經達到下面的解決方案,這將工作,如果這兩種方法使用不同的XML標籤。不幸的是,當ResponseElementName被設置爲相同的值它「休息」,出現以下錯誤的Web服務:

The XML element 'Response' from namespace 'my/Namespace' references a method and a type. Change the method's message name using WebMethodAttribute or change the type's root element using the XmlRootAttribute.

因此,有另一種方式來實現XML必殺技不改變整個系統?

預先感謝您!

using System; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols; 
using System.Xml; 
using System.Xml.Serialization; 

[WebService(Name = "WSOcean", 
    Namespace = "my/Namespace" 
)] 
public class WSOcean : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [SoapDocumentMethod(
     Action = "Method1", 
     RequestNamespace = "my/Method1/Namespace", 
     ResponseElementName = "Response" 
    )] 
    [return: XmlText(DataType = "string")] 
    public string Method1(int MessageType) 
    { 
     return "Example message 1"; 
    } 

    [WebMethod] 
    [SoapDocumentMethod(
     Action = "Method2", 
     RequestNamespace = "my/Method2/Namespace", 
     ResponseElementName = "Response" 
    )] 
    [return: XmlText(DataType = "string")] 
    public string Method2(bool MessageStatus) 
    { 
     return "Random message 2"; 
    } 
} 

回答

0

首先,您應該使用WCF進行任何新的Web服務開發。

其次,嘗試返回XmlElement類型而不是字符串。嘗試建立你想要返回的XML,然後返回它。