1

だから私は、次のようなコードでローカルファイルをキャッシュしているアプリケーションを持っています:

Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)
{
    if (oS.url.StartsWith("foo.com/"))
    {
        oS.utilCreateResponseAndBypassServer();
        oS.oFlags["x-replywithfile"] = Path.GetFullPath(oS.url.Replace("foo.com/", "serve/"));
    }
}

これは、2GB 未満のファイルであれば問題なく機能します。2GB を超えると、次のエラーが表示されます。

Fiddler - The requested file could not be read. The file is too long. This operation is currently limited to supporting files less than 2 gigabytes in size.   

File.ReadAllBytes内部的には、intの最大サイズのために2GBに制限されているようなものをFiddlerが使用していると想定しています。私が知る限り、FiddlerCoreを開いてこれを変更するためのソースコードはありません...誰もこの制限を回避する方法を知っていますか?

4

1 に答える 1

1

クールなシナリオ。

残念ながら、.NET Framework は本質的にすべてのオブジェクトを 2 GB のサイズに制限しているため、以前のバージョンの AutoResponder は 2 GB を超える応答を返すことができませんでした。更新: Fiddler バージョン 2.4.9.4 以降では、巨大なファイルが自動的に検出されます。X-ReplyWithFile262 メガバイト (fiddler.memory.DropIfOver優先) を超える本文は、クライアントからストリーミングされ、メモリには格納されません。

FiddlerをHTTP/307使用して、リダイレクトを別の Web サーバーに戻し、そこで巨大なファイルをホストすることができます。

イベント ハンドラーは、メソッドを使用して (x-replywithfile 機能を使用せずに) ファイルのバイトをチャンクでクライアントに直接ストリーミングすることもできますがoSession.oRequest.pipeClient.Send、これにはかなりの量のコードが必要になります。

于 2013-11-15T23:03:55.757 に答える