2

次のような .svc WCF Web サービスがあります。

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]
public XElement GetFunStuff(Stream raw) {

    // make an XElement document ...

    // Compress it.
    // !!!! If I do this, it takes 2 minutes.  If I do NOT, it takes under a second.
    {
        HttpContext.Current.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
        HttpContext.Current.Response.AppendHeader("Content-Encoding", "deflate");
    }

    return xml;
}

現在のテスト データを考えると、圧縮されていない XML 応答は 70k です。圧縮すると6kです。どちらの方法も、応答を返すという点で機能的に機能します (1 つが deflate とマークされている場合を除く)。私のテスト サーバーは他に使用されておらず、テスト中に CPU 使用率に明らかなスパイクはありません。

では、圧縮された応答の応答には約 122 ~ 128 秒かかるのに、圧縮されていない応答の応答には (より予想される) 秒または 2 秒かかるのはなぜでしょうか? ハングアップまたはタイムアウトの可能性があるのは何ですか?

[編集] Content-Length が圧縮されたサイズではなく、圧縮されていないサイズに設定されていることに気付きました。その後、何かが強制的に接続を閉じるかあきらめるまで、サーバーを待機させます。質問は、なぜ私の Content-Length が間違っているのですか? ...これは関連している可能性があります... gzipエンコーディングを使用すると、WCFサービスが正しくないContent-Lengthを返します

4

0 に答える 0