Использовать поток StreamReader .NET из веб-запроса, как он потоков? - PullRequest
4 голосов
/ 12 ноября 2011

Я экспериментирую с потоковым API-интерфейсом Twitter и пытаюсь открыть поток для пользователя, который будет использовать события по мере их возникновения.Я использую стандартный набор классов для выполнения REST API-вызовов в Twitter.При использовании https://userstream.twitter.com/2/user.json в вызове «GET» поток ответов никогда не заканчивается ... Я открываю StreamReader и читаю ответ, как и при любом другом вызове REST в Twitter.Это, вероятно, очевидно для других, но как мне «потреблять» этот поток ... Есть ли способ прочитать StreamReader во время чтения (т.е. до его закрытия)?или, может быть, есть другой метод, которым я могу воспользоваться, чтобы использовать этот поток .... еще раз, я прошу прощения, если этот шов будет элементарным для некоторых, но я не могу понять это в настоящее время ... Заранее спасибо за любой советили помочь !!!

Вот исходный код, с которым я начал устранять неполадки, связанные с этим ... Этот метод был изготовлен из набора классов C #, которые я нашел на форуме в LinkedIn.В строке, которая гласит "responseData = responseReader.ReadToEnd ()", метод начинает "пить" поток ... но делает это как чашка без дна ... читает этот поток данных в реальном времени, прежде чем он закрывается (что являетсяпо существу, до тех пор, пока я не перестану отлаживать или не убью процесс) это вопрос, который я решаю.

Private Function WebResponseGet(ByVal webRequest As HttpWebRequest) As String
    Dim responseReader As StreamReader = Nothing
    Dim responseData As String = ""

    Try
        responseReader = New StreamReader(webRequest.GetResponse().GetResponseStream())
        responseData = responseReader.ReadToEnd()
    Catch
        Throw
    Finally
        webRequest.GetResponse().GetResponseStream().Close()
        responseReader.Close()
        responseReader = Nothing
    End Try

    Return responseData
End Function

ОБНОВЛЕНИЕ И СВЯЗАННЫЙ ВОПРОС:

Итак, я понял,следующий способ сохранить поток открытым и записать его в файл (это не будет последний подход, я просто тестирую, разработка наилучшего способа сделать это:)

Private Sub DrinkIt(ByVal webRequest As HttpWebRequest)

    Dim coder As Encoding = Encoding.UTF8

    Dim stream_reader As New StreamReader(webRequest.GetResponse().GetResponseStream(), coder, True, 1024)

    Do While 0 < 1

        Dim w As IO.StreamWriter

        w = File.AppendText(targetFile)

        Dim c(5) As Char

        stream_reader.Read(c, 0, c.Length)

        w.Write(c)

        w.Close()

        w.Dispose()

    Loop

    stream_reader.Close()

    stream_reader.DiscardBufferedData()

    stream_reader.Dispose()

End Sub

Этозаписывает открытый поток Twitter в файл, и каждый раз, когда я чирикаю, ретвитю, удаляю, отправляю сообщение ... и так далее ... Файл увеличивается с объектами JSON, добавленными к тексту.Я использовал Do While 0 <1 для тестирования здесь, потому что я просто хотел, чтобы он работал.</a> Я вижу в Описание конструктора MSDN StreamReader *1016*, что предполагается, что конструктор New принимает логическое значение для "leftOpen", но при попытке добавить это в конструктор такой аргумент не допускается ... у кого-нибудь есть хороший пример того, как сделать это с помощью принудительного и бесконечного цикла или просто с лучшим подходом, чем этот ... Я хотел бы просто прочитать новые обновления, отправляемые каждый раз из Твиттера, и обращаться к ним соответствующим образом?Кстати, я просто новичок в концепции потребления такого потока без его закрытия .. (** Кстати, благодаря предложению доктора Зла, я был в этом направлении ... Это не совсем то, что онпредложил, но вот что привело меня сюда)

Ответы [ 2 ]

2 голосов
/ 12 ноября 2011

Используйте буфер StreamReader для передачи полученных байтов (Encoding.UTF8.GetString), а затем добавьте их к StringBuilder, чтобы получить полученный поток в виде строки.

Использование ToString из StringBuilder

1 голос
/ 12 ноября 2011

Одно замечание: параметр leaveOpen, который вы видели, присутствует только в .NET 4.5 и более поздних версиях

Что касается работы с потоковым API Twitter:

Приведенные выше ссылки ведут к библиотекам с открытым исходным кодом и документации о том, как получить доступ кAPI Twitter ( и API потоковой передачи и API REST) ​​с .NET / C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...