500 Ошибка при попытке доступа к сервисному уровню SAP через приложение C # - PullRequest
0 голосов
/ 01 ноября 2018

Я пишу приложение на C #, которое взаимодействует с сервисным уровнем SAP B1, и пытаюсь войти через HTTP POST-вызов, используя JSON для тела.

Если я отправляю запрос на вход в систему с помощью POSTMAN, он регистрирует меня в порядке, и я получаю сессионный cookie, как и ожидалось. Когда я отправляю через JSON через приложение C #, я получаю сообщение об ошибке 500 - я абсолютно не понимаю, почему. У меня есть другой метод, который отправляет запрос для определенного элемента, который возвращает 401 - Несанкционированный, поэтому я знаю, что он попадает на уровень обслуживания.

Ниже приведен код метода на данный момент.

var request = (HttpWebRequest)WebRequest.Create("https://172.16.101.38:50000/b1s/v1/Login");
            request.ContentType = "application/json";
            request.Method = "POST";
            request.ServerCertificateValidationCallback = AcceptAllCertifications;

            using (var streamWriter = new StreamWriter(request.GetRequestStream()))
            {
                string json = new JavaScriptSerializer().Serialize(new
                {
                    UserName = "user",
                    Password = "pass",
                    CompanyDB = "db"
                });

                streamWriter.Write(json);
            }

            var response = (HttpWebResponse)request.GetResponse();
            using (var streamReader = new StreamReader(response.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
            }

А метод «AcceptAllCertifications» выглядит следующим образом:

public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, 
        System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
    {
        return true;
    }

Если я не включу этот метод, я получаю сообщение об ошибке «Не удалось установить доверительные отношения для безопасного канала SSL / TLS ...». В POSTMAN я должен убедиться, что «Проверка SSL-сертификата» отключена, чтобы я мог получить доступ к Сервисному уровню.

Я знаю, что созданный JSON действителен, поскольку я проверял его в POSTMAN.

Кто-нибудь сталкивался с этим раньше и сумел выяснить, как это исправить?

1 Ответ

0 голосов
/ 06 ноября 2018

Вот ссылка на решение, которое мне пришлось реализовать:

SAP использует OData Services

Таким образом, вместо того, чтобы пытаться получить доступ ко всему через JSON, мне пришлось взять отсюда некоторый код, который создает экземпляр уровня службы и регистрируется с помощью метода, реализованного там.

Поначалу очень трудно начать работать, но как только он заработает, он довольно солидный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...