今天發現一個vendor沒辦法通過AS2給我們送EDI 832/846檔案,去IIS log中查了下都是HTTP 404.13錯誤,看來是HTTP request資料超長了(vendor給的832/846基本都是60MB左右的),日誌如下:
#Software: Microsoft Internet Information Services 7.5#Version: 1.0#Date: 2011-10-04 00:00:01
#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:
記下來,怕以後忘記了~