次のような .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を返します