AsyncHttpWebRequest (программа получения заголовка веб-страницы) - PullRequest
0 голосов
/ 23 декабря 2011

Я пытаюсь создать программу, которая будет получать заголовки страниц с указанием URL. Я написал код, который работает, когда я не использую AsyncCallback, но когда я использую AsyncCallback, кажется, что код не работает.

public void GetWebPageTitle(string URL)
{
    // make request for web page
    HttpWebRequest myWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
    myWebRequest.Method = "GET";
    myWebRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest), myWebRequest);
    zConsole.WriteLine("Beginning HttpWebRequest for: " + URL);
}

void FinishWebRequest(IAsyncResult result)
{
    zConsole.WriteLine("...");
    string title = "Unknown";

    //Code under here doesnt get extcuted

    HttpWebResponse myWebResponse = (HttpWebResponse)((HttpWebRequest)result.AsyncState).EndGetResponse(result);
    StreamReader myWebSource = new StreamReader(myWebResponse.GetResponseStream());
    string source = "";            
    source = myWebSource.ReadToEnd();
    myWebResponse.Close();
    title = Regex.Match(source, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value;
    zConsole.WriteLine(title);
}

Спасибо.

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Я думаю, проблема в том, что ваша программа заканчивается до того, как будет возвращен асинхронный результат.Основной поток после выполнения Console.Writeline умирает.

Остальное выглядит хорошо.BeginGetResponse на MSDN

0 голосов
/ 23 декабря 2011

Поместите блок try / catch вокруг кода внутри обратного вызова и посмотрите, не вызывает ли что-либо исключение.

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

...