让IIS 7能够接收大数据HTTP流的处理
今天发现一个vendor没办法通过AS2给我们送EDI 832/846文件,去IIS log中查了下都是HTTP 404.13错误,看来是HTTP request数据超长了(vendor给的832/846基本都是60MB左右的),日志如下:
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2011-10-04 05:28:56 172.16.70.45 POST /EdiIntReceive/ - 8004 - 172.16.72.140 haboob/5.5.2.0.8+build-3181 404 13 0 62
以前配过IIS 6.0的,记得是改web.config就可以了,但IIS 7.0还没搞过,有点摸不着地方,试过web.config加<httpRuntime>节点但也没起作用。Google了一下终于找到了方法,而且很简单,找到虚拟目录属性中的Request Filtering选项,按照图中以下步骤,将maximum allowed content length设置大一点,比如到100 MB, 这样就能够接收大于默认值30000000 Bytes的http流了。
以上solution是针对接收端的,实际上作为AS2发送端的vendor也可以通过一点小的配置修改就能够来搞定问题,只需要将HTTP request改为chunked encoding,也就是分包来发送数据就可以了,比较以下两个HTTP header就能够说明问题
Non-chunked encoding
Connection: Keep-Alive
Content-Length: 58738800
Content-Type: APPLICATION/EDI-X12
…
chunked encoding
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: APPLICATION/EDI-X12
…
在Biztalk server中,可以在send port上这样设置来打开chunked encoding:
记下来,怕以后忘记了~