【问题标题】:ASP.net continuous response streamASP.net 持续响应流
【发布时间】:2009-08-12 19:18:31
【问题描述】:

我想知道如何才能在不关闭它的情况下发出连续的响应流。为了更好地解释我的问题,请将 asp 页面视为代理,从不同来源(音频流或由另一个来源广播的视频流)中继第三方流

显然,Response.Write() 或 Response.BinaryWrite() 将我限制在预定义的来源。

提前致谢。

【问题讨论】:

    标签: c# asp.net stream response


    【解决方案1】:

    您可以使用当前HttpResponse 对象的BufferOuput 属性禁用响应缓冲。

    【讨论】:

    • 感谢您的反馈。还有一个实际以这种方式输出响应的问题,因为 Response 对象提供的方法只允许预定义的字节数组等。基本上我需要运行两个并发对象,一个是阅读器,另一个将从阅读器读取的内容写入输出。
    【解决方案2】:

    我可以想象禁用响应缓冲或定期使用 Response.Flush() 应该可以解决问题。

    通过设置 IHttpHandler,您只需确保您的 Process() 方法永远不会完成执行,因此您的请求也永远不会完成。

    【讨论】:

    • 关于您对预定义源的约束,您需要设置 1. 从流中读取 2. 保存到缓冲区 3. 写入缓冲区到响应 (BinaryWrite) 4. 刷新响应 5. 从步骤 1 重复
    • 谢谢。我刚刚写信给 Ken Browning,说需要运行两个并发对象,这对于网页来说似乎有点矫枉过正。另一方面,我想知道按照您提到的方式进行操作是否会丢失任何数据包(因为它是实时流),尽管这应该不是那么大的问题,尤其是如果我要这样做的话小块。
    • 使用返回 Stream 的 WebClient 和 OpenRead 方法,它将缓冲传入的实时流,直到您使用 Stream 上的 Read() 方法弹出数据。
    • 当然,您需要使用 OpenReadAsync 方法并订阅 OpenReadCompleted 事件,这将使您能够访问可以读取的底层流。
    • 谢谢你。玩起来应该很有趣。还没有机会使用异步操作,因为我不需要它们......直到现在。另外,我并不是要完整的解决方案,因为我真的很喜欢学习:)
    【解决方案3】:

    除了尝试 Response.Buffer=false 和诸如 Response.Flush() 之类的调用之外,请确保您在测试时没有使用代理服务器/Http 调试器。在我关闭 Fiddler 之前,我无法让它工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多