C # SOAP ответ имеет неправильный формат - PullRequest
0 голосов
/ 23 мая 2018

Я искал в Интернете последние 2-3 дня и до сих пор не могу выяснить это - так что теперь я прихожу к вам, ребята, в надежде, что вы знаете решение.

Я пытаюсьсделать поддельный сервис SOAP для клиента и сделать сервис SOAP в visual studio.Ниже приведен код для действия SOAP, которое необходимо смоделировать.

[WebService(Namespace = "http://mynamespace.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class MyServiceStub1 : System.Web.Services.WebService, MyServiceBindingSoap
{        
    [WebMethod]
    [SoapDocumentMethod(Action = "http://mynamespace.com/MySoapAction", 
        ParameterStyle = SoapParameterStyle.Bare)]
    [return: System.Xml.Serialization.XmlElementAttribute("SomeWrapperXML")]
    public MyActualResponseType MyServiceRequest(
        [XmlElement(ElementName = "MyRequestName")] MyServiceRequestType myServiceRequest)
    {
        return new MyActualResponseType();
    }

И я получаю следующий ответ

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <SomeWrapperXML">
         <MyActualResponseType>
         </MyActualResponseType>
      </SomeWrapperXML>
   </soap:Body>
</soap:Envelope>

Однако мои клиенты ожидают, что ответ будет выглядеть следующим образом

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
     <MyActualResponseType>
     </MyActualResponseType>
   </soap:Body>
</soap:Envelope>

И так как я не могу изменить код на стороне клиента, я должен исправить это со своей стороны.Можно ли как-нибудь избежать использования в своем ответе тега XML «SomeWrapperXML»?

Установка XmlElementAttribute ("") не помогла, и ее полное отсутствие просто сделает его по умолчанию чем-то другим.Я также посмотрел на MSDN post для изменения сообщения SOAP, но это решение кажется немного хакерским.

1 Ответ

0 голосов
/ 23 мая 2018

Я закончил тем, что изменил тип возврата моего смоделированного сервиса на поле с исходным типом возврата.

В моем примере мне нужно было вернуть тип MyActualResponseType в соответствии с кодом, сгенерированным svcutil.Однако MyActualResponseType содержит только одно поле / получатель для типа MyActualResponse.Я изменил свой метод SOAP следующим образом:

[WebMethod]
[SoapDocumentMethod(Action = "http://mynamespace.com/MySoapAction", 
    ParameterStyle = SoapParameterStyle.Bare)]
[return: System.Xml.Serialization.XmlElementAttribute("MyActualResponseType")]
public MyActualResponse MyServiceRequest(
[XmlElement(ElementName = "MyRequestName")] MyServiceRequestType myServiceRequest)
{
    return new MyActualResponse();
}

Обратите внимание на [return:, который выглядит так, как будто он действительно возвращает тип MyActualResponseType.

Это решение все еще выглядит как хакерский, но, похоже, отлично работает для моих нужд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...