Мне нужно вызвать веб-службу в старой устаревшей системе, и я украл для этого код из старого приложения Silverlight (которое я не писал), предназначенного для таргетинга. NET 4. Я убедился, что код работает . Однако, когда я помещаю этот код в свое приложение targeting. NET Core 3.1, я получаю следующую ошибку при вызове ReadToEnd () в StreamReader:
System.IO.IOException: 'Ответ закончился преждевременно, с ожидается минимум 185 дополнительных байтов. '
Я создал два идентичных консольных приложения, одно для таргетинга. NET 4.7, другое для таргетинга. NET Core 3.1, и, конечно же, оно работало на 4.7, но не на Core 3.1. Я знаю, что кодовая страница 1252 не поддерживается в. net Core, и я поигрался с другими значениями, чтобы убедиться, что это не проблема.
Я нашел то, что я бы назвал хакерским обходным путем, вращая его побайтно и используя метод Peek () (ReadLine () тоже не работает), поэтому я знаю, что на самом деле получаю данные обратно, но надеюсь, что блестящие умы помогут мне понять 1) почему ReadToEnd () добавляется. NET Core и 2) есть ли лучший способ сделать это, имея в виду, что у меня нет контроля над веб-службой в устаревшей системе.
Заранее благодарим за вашу помощь !
WebRequest requestGetPODetails = WebRequest.Create(myURL);
requestGetPODetails.Method = "POST";
var postContentsBuffer = Encoding.GetEncoding(1252).GetBytes(someXML);
requestGetPODetails.ContentLength = postContentsBuffer.Length;
using (Stream sfdDataStream = requestGetPODetails.GetRequestStream())
sfdDataStream.Write(postContentsBuffer, 0, postContentsBuffer.Length);
// Retrieve the results
using (WebResponse responseGetPODetails = requestGetPODetails.GetResponse())
{
Encoding enc = Encoding.GetEncoding(1252);
using (StreamReader sfdDataStreamReader = new StreamReader(responseGetPODetails.GetResponseStream(), enc))
{
string stringResponse = sfdDataStreamReader.ReadToEnd(); // Error occurs here in .NET Core
}
}