none
如何实现 wcf data service compress response RRS feed

  • 问题

  • 我整了好几天了,不见成效,第一次来此发帖求助.

    我的 wcf data service 用asp.net 4.0 mvc 承载,我现在试图把返回的xml压缩后回复客户端,

    第1次:

    实现CompressionModule : IHttpModule中HttpApplication.PreRequestHandlerExecute

    HttpApplication.Response.Filter = new GZipStream(app.Response.Filter, CompressionMode.Compress);

    aspx页面,wcf data service请求等数据都压缩回传,在本地vs2010上调试一切正常,但部署到vs2003+iis6就出错,貌似content-length字节长度计算不准

    第2次:

    我下载了GZipMessageEncoder,

    var webBE = (WebMessageEncodingBindingElement)newBinding.Elements[i];
    webBE.ContentTypeMapper = new XmlWebContentTypeMapper();
    newBinding.Elements[i] = new GZipEncoder.GZipMessageEncodingBindingElement(webBE);

    用这种方式,重新包装了WebHttpBinding,得到一个异常:

    [ServiceActivationException]: The service 'WcfDataService.svc' cannot be activated due to an exception during compilation.  The exception message is: The operation 'ProcessRequestForMessage' could not be loaded because it has a parameter or return type of type System.ServiceModel.Channels.Message or a type that has MessageContractAttribute and other parameters of different types. When using System.ServiceModel.Channels.Message or types with MessageContractAttribute, the method must not use any other types of parameters.

     

    如果我不用压缩回传,则一切正常。

    请问哪位大侠有没有成功压缩wcf data service的经验分享一下?

    如果能压缩请求数据和回传数据就更好了!

     

    --------------------------目前解决方案方案---------------------------

    启用IIS6动态压缩svc,可以压缩Get请求的Response数据,但不能压缩$batch请求返回的数据(multipart/mixed格式),大概是IIS无法计算数据长度的原因.

    这对于我来说不是最好方案:

    1.不能压缩Request数据

    2.不能压缩$batch请求数据

    3.需要IIS的配置权限

    网上据传iis7也一样无法压缩wcf data service数据,等待新版本加强压缩功能,如果有更多建议请给我回复。

    如果一样碰到此问题的朋友,不要再花心思尝试了,参考我的解决方案。

     

     

     

    • 已编辑 heguo 2011年1月17日 1:58 补充
    2011年1月14日 6:34

答案

  • 我认为不是wcf的问题  是IIS6的问题呢。

    请考虑用独立的进程作为 WCF Service的Host 


    入了ipad,最近用ipad上论坛
    • 已标记为答案 heguo 2011年1月30日 1:36
    2011年1月14日 8:46