ranio Ответов: 1

Как избежать исключения ошибки. (500) для извлечения данных ответа из размещенной веб-службы в ASP.NET-что?


Я получаю исключение из удаленного сервера, возвращающего ошибку. (500) Внутренняя ошибка сервера при попытке извлечь данные ответа из размещенной веб-службы в asp.net с помощью c#. Размещенный веб - сервис также доступен.

API запроса находится в формате json, как показано ниже:
<string xmlns="http://tempuri.org/">
{"Req_UserId":"Samuel.Jacob","Req_Channel_ID":"IB","Req_Reference_No":"IB120219100103"}
</string>


Содержание API ответа выглядит следующим образом:

{
   "AuthenticateSSOResponse":
 {
       "Reference_No": "IB120219100103", 
       “Token_No":  "120219100103256"
   }
}


Что я уже пробовал:

Код как показано ниже:
public string CallWebService()
         {

            string URL = ConfigurationManager.AppSettings["NeST_WSI_API"] != null ? ConfigurationManager.AppSettings["NeST_WSI_API"].ToString() : string.Empty;



          JavaScriptSerializer oSerializer = new JavaScriptSerializer();
          string ReqJSON = BuildReqJson();
          System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();

          HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
          request.Method = "POST";
          request.Accept = @"application/json";
          request.ContentType = @"application/json";
          Byte[] byteArray = encoding.GetBytes(ReqJSON);
          request.ContentLength = byteArray.Length;



          using (Stream stm = request.GetRequestStream())
          {
              stm.Write(byteArray, 0, byteArray.Length);

          }



          using (StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream()))
          {

              //string jsonResponse = responseReader.ReadToEnd();
              string jsonResponse = "jsonResponse";

              if (jsonResponse != null)
              {


              }
          }

          return "";


      }
      #endregion

F-ES Sitecore

Прежде всего ... соответствует ли то, что вы посылаете, тому, что требуется? Для начала ваш код создает только json (этот json сам по себе может быть недействительным, вы не публиковали код для него), а не xml, который должен быть обернут вокруг него. Используйте что-нибудь вроде fiddler или wireshark, чтобы изучить запрос, который вы на самом деле делаете, чтобы увидеть, что находится в теле.

1 Ответов

Рейтинг:
0

Chris Copeland

Я подозреваю, что код состояния 500 будет указывать на проблему на стороне сервера, но не обязательно с самим приложением, а с полезной нагрузкой, которую оно получает. Некоторые службы REST (которые используют JSON или XML) десериализуют содержимое с помощью библиотек. Если данные, передаваемые в запрос, не совпадают с тем, что ожидается для этой конечной точки, служба REST может выдать 500, поскольку она не может правильно десериализовать полезную нагрузку.

Если вы абсолютно уверены, что полезная нагрузка верна, я бы рекомендовал посмотреть файлы журналов на стороне сервера, чтобы определить, что может вызвать проблему (обычно веб-службы будут регистрировать, если есть проблемы с десериализацией). Если у вас нет доступа к этому, то, возможно, поднимите билет с помощью службы поддержки REST?

Прежде чем вы сделаете что-либо из этого, пробовали ли вы запустить свой запрос через такой инструмент, как Почтальон[^] что позволяет вам сразу же просмотреть тела запроса + ответа? Возможно, 500 возвращается с дополнительной информацией в самом ответе.