Я пытаюсь использовать частые веб-службы SAP в консольном приложении .net C# (.NET Framework 4.5).используют SAP Webservice в приложении .net - ошибка аутентификации 401
Веб-сервис sap был создан и активирован мной, повторяя эту статью ->http://scn.sap.com/docs/DOC-38805. Он просто передает «привет мир» при вызове службы.
Веб-служба использует базовый http auth с именем пользователя/паролем. Если я вызываю службу с помощью SoapUI и использую предварительную базовую аутентификацию, я получаю желаемый ответ. Первый пакет запросов, отправленный с клиента на сервер, включает в себя заголовок авторизации, и служба работает правильно.
Ссылаясь на этот документ ->http://scn.sap.com/docs/DOC-38805 Я создал консольное приложение .Net, добавил веб-ссылку и вставить следующий код:
sapref1.Z_HELLO_WORLD_TEST2 client = new sapref1.Z_HELLO_WORLD_TEST2();
sapref1.Z_ERSMA52_TESTSERVICE client_input = new sapref1.Z_ERSMA52_TESTSERVICE();
sapref1.Z_ERSMA52_TESTSERVICEResponse client_response = new sapref1.Z_ERSMA52_TESTSERVICEResponse();
client.PreAuthenticate = true;
client.Credentials = new NetworkCredential("user", "password");
client_response = client.Z_ERSMA52_TESTSERVICE(client_input);
При запуске приложения в первый раз, я получаю ответ от веб-сервис («привет мир»), но если я снова запустил приложение, я всегда получаю несанкционированное исключение. Я проанализировал сетевой трафик с помощью wirehark. Первый запрос, отправленный с клиента, не включает заголовок авторизации, и сервер отвечает кодом ошибки 401, который приводит к указанному исключению.
Я прочитал несколько статей об этой проблеме, но я не нашел решения, которое работает на меня. Есть ли способ использовать веб-службу SAP с прокси-классом, который создается через функцию «добавить веб-ссылку» в VS 2013? Спасибо заранее!
Я добавил утверждения try/catch вокруг кода, и теперь я получаю правильный ответ. Тем не менее в первом запросе отсутствует заголовок авторизации, который приводит к ошибке 401 с сервера. После этого клиент отправляет другое сообщение с данными с учетными данными. Есть ли способ избежать дополнительной поездки в оба конца и отправить учетные данные в первый запрос? btw это работает только в приложении .NET Framework 2 .... – Snyvel