Загрузка...

Извлечение вложения из ответа сервера SOAP

Тема в разделе C# создана пользователем vaganov_inactive4798753 15 дек 2021. 149 просмотров

  1. vaganov_inactive4798753
    vaganov_inactive4798753 Автор темы 15 дек 2021 0 15 дек 2021
    Приветствую, может кто-то поможет мне в решении вопроса.

    запрашиваю файл из сервиса вот таким образом

    Код:
    try
    {
    var service = "тут урл";
    var xmlData = $@"<soapenv:Envelope xmlns:soapenv=""схема"" xmlns:ws=""сервер/"">
    <soapenv:Header/>
    <soapenv:Body>
    <ws:getAttachment>
    <authInfo>
    <orgId>5400</orgId>
    <system>123</system>
    <user>**********</user>
    <password>**********</password>
    </authInfo>
    <request>
    <mailGWlogid>{fileId}</mailGWlogid>
    </request>
    </ws:getAttachment>
    </soapenv:Body>
    </soapenv:Envelope>";

    var httpWebRequest = (HttpWebRequest)WebRequest.Create(service);
    httpWebRequest.ContentType = $@"text/xml;charset=""utf-8""";
    httpWebRequest.Method = "POST";
    byte[] bytes = Encoding.ASCII.GetBytes(xmlData);
    httpWebRequest.ContentLength = bytes.Length;
    httpWebRequest.Timeout = 100000;

    using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
    {
    streamWriter.Write(xmlData);
    }

    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

    using (Stream str = httpResponse.GetResponseStream())
    {
    using (FileStream fs = File.Create($@"c:\Get_files1\b{FileName}.zip"))
    {
    const int bufferSize = 1024;
    byte[] buffer = new byte[bufferSize];

    int bytesRead = 0;
    do
    {
    bytesRead = str.Read(buffer, 0, bufferSize);

    fs.Write(buffer, 0, bytesRead);
    }
    while (bytesRead != 0);
    }
    }

    }
    catch (WebException ex)
    {
    HttpWebResponse httpResponse = (HttpWebResponse)ex.Response;
    if (ex.Response != null)
    {
    using (Stream stream = ex.Response.GetResponseStream())
    {
    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
    MessageBox.Show(reader.ReadToEnd());
    }
    }
    }

    Всё нормально скачивается, но сам файл внутри выглядит вот таким образом.

    Код:
    --uuid:1fbb3ebf-a00f-4b9a-948e-595ff01985ea
    Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
    Content-Transfer-Encoding: binary
    Content-ID: <root.message@cxf.apache.org>

    <soap:Envelope xmlns:soap=,kf ,kf ,kf"><soap:Body><ns2:getAttachmentResponse xmlns:ns2="сервер"><attachment><attachmentName>b0105003.011</attachmentName><checkSum>639172493</checkSum><attachmentData><xop:Include xmlns:xop="что-то там" href="cid:c0194020-39c4-4374-8e5a-ccf085ff7c84-95"/></attachmentData></attachment></ns2:getAttachmentResponse></soap:Body></soap:Envelope>
    --uuid:1fbb3ebf-a00f-4b9a-948e-595ff01985ea
    Content-Type: application/zip
    Content-Transfer-Encoding: binary
    Content-ID: <c0194020-39c4-4374-8e5a-ccf085ff7c84-95@ (c0194020-39c4-4374-8e5a-ccf085ff7c84-95/)>
    Content-Disposition: attachment;name="b0105003.011"

    тут зип -файл

    --uuid:1fbb3ebf-a00f-4b9a-948e-595ff01985ea
    Прикрепляются заголовки и soap информация

    можно как-то вытянуть конкретное вложение, которое внутри или хотя бы заголовки убрать? Может получать посылку надо как-то по другому ? Я себе уже голову сломал [IMG](((

    Использую .Net 4.8, winForms.
     
Загрузка...
Top