Member 10935450 Ответов: 1

C# try catch не работает на некоторых машинах


У меня есть уловка try вокруг некоторого кода, который получает ответ от веб-запроса. Ниже приведен код

var token = "";
try
  {
    var response = req.GetResponse();
    using (var sReader = new streamReader(response.GetResponseStream()))
    {  
       token = sReader.ReadToEnd();
     }
catch (webException we)
{
   token = "ERROR: " + we;
}
catch (Exception e)
{
   Token = "ERROR: " + e;
}



Эта линия -
var response = req.GetResponse();
это тот, который терпит неудачу. Тот факт, что он терпит неудачу, - это другая проблема, над которой я работаю с другой группой.

Проблема заключается в том, что оператор catch ловит ошибку только на 2 из 3 тестовых машин. Третий он не ловит, и я получаю необработанную ошибку исключения.

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

Где-то я читал, что проблема может быть несоответствием .Чистая версия, поэтому я убедился, что приложение нацелено на .NET 4.6, и на всех 3 машинах установлено 4.6 или выше.

Машина 1 - Windows 10, .NET 4.6.2 - работает блок catch
Машина 2 - сервер 2008, .NET 4.6 - работает блок catch
Машина 3 - Server 2008, .NET 4.6 - блок catch не работает.

На что еще я могу смотреть?

j snooze

Можете ли вы опубликовать трассировку стека?

Member 10935450

Есть ли там что-то, что я должен искать? - Спрашиваю я, потому что копирование и вставка затруднены с компьютера, где находится код, и я вручную набираю кодовый блок.

j snooze

Я просто хотел убедиться, что ошибки были похожи между ними. Если я принимаю ваш код за чистую монету, то интересно, что вы определили токен и использовали его в веб-исключении, но используете токен с большой буквы "Т" в обычном улове исключений. Это использование неопределенной переменной в общем исключении, но если вы набрали ее вручную, это может быть просто опечатка. Подумал, что, возможно, 2 разных трассировки стека (обычно верхняя ошибка) могут сказать что-то другое, что может привести вас к тому, что может отсутствовать или отличаться. Отсутствие ошибки не оставляет мне ничего, чтобы продолжать или размышлять.

Member 10935450

Это опечатка, извините, не могу понять, как отредактировать вопрос. На двух рабочих машинах работает блок catch, затем я беру ошибку, представленную в токене, и регистрирую ее, а затем обрабатываю отдельно, давая пользователю чистую страницу. В том, который терпит неудачу, я получаю сообщение об ошибке authentication failed, которое я ожидаю в веб-ответе и пытаюсь поймать в ловушку. Если это имеет значение, то это веб-сайт, и ошибка, когда она возникает, отображается на веб - странице. Он отображается на странице как необработанная ошибка исключения.

Valery Possoz

Возможно, выбрасывается исключение, не являющееся CLSCompliant, и Catch(исключение e) не поймает его.
Вам действительно нужен улов {balh blah;}, обратите внимание на отсутствие скобок...

Смотрите здесь: https://msdn.microsoft.com/en-us/library/bb264489.aspx

Member 10935450

Интересный вывод, я попробую это сделать и посмотрю, что получится.

PIEBALDconsult

Перекомпилировать. Передислоцировать.

ZurdoDev

Первый шаг-понять, в чем заключается ошибка.

1 Ответов

Рейтинг:
1

Graeme_Grant

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

У меня есть обработчики исключений для приложений, которые я использую. Примеры реализации WinForm и WPF можно найти в этой статье: Бесшумный установщик ClickOnce для Winform & WPF в C# & VB[^]