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
Первый шаг-понять, в чем заключается ошибка.