Я имею дело с унаследованным веб-сервисом и сталкиваюсь с проблемами, пытаясь настроить ответы методов на ранее определенные XML-файлы. К сожалению, об изменении WSDL не может быть и речи, и, чтобы еще больше усложнить проблему, она несовместима с инструментом WSDL.exe.
О-о-так-разыскиваемый 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
установлено то же значение, он «ломает» веб-сервис со следующей ошибкой:
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";
}
}