@User99

Как реализовать принятие SOAP запроса из внешнего сервиса?

сторонний сервис должен отправить в мой сервис SOAP запрос следующего типа:
spoiler

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AsyncSendMessageRequest>
    <messageInfo>
        <messageId>9fc9337e-e1af-4b92-8e91-ffb3e80e2d34</messageId>
        <correlationId>3893298</correlationId>
        <serviceId>MN_E_REQUEST_FOR_IPORT</serviceId>
        <messageType>REQUEST</messageType>
        <messageDate>2023-06-21T16:56:00.109+06:00</messageDate>
        <sender>
            <senderId>login</senderId>
            <password>password</password>
        </sender>
    </messageInfo>
    <messageData>
        <data>
            <typedRequestFormImportData xsi:type="typedRequestFormImportData"
                                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <importSource>ESI</importSource>
                <updatedValues>
                    <code>oso</code>
                    <values>
                    <complexValue>
                        <code>form_edu</code>
                        <values>
                            <string>1</string>
                        </values>
                    </complexValue>
                    <complexValue>
                        <code>name_oso</code>
                        <values>
                            <string>***** </string>
                        </values>
                    </complexValue>
                    <complexValue>
                        <code>parallel</code>
                        <values>
                            <string>13</string>
                        </values>
                    </complexValue>
                    <complexValue>
                        <code>issue_date</code>
                        <values>
                            <date>2021-06-08T00:00:00+06:00</date>
                        </values>
                    </complexValue>
                    <complexValue>
                        <code>region</code>
                        <values>
                            <string>711410800</string>
                        </values>
                    </complexValue>
                    <complexValue>
                        <code>country</code>
                        <values>
                            <string>47</string>
                        </values>
                    </complexValue>
                    <complexValue>
                        <code>arrival_date</code>
                        <values>
                            <date>2021-06-09T00:00:00+06:00</date>
                        </values>
                    </complexValue>
                    <complexValue>
                        <code>language_edu</code>
                        <values>
                            <string>01</string>
                        </values>
                    </complexValue>
                    <complexValue>
                        <code>disposal_date</code>
                        <values>
                            <date>2021-06-09T00:00:00+06:00</date>
                        </values>
                    </complexValue>
                 
                </updatedValues>
                <externalRequestChainId>3893298</externalRequestChainId>
                <externalRequestId>836412</externalRequestId>
            </typedRequestFormImportData>
        </data>
    </messageData>
</AsyncSendMessageRequest>



Как можно реализовать на свой стороне принятие этого запроса посредством ASP.NET Core

Написал в контроллере:
spoiler

[AllowAnonymous]
        [Route("/nedenrol")]
        public async Task<IActionResult> SoapTest1([FromBody] XmlDocument soapEnvelope)
        {
            // Обработка SOAP-запроса
            // Прочитайте SOAP-запрос из тела HTTP-запроса
            var xmlDoc = soapEnvelope;
........
..........

            // Создание XML-ответа
            xmlDoc.LoadXml(@$"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>
<asyncSendMessageRequest>
<messageInfo>
<messageId>{Guid.NewGuid()}</messageId>
<correlationId>3893298</correlationId>
<serviceId>MN_E_REQUEST_FOR_IPORT</serviceId>
<messageType>NOTIFICATION</messageType>
<messageDate>{formattedDate}</messageDate>
 <sender>
            <senderId>login</senderId>
            <password>password</password>
        </sender>
    </messageInfo>
    <messageData>
  <data xmlns:ns2=""http://bip.bee.ru/AsyncChannel/v10/Types"">

 <typedRequestFormImportData>
                <importSource></importSource>
                <updatedValues>
                    <code>processing_status</code>
                    <values>
                        <domainItemData>
                            <code>IN_PROCESSING</code>
                            <ruValue>В обработке</ruValue>
                        </domainItemData>
                    </values>
                </updatedValues>
           
            </typedRequestFormImportData>
        </data>
    </messageData>
</asyncSendMessageRequest>
");

            // Отправьте SOAP-ответ
            var response = Content(xmlDoc.OuterXml, "text/xml");
            return response;
            return Ok();
        }



Правильно ли я делаю? Владелец второго сервиса который шлет мне запрос говорит что запросы не идут в мою сторону. Ошибка:
Problem writing SAAJ model to stream: Error writing request body to server


Подскажите правильно ли я принимаю SOAP? и вчем может быть дело?
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
[HttpPost("test")]
[Consumes("application/xml")]
public Task Test([FromBody] XElement xml)
{
      return Task.CompletedTask;
}

И в ConfigureServices
services.AddControllers()
             .AddXmlSerializerFormatters()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы