Итак, я знаю, что стандартным советом при использовании сторонних веб-сервисов является добавление ссылки на службу и создание / использование сгенерированных прокси-классов.
Я действительно это сделал и по большей части этоработает как надо.Проблема, с которой я сталкиваюсь, более конкретно связана с тем, как все настраивается на конце сторон.
Процесс, который мне нужно пройти, по сути, таков: Вход в систему -> 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>
Оттуда я предполагаю, что получу обратно запрос, который смогу разобрать и продолжить свою жизнь.Это более или менее правильно?
Если у кого-то есть понимание этого или ресурсы, которые могут быть полезны, я был бы очень признателен!