我正在从我的 REST Web 服务发送大数据(大约 600kb)作为响应。由于获得响应需要太多时间,我正在尝试压缩它。
在我的网站中,我有一个通用处理程序。对于这个处理程序,我从我的页面发出请求:
$.getJSON('Handler.ashx', data, function (fileBytesArray) {
// Process the data
})
.done(function () { console.log("second success"); })
.fail(function () { console.log("error"); })
.always(function () { console.log("complete"); });
处理程序接受请求并转发到 REST 服务。处理程序代码:
public void ProcessRequest(HttpContext context)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri("http://localhost/MyRestWebService/MyRestWebService.svc/DownloadFile"));
req.ContentType = "application/json; charset=utf-8";
req.Timeout = 60000;
using (WebResponse resp = req.GetResponse())
{
StreamReader reader = new StreamReader(resp.GetResponseStream());
string responceFromService = reader.ReadToEnd();
context.Response.ContentType = "application/json; charset=utf-8";
context.Response.Write(responceFromService);
}
在我的服务中(在DownloadFile()
方法中),我阅读了整个文件。然后使用NewtonSoft.Json
dll,我将其序列化,然后将其返回给处理程序。
网站和 REST 服务都在同一台服务器上。我修改applicationHost.config
了该服务器上的文件并进行了更改:
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
<dynamicTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="message/*" enabled="true"/>
<add mimeType="application/javascript" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
<add mimeType="application/x-javascript" enabled="true"/>
<add mimeType="application/json; charset=utf-8" enabled="true"/>
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true"/>
<add mimeType="message/*" enabled="true"/>
<add mimeType="application/javascript" enabled="true"/>
<add mimeType="*/*" enabled="false"/>
<add mimeType="application/x-javascript" enabled="true"/>
<add mimeType="application/json; charset=utf-8" enabled="true"/>
</staticTypes>
</httpCompression>
我注意到firebug
我没有Content Encoding
进入Response header
。有什么我错过的吗?