1

[編集] ** 問題は、ポート 8888 経由で送信された HTML を傍受している私たちのマシンの何かにあるようです。ポート番号を変更すると問題が解決するようです。これを行う可能性のあるポート 8888 で何が実行されているかは、まだ謎です。**

HTML 応答を返す Owin ハンドラーに奇妙なバグがあります。私はこれだけにそれを取り除いた:

internal static Task WebUIHandler(IOwinRequest request, IOwinResponse response)
{
    response.ContentType = "text/html";
    var html = ... build an HTML string ...;
    response.Headers["Content-Encoding"] = "gzip";
    response.Write(GZip.CompressUTF8(html));
    return Task.FromResult(0);
}

GZip.CompressUTF8呼び出しは、文字列をバイト配列に圧縮するユーティリティ メソッドに対するものです(htmlそうです、これはストリームで実行できることは知っていますが、ここでのポイントではありません)。

このアプリを実行すると、表示されるページは圧縮されていないように見え (つまり、プレーンテキストで、gzip 圧縮されていません)、Content-Encodingヘッダーがありません (これは Fiddler4、Chrome、および Firefox で調べました)。

ただしreturnステートメントにブレークポイントを配置し、続行する前にアプリケーションを数秒間そのままにしておくと、応答gzip され、Content-Encodingヘッダー含まれます。ただし、ブレークポイントに数秒間設定した場合のみ: 続行が速すぎると、gzip が機能しなくなります。

ここで何が起こっているのか誰でも説明できますか? 私は当惑しています。

[編集: 要求に応じて、「パイプライン」全体:]

using Microsoft.Owin;
using Microsoft.Owin.Hosting;
using Owin;
...
static void Main(string[] args) {
    var startOptions = new StartOptions();
    startOptions.Urls.Add(...url...);
    using (WebApp.Start(startOptions, AppBuilderAction)) {
        ...
    }
}
...
static void AppBuilderAction(IAppBuilder app) {
    var router = new Router();
    router.Add("/", WebUIHandler); // See above.
    ...
    app.Run(router.OwinHandler);
}
...
[Router method]
public Task OwinHandler(IOwinContext context) {
    var request = context.Request;
    var response = context.Response;
    ... find a handler matching request.Path.Value ...
    return handler(request, response);
}

以上です。私が Owin のスキームを誤解していない限り、他に何も邪魔すべきではありません。

4

0 に答える 0