中の技術日誌
 ホーム / 上へ

IISのWebDAVサービスでサイズの大きなファイル(48K)が413エラーになる

2005/02/21

[問題]

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

UploadReadAheadSize
http://www.microsoft.com/resources/documentation/WindowsServ/2003/standard/proddocs/ja-jp/Default.asp?url=/resources/documentation/WindowsServ/2003/standard/proddocs/ja-jp/ref_mb_uploadreadaheadsize.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

勉強会: 01/12 大阪#5, 02/03 東京#4 , 02/10 大阪#6 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告