【问题标题】:Fiddler makes HttpWebRequest/HttpClient behaviour unexpectedFiddler 使 HttpWebRequest/HttpClient 行为出乎意料
【发布时间】:2012-12-11 16:48:46
【问题描述】:

只是想问是否有人在 Fiddler 启动时尝试将某些文件上传到服务器时遇到使用 HttpWebRequest 类(甚至是新的 HttpClient)的问题。

我遇到了一个bug,即HttpWebRequest类的AllowWriteStreamBuffering属性在fiddler启动时不起作用,所以上传进度根本不起作用。即使我将 AllowWriteStreamBuffering 设置为 true,字节也不会立即发送而是缓冲,因此我无法跟踪上传进度。在 fiddler 没有启动的情况下可以正常工作。

此外,如果我在我的应用程序上传某些文件时关闭 fiddler,它也会崩溃并抛出 WebException,上面写着“底层连接已关闭:接收时发生意外错误。”

新的 .net 4.5 HttpClient 类也发生了同样的事情。

【问题讨论】:

  • Fiddler 充当服务器和客户端之间的代理。因此,当您访问您的服务器时,它会通过 fiddler 作为代理服务器。如果您在中途关闭提琴手,则连接将关闭,因此您的最后一个问题。不确定 AllowWriteStreamBuffering 问题。我想提琴手不会将其转发到服务器上,反之亦然。
  • 我的猜测是 AllowWriteStreamBuffering 不是标准 HTTP。它可能是 Microsoft 唯一的实现,所以 Fiddler 显然没有用它做任何事情。你能在 Fiddler 中看到的 HTTP 响应请求中看到它吗?可能在 HTTP 标头中?
  • 没有额外的标题,AllowWriteStreamBuffering 属性阻止缓冲,所以我可以例如通过立即写入请求流来发送字节,而不在 HttpWebBrowser 缓存中缓冲这些字节,但提琴手使此属性不起作用
  • 我花了很长时间尝试进行上传进度跟踪,但直到我关闭了 fiddler 才成功
  • 贴了一些我发现的点点滴滴,不是这方面的专家,但也许会有帮助?

标签: c# .net httpwebrequest fiddler


【解决方案1】:

很抱歉给您带来了困惑; Fiddler 目前仅支持 responses 流,不支持 requests

出于性能或功能(例如病毒扫描、断点调试)的原因,某些代理(如 Fiddler)或其他中介会在将请求发送到服务器之前完全缓冲请求。

http://www.fiddler2.com/fiddler/help/streaming.asp

【讨论】:

  • 所以这是正常行为? .net 类实际上认为他们已经向服务器发送了字节,而这些字节实际上是由提琴手缓冲的。谢谢
  • 是的,这是意料之中的;据客户端所知,服务器获得了字节。只是这种情况下的“服务器”实际上是“代理”。
【解决方案2】:

好的,这引起了我的兴趣,看来 AllowWriteSteamBuffering 工作服务器必须支持Chunked transfer encoding。这让我看到了这个关于代理和前面提到的分块编码的论坛帖子:https://groups.google.com/forum/?fromgroups=#!topic/httpfiddler/UkOiK96kg_k

从我在这里读到的内容看来,使用代理时,您可能会或可能不会获得分块编码等,因此是您的问题。

我还发现这似乎是一篇关于上传反馈的详细文章,可能会有所帮助?

http://blogs.msdn.com/b/delay/archive/2009/09/08/when-framework-designers-outsmart-themselves-how-to-perform-streaming-http-uploads-with-net.aspx

【讨论】:

    猜你喜欢
    • 2015-03-01
    • 2015-06-25
    • 1970-01-01
    • 2019-08-12
    • 2020-09-26
    • 1970-01-01
    • 2014-09-11
    • 2013-07-15
    • 1970-01-01
    相关资源
    最近更新 更多