Я тестирую приложение веб-сервиса, которое я написал на C# (Visual Studio 2015) на сервере Windows 2003. Приложение работает хорошо, но когда я запускаю строку кода:HttpWebRequest.GetResponse() throws untrappable error
WebResponse webResponse = request.GetResponse();
где запрос экземпляр HttpWebRequest, приложение выдает «ссылка на объект не указывает на экземпляр объекта.»
Прежде чем все скажут мне, чтобы я исследовал эту ошибку, у меня есть. Здесь нет смысла. HttpWebRequest, конечно, не является нулевым, я могу получить доступ к его свойствам, таким как URL и UserAgent, перед сбоем программы. Еще более странно, этот код завернут в файл try..catch, который ловушки как для веб-исключений, так и для общих исключений. Я понятия не имею, почему это не улавливает это.
Но причина этого в том, что если я попробую URL-адрес в Internet Explorer (версия 8.0 на этом старом сервере), я получаю сообщение об ошибке «Internet Explorer не может отображать веб-страницу». Я даже не могу войти на сайт, к которому я хочу получить доступ. Firefox отлично работает, но я не знаю, как заставить HttpWebRequest «быть» Firefox (UserAgent установлен на стандартную строку Mozilla ...).
Если слой веб-запроса на этом старом сервере просто не работает (например, версия .NET 3.5), это нормально. Но я хотел бы уловить ошибку. Почему мой try..catch не работает, и кто-нибудь знает, что сделает этот очень простой код (который работает повсюду), выбросит ошибку нулевого объекта?
Заранее благодарим за любое понимание, которое может предложить любой человек - очень благодарен!
ДОПОЛНИТЕЛЬНО: Вот весь try..catch:
try
{
HttpWebRequest request = GenerateWebRequest(pcMethodName, pcCommand, pcHTTPMethod);
MessageBox.Show(request.RequestUri.ToString());
WebResponse webResponse = request.GetResponse();
MessageBox.Show("The above line worked!");
StreamReader reader = new StreamReader(webResponse.GetResponseStream());
lcResult = reader.ReadToEnd();
}
catch (WebException wex)
{
lcResult = "ERROR (web exception): " + Environment.NewLine + new StreamReader(wex.Response.GetResponseStream()).ReadToEnd();
}
catch (Exception ex)
{
lcResult = "ERROR (general exception): " + Environment.NewLine + ex.Message;
}
В случае, если не окончательный улов ловушкой какие-либо общие исключения? Чтобы быть ясным, ошибка, которую я вижу, находится в режиме RUN-TIME - я не могу отлаживать этот компьютер, потому что на нем нет Visual Studio (и это не вариант). Итак, я понятия не имею, что думает этот процесс. Как я могу это узнать? Поэтому я знаю линию:
WebResponse webResponse = request.GetResponse();
проблема в том, что я ставлю MessageBoxes между каждой строкой, пока я не обнаружил, что линия взрывал. Помещает ли версия «отладки» exe в игру предлагать дополнительную информацию об отладке при сбое приложения? (ПРИМЕЧАНИЕ. Отладочная версия EXE не предлагает больше информации, и я не могу добавить NullReferenceException
, потому что компилятор говорит, что предыдущие «уловки» уже ловушки для этого ... пока это не так.).
Можете ли вы опубликовать свой try..catch? Если вы ловите «исключения в Интернете и общие исключения», вы ловите NullReferenceExceptions? Также, когда вы поймаете веб-представление, вы выкачали ответ, что сервер говорит вам? – garyamorris
Что такое VS, говорящий вам, что null? –
И общий улов за «Исключение» поймает NRE @garyamorris. Если я не понял ваш комментарий –