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。两种方式在功能上都有效,因为它们返回响应(除了一种标记为放气)。我的测试服务器没有被其他任何东西使用,并且在测试期间,CPU 使用率没有明显的峰值。

那么,压缩响应的响应时间在 ~122 到 ~128 秒之间,但未压缩的响应需要(更预期的)一两秒,这是怎么回事?它可能会挂断或超时?

[编辑] 我刚刚注意到我的 Content-Length 被设置(通过什么,我不确定)为未压缩的大小,而不是压缩的大小。然后让服务器等待,直到某些东西强行关闭连接或放弃。所以问题就变成了,为什么我的 Content-Length 是错误的?...这可能是相关的... WCF 服务在使用 gzip 编码时返回不正确的 Content-Length

4

0 回答 0