Webservice返回自定义XML

时间:2010-06-23 20:35:32

标签: c# web-services asmx

我正在处理遗留的Web服务,我在尝试调整方法对先前定义的XML的响应时遇到了麻烦。遗憾的是,更改WSDL是不可能的,并且进一步使问题复杂化,它与WSDL.exe工具不兼容。

哦!-so-wanted 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";
    }
}

1 个答案:

答案 0 :(得分:0)

首先,您应该使用WCF进行任何新的Web服务开发。

其次,尝试返回XmlElement类型而不是字符串。尝试构建您想要返回的XML,然后返回它。