IISのWebDAVサービスでサイズの大きなファイル(48K)が413エラーになる
[問題]
IISのWebDAVサービスを運用していますが、50KB近辺のファイルサイズを境にアッ
プロード制限がかかってしまいます。
IISログには
2005-02-15 08:12:00 192.168.0.11 HEAD /xxx/yyy.xls - 443 WEB\xxx 192.168.0.1 Microsoft+Data+Access+Internet+Publishing+Provider+DAV - 404 0 0 2005-02-15 08:12:00 192.168.0.11 PUT /xxx/yyy.xls - 443 - 192.168.0.1 Microsoft+Data+Access+Internet+Publishing+Provider+DAV - 413 0 0
という感じでHEADしてファイルが無い(404)のでPUTしようとしているが413で帰っているという感じです。
いろいろなサイズで試した結果が下記の表です。
o 31.6 KB (32455 バイト) o 40.7 KB (41710 バイト) o 47.9 KB (49076 バイト) o 47.9 KB (49109 バイト) o 47.9 KB (49112 バイト) o 48.0 KB (49152 バイト) x 48.0 KB (49153 バイト) x 48.0 KB (49157 バイト) x 48.0 KB (49181 バイト) x 48.0 KB (49196 バイト) x 48.0 KB (49213 バイト) x 48.0 KB (49214 バイト) x 48.0 KB (49232 バイト) x 48.2 KB (49453 バイト) x 51.9 KB (53168 バイト) x 52.4 KB (53699 バイト) x 91.5 KB (93696 バイト)
[原因]
IISがISAPIアプリケーション(この場合WebDAVサーバ)に渡す際に、リクエストの先頭の決められたバイト数を受け取りISAPIアプリケーションに繋ぎます。
ISAPIアプリケーションはそのデータを元に、後続のリクエストを受け取るのですが、WebDAVサーバはそのような機能が無いようで、IISが受け取るデータサイズに依存します。
依存するサイズがUploadReadAheadSizeという値です。
UploadReadAheadSize
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpiis/iishelp/iis/htm/asp/apro9l5x.asp
[解決策]
Windows 2000の場合
MetaEditを利用して、該当のバーチャルディレクトリや、ディレクトリ単位に受け取る最大バイト数を設定します。
MetaEditは以下のようなKBに解説が載っています。
[IIS]FILE: IIS MetaEdit 2.2
ユーティリティをダウンロード、インストール、およびアンインストールする方法
http://support.microsoft.com/kb/232068/ja
[IIS]メタベースを修正する Adsutil と MetaEdit ユーティリティ
http://support.microsoft.com/kb/240225/ja
[IIS]IIS メタベースの概要
http://support.microsoft.com/kb/240941/ja
Windows 2003の場合
Windows2003から、メタベースのXML出力がサポートされたおかげで、XMLを変更して反映するだけで動的に設定を変更できます。
手順は以下のとおり
メタベースの該当箇所だけXML出力 iiscnfg /export /f ex.xml /sp /LM/W3SVC/2139653273/Root/xxx 出力されたXMLの <configuration> - <MBProperty> - <IISWebVirtualDir> に UploadReadAheadSize属性を追加し適切な数字に変更する #この例では仮想ディレクトリだが、上記のUploadReadAheadSizeを設定できる箇所であればどこに設定しても良い。 メタベースに反映 iiscnfg /import /f ex.xml /sp /LM/W3SVC/2139653273/Root/xxx /dp /LM/W3SVC/2139653273/Root/xxx