启用gzip/deflate压缩



我使用ServiceStack(版本3.9.44.0)作为一个Windows服务(所以我使用IIS),我使用它的能力既作为一个API和服务网页。

但是,当客户端支持压缩时,我还没有找到我应该如何准确地启用压缩。

我想象ServiceStack会透明地压缩数据,如果客户端的请求包括Accept-Encoding:gzip,deflate头,但我没有看到任何相应的Content-Encoding:gzip在返回的响应。

我有几个相关的问题:

  1. 在使用ServiceStack作为独立服务(没有IIS)的上下文中,如何在浏览器接受响应时启用压缩

  2. 在c#客户端上下文中,如何类似地确保客户端/服务器之间的通信被压缩

如果我遗漏了什么,欢迎任何帮助。

谢谢。

如果你想在整个API中启用压缩,另一个选择是这样做:

将此覆盖添加到AppHost:

public override IServiceRunner<TRequest> CreateServiceRunner<TRequest>(ActionContext actionContext)
{
    return new MyServiceRunner<TRequest>(this, actionContext);
}

然后像这样实现这个类:

public class MyServiceRunner<TRequest> : ServiceRunner<TRequest>
{
    public MyServiceRunner(IAppHost appHost, ActionContext actionContext) : base(appHost, actionContext)
    {
    }
    public override void OnBeforeExecute(IRequestContext requestContext, TRequest request)
    {
        base.OnBeforeExecute(requestContext, request);
    }
    public override object OnAfterExecute(IRequestContext requestContext, object response)
    {
        if ((response != null) && !(response is CompressedResult))
            response = requestContext.ToOptimizedResult(response);
        return base.OnAfterExecute(requestContext, response);
    }
    public override object HandleException(IRequestContext requestContext, TRequest request, Exception ex)
    {
        return base.HandleException(requestContext, request, ex);
    }
}

OnAfterExecute将被调用,并给你改变响应的机会。在这里,我压缩任何不是空的,还没有压缩(以防我在某处使用ToOptimizedResultUsingCache)。如果你需要,你可以更有选择性,但在我的情况下,我所有的POCO对象json.

引用

  • ServiceStack New Api

对于那些感兴趣的人,我自己的问题的部分答案,您可以使用扩展方法ToOptimizedResult(),或者,如果您正在使用缓存ToOptimizedResultUsingCache()

例如,返回压缩的结果:

public class ArticleService : Service
{
  public object Get(Articles request) {
    return base.RequestContext.ToOptimizedResult( 
       new List<Articles> { 
            new Article {Ref = "SILVER01", Description = "Silver watch"},
            new Article {Ref = "GOLD1547", Description = "Gold Bracelet"}
       });
  }
}
引用

    <
  • CachedServices.cs例子/gh>
  • CompressedResult.cs
  • Google Group question on Compression in ServiceStack

最新更新