Метод WebRequest.GetResponse выходит без исключения - PullRequest
0 голосов
/ 28 октября 2011

Я получаю некоторые данные из Twitter, используя код ниже

        Dim FilterData = "follow=13,15"
        Dim Request As WebRequest = HttpWebRequest.Create("https://stream.twitter.com/1/statuses/filter.json")
        Request.ContentType = "application/x-www-form-urlencoded"
        Request.Method = "POST"
        Request.Credentials = New NetworkCredential("<Username>", "<Password>")
        Request.ContentLength = FilterData.Length

        Dim RequestStream = Request.GetRequestStream()
        Dim RequestWriter As New StreamWriter(RequestStream)
        RequestWriter.Write(FilterData)
        RequestWriter.Close()

        ' Get the response.
        Dim Response As WebResponse = Request.GetResponse()
        Console.Writeline("Reached")

Если я поставлю точку останова в строке Request.GetResponse(), все, прежде чем она будет работать нормально, однако следующая строка никогда не будет нажатаи ни один из обработчиков исключений.Я не вижу исключений первого шанса в окне вывода.

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

Может ли кто-нибудь указать на ошибку?

1 Ответ

3 голосов
/ 28 октября 2011

Вы пытаетесь получить доступ к потоковому API . API потоковой передачи не указывают заголовок ответа Content-Length. Они постоянно пишут в ответ. Таким образом, вы должны использовать асинхронный API для доступа к нему. Например, вы можете использовать WebClient:

class Program
{
    static void Main()
    {
        using (var client = new WebClient())
        {
            client.Credentials = new NetworkCredential("username", "password");
            client.OpenReadCompleted += (sender, e) =>
            {
                using (var reader = new StreamReader(e.Result))
                {
                    while (!reader.EndOfStream)
                    {
                        Console.WriteLine(reader.ReadLine());
                    }
                }
            };
            client.OpenReadAsync(new Uri("https://stream.twitter.com/1/statuses/filter.json?follow=12,13"));
        }
        Console.ReadLine();
    }
}

и эквивалент VB.NET:

Sub Main()
    Dim client = New WebClient()
    client.Credentials = New NetworkCredential("username", "password")
    AddHandler client.OpenReadCompleted, Sub(sender, e)
        Using reader = New StreamReader(e.Result)
            While Not reader.EndOfStream
                Console.WriteLine(reader.ReadLine())
            End While
        End Using
    End Sub
    client.OpenReadAsync(New Uri("https://stream.twitter.com/1/statuses/filter.json?follow=12,13"))
    Console.ReadLine()
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...