Создайте запрос SOAP вручную, не используя ссылку на сервис - PullRequest
0 голосов
/ 12 декабря 2018

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

Я действительно это сделал и по большей части этоработает как надо.Проблема, с которой я сталкиваюсь, более конкретно связана с тем, как все настраивается на конце сторон.

Процесс, который мне нужно пройти, по сути, таков: Вход в систему -> GetNumber

Прямо сейчас я могу успешно войти в систему, но как только я пытаюсь вызвать GetNumber , я получаю ответ обратно, говоря: «Контекст входа в систему равен NULL»,Это сообщение с их конца и результат немедленной потери памяти сеанса.

Сеансовый cookie-файл необходимо поддерживать для всех запросов, но сгенерированный прокси-сервер для их служб SOAP не имеет доступа кэто печенье.Причина, по которой нет доступа к этим файлам cookie, заключается в том, что они решили использовать транспорт SOAP для передачи части данных обратно вызывающей стороне.

Так что это ставит меня в сложную ситуацию.Я могу либо заставить их что-то изменить со своей стороны (возможно, но только в некоторой степени вероятно), либо просто не использовать сгенерированный код и создать запрос SOAP вручную.

Проблема в том, что мне труднонайти любую информацию о том, как на самом деле создать запрос вручную, потому что каждый раз, когда кто-нибудь спрашивает, как это сделать, совет, который он получает, это добавить ссылку на сервис и сделать это таким образом.

На данный момент у меня есть:

        var cookieContainer = new CookieContainer();
        var handler = new HttpClientHandler()
        {
            CookieContainer = cookieContainer
        };
        var client = new HttpClient(handler);

, который я надеюсь использовать для хранения cookie сеанса для следующего запроса.

Затем я начал пытаться создать заголовок запроса, например:

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("their end point");

        request.Method = "POST";
        request.Headers.Add("SOAPAction: \"\" ");
        request.ContentType = "text/xml; charset=utf-8";

но это не совсем правильно.В конечном счете, я хочу, чтобы этот запрос был примерно таким:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
                <login>
                        <userId>coolUserId</userId>
                        <password>coolPassword</password>
                </login>
    </soap:Body>
</soap:Envelope>

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

Если у кого-то есть понимание этого или ресурсы, которые могут быть полезны, я был бы очень признателен!

...