1

HttpResponse.BufferOutput = false を設定し、データを応答ストリームに書き込むカスタム ActionResult があります。アクションの結果が ASP.NET MVC のタスクベースの非同期アクション メソッドから得られる場合、応答ストリーム ブロックへの書き込みに気付きました。これは、web.config で Glimpse プラグインが有効になっている場合にのみ発生します。Glimpse は私にとって非常に便利です。少なくとも開発とテスト中は有効にしたいと思っています。コンテンツの長さが非常に大きくなる可能性があり、メモリにバッファリングしたくないため、BufferOutput プロパティは false のままにする必要があります。

これは、この正確な動作を再現できる最短のコードです。

public sealed class CustomResult : ActionResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        var resp = context.HttpContext.Response;
        resp.BufferOutput = false;
        resp.ContentType = "text/plain";
        resp.Output.Write(DateTime.UtcNow.ToString());
        resp.Flush();
    }
}

public sealed class DownloadController : Controller
{
    // the client nevers gets the response from this action
    public async Task<ActionResult> Async()
    {
        await Task.Yield();
        return new CustomResult();
    }

    // this works
    public ActionResult Sync()
    {
        return new CustomResult();
    }
}

これを最新の Glimpse.Mvc4 パッケージ (バージョン 1.3.2) でテストしました。

この問題の回避策はありますか、それとも Glimpse のバグなので報告する必要がありますか?

4

0 に答える 0