Arhn - архитектура программирования

NullReferenceException был необработанным HttpWebResponse

Я пытаюсь получить заголовки с предоставленного пользователем URL-адреса, и все работает нормально, пока я не попробую http://www.google.com, что дает мне следующее исключение:

System.NullReferenceException не было обработано Message=NotSupportedException StackTrace: в System.Net.Browser.OHWRAsyncResult.get_AsyncWaitHandle() в System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, состояние объекта) в System.Net.Browser.ClientHttpWebRequest.EndGetResponse( IAsyncResult asyncResult) в Network_Monitor.Checks.URLCheckResults.RespCallback(IAsyncResult asynchronousResult) в System.Net.Browser.ClientHttpWebRequest.‹>c__DisplayClassa.b__8(состояние объекта2) в System.Threading.ThreadPool.WorkItem.WaitCallback_Context(состояние объекта) в System. Threading.ExecutionContext.Run(ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadPool.WorkItem.doWork(Object o) в System.Threading.Timer.ring()

Стек вызовов:

System.Windows.dll!System.Net.Browser.AsyncHelper.BeginOnUI(System.Threading.SendOrPostCallback beginMethod, object state) + 0xc3 bytes 
System.Windows.dll!System.Net.Browser.ClientHttpWebRequest.EndGetResponse(System.IAsyncResult asyncResult) + 0x41 bytes 
Network Monitor.dll!Network_Monitor.Checks.URLCheckResults.RespCallback(System.IAsyncResult asynchronousResult) Line 55 + 0x3 bytes C#
System.Windows.dll!System.Net.Browser.ClientHttpWebRequest.InvokeGetResponseCallback.AnonymousMethod__8(object state2) + 0x1b bytes 
mscorlib.dll!System.Threading.ThreadPool.WorkItem.WaitCallback_Context(object state) + 0x18 bytes   
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x63 bytes    
mscorlib.dll!System.Threading.ThreadPool.WorkItem.doWork(object o) + 0x47 bytes 
mscorlib.dll!System.Threading.Timer.ring() + 0x70 bytes 

Я часами гуглил в поисках решения, но ни одно из существующих не работает. Почему это отображается для Google.com, но не для других веб-сайтов?

public void CheckURL(String URL)
{
    lblResults.Text = "Checking...";

    var wr = HttpWebRequest.Create(URL);
    wr.Method = "HEAD";

    IAsyncResult asyncResult = (IAsyncResult)wr.BeginGetResponse(RespCallback, wr);
}

private void RespCallback(IAsyncResult asynchronousResult)
{
    try
    {
        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
        using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult))
        {
            Dispatcher.BeginInvoke(() =>
                {
                    for (int i = 0; i < response.Headers.Count; ++i)
                    {
                        if (!lblResults.Text.Equals("Checking..."))
                        {
                            lblResults.Text += "\n";
                        }
                        else
                        {
                            lblResults.Text = "";
                        }

                        lblResults.Text += "Header Name:" + response.Headers.AllKeys[i] + ", Header value :" + response.Headers[response.Headers.AllKeys[i]];
                    }
                });
        }
    }
    catch (WebException ex)
    {
        if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
        {
            Dispatcher.BeginInvoke(() =>
            {
                lblResults.Text = "Page Not Found (404)";
            });
        }
        else
        {
            MessageBox.Show(ex.Message, "Program Name", MessageBoxButton.OK);
        }
    }
}

Исключение происходит в строке using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult)) со следующим снимком экрана (щелкните правой кнопкой мыши и выберите «Просмотреть изображение», чтобы увеличить его):

Изображение исключения


  • под заголовками вы имеете в виду фактическое содержимое тега ‹header› в html? если это так, переход на домашнюю страницу Google и поиск заголовка слова в исходном коде не дает никаких результатов, что может объяснить исключение NullReferenceException? 24.07.2012
  • Нет, заголовки HttpWebResponse (причина, по которой я использую HEAD) 24.07.2012
  • @LukeWyatt Я не знаю, что сказать. Создайте это как ответ, и я вознагражу вас +100 репутации. 15.08.2012
  • Вы можете урезать сумму вознаграждения. На самом деле это не стоило 100 наград за рабочий код. 15.08.2012
  • Это не позволит мне, но это нормально. 15.08.2012

Ответы:


1

Я. У меня он просто отлично работал на yahoo.com, google.com и msn.com. Единственная разница между моим и вашим кодом заключалась в том, что я запускал итерацию вне Dispatcher. Есть ли шанс, что Google икает, когда вы пытаетесь?

Габриэль: Я не знаю, что сказать. Создайте это как ответ, и я вознагражу вас +100 репутации.

14.08.2012
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..