最近在研究基于Ajax-Enabled WCF方式直接给前台提供服务,在返回数据优化方面遇到一些小麻烦,归纳如下:
问题1:因为想要WCF Service方法直接返回Stream流,但若直接返回流,会被浏览器识别为文件流,弹出下载提示;
问题2:如果采用Gzip压缩Json数据流,则需要修改返回的Response中的Content-Encoding属性,否则浏览器会把流识别为乱码。
解决办法:WebOperationContext类!
在WCF中无法从HttpContext.Current中获取到当前的请求的Request和Response对象,因此必须改用WebOperationContext(PS,此类也只能在ASP.NET兼容模式的WCF中获取到上下文,普通的WCF需要使用OperationContext)
以下代码分别解决问题1和问题2:
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-Encoding", "gzip");