在流式传输时从Web请求中使用StreamReader流.NET?

我正在尝试使用Twitter流式传输API,我正在尝试为用户打开一个流,以便在事件发生时使用它们。 我正在使用一组标准的类来对twitter进行REST api调用。 在“GET”调用中使用https://userstream.twitter.com/2/user.json时 ,响应流永远不会结束…我正在打开StreamReader并按照我对任何其他REST调用的方式读取响应推特。 这对其他人来说可能是显而易见的,但我如何“消费”这个流…有没有办法在读取时读取StreamReader(意思是在它关闭之前)? 或者可能有一种不同的方法我可以用来使用这个流….再次,我道歉,如果这接缝是一些基本的,但我现在无法弄明白…提前感谢任何建议还是帮忙!!!

这是我开始对此进行故障排除的原始来源…这个方法是由我在LinkedIn上的论坛中找到的一组C#类编造的。 在读取“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进行测试,因为我只是希望看到它正常工作。 我在MSDN上看到StreamReader构造函数说明 New构造函数应该接受“leaveOpen”的布尔值,但是当我尝试将它添加到构造函数时,不允许这样的参数… 有没有人有一个很好的例子,说明怎么做这有强制和无限循环或只是比这更好的方法…我想简单地阅读每次从Twitter发送的新更新,并相应地解决它们? 显然有一种方法,我只是对消费这样一条流的概念不熟悉而不关闭..(**顺便说一下,多亏了Evil博士的建议,我在这个方向领先……这不是正是他所建议的,但这是什么引导我在这里)

提前注意:您看到的leaveOpen参数仅出现在.NET 4.5及更高版本中

至于如何处理Twitter流API:

以上链接将引导您使用.NET / C#开源库以及如何访问Twitter API( 包括流API和REST API)的文档。

使用StreamReader的缓冲区将接收到的字节提供给( Encoding.UTF8.GetString ),然后将它们附加到StringBuilder以接收流作为字符串。

使用StringBuilder ToString