2012-12-11 78 views
1

只是想問當啓動Fiddler時,是否有人在嘗試將某個文件上載到服務器時遇到使用HttpWebRequest類(或者甚至是新的HttpClient)的問題。Fiddler使HttpWebRequest/HttpClient行爲出現意外

我所遇到的bug,即AllowWriteStreamBufferingHttpWebRequest的類的屬性不工作時,提琴手被推出,所以上傳進度是不工作的。即使將AllowWriteStreamBuffering設置爲true,字節也不會立即發送,而是緩衝,因此我無法跟蹤上傳進度。當提琴手沒有啓動時,它是可以工作的。

此外,如果我的應用程序正在上傳某個文件時關閉小提琴手,它也會崩潰,並拋出WebException,其中顯示「底層連接已關閉:接收上發生意外錯誤。

同樣的事情發生在新的.net 4.5 HttpClient類。

+2

提琴手充當您的服務器和客戶端之間的代理。所以,當你訪問你的服務器時,它會像代理服務器一樣擺弄小提琴手。如果您關閉提琴手,但連接將關閉,因此您的上一個問題。不確定AllowWriteStreamBuffering問題。我會想到fiddler不會將其轉發到服務器上,反之亦然。 – Liam

+0

是的,它似乎是真的 – Vlad

+0

我的猜測是AllowWriteStreamBuffering不是標準的HTTP。這可能是微軟唯一的實現,所以Fiddler顯然不會對它做任何事情。你可以在你看到的Fiddler的HTTP響應請求中看到它嗎?在HTTP頭中也許? – Liam

回答

3

對不起, Fiddler目前僅支持響應而不是請求的響應。

某些代理(如Fiddler)或其他中介會在將請求發送到服務器之前爲了性能或功能(如病毒掃描,斷點調試)原因而完全緩衝請求。

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

+0

所以這是正常的行爲?而.net clasess實際上認爲他們已經發送了字節到服務器,而這些字節實際上是由fiddler提供的。謝謝 – Vlad

+0

是的,這是預期的;據客戶所知,服務器獲得了字節。只是在這種情況下,「服務器」實際上是「代理」。 – EricLaw

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