「Request オブジェクト エラー 'ASP 0104 : 80004005' 操作は許可されません」って何者?

"ASP 0104 : 80004005"エラーは何だ?

CSVファイルをアップロードする業務系Webアプリケーションをリリースしたら、読込エラーになるファイルがあると障害報告が上がった。エラー内容は下記の通り。

Request オブジェクト エラー 'ASP 0104 : 80004005' 操作は許可されません

エラーメッセージでぐぐると下記のページに答えが書いてあった。

まめのりん.com | テクニカルノート - WWW:IIS - IISでアップロードファイルの上限サイズを変更する方法

WindowsServer2003+IIS6.0 の組合せの場合はデフォルトではファイルのアップロードは 200KB が上限となっており、上限を超えた場合、
Request オブジェクト エラー 'ASP 0104 : 80004005' 操作は許可されません 」
というエラーが発生してしまう。

とのこと。確かにエラーになったCSVファイルは400kBを超えていた。

後で判るが正確には、

この問題は、Content-Length ヘッダーが存在し、Content-Length ヘッダーに指定されているデータの量が IIS メタベースの AspMaxRequestEntityAllowed プロパティの値よりも大きい場合に発生します。

とのこと。ヘッダサイズが大きいのは問題にならないらしい。まぁ、誤差の範囲か。

解決するには:ASPMaxRequestEntityAllowedの変更が必要

先のページではMetaBase.xmlを書き換えるように書いてあるが、IISが動いている最中では書き換えが出来なかった。どうもIISがMetaBase.xmlをオープンしっぱなしらしい。Unixだとvi /etc/hogehoged.confしてkill -HUP `cat /var/run/hogehoged.pid`なのでサービス停止はほんの一瞬なのに。orz

正しいASPMaxRequestEntityAllowedの変更方法は?

改めて、ASPMaxRequestEntityAllowedでぐぐると、M$のサイトに正解の変更手順が書いてあった。

http://support.microsoft.com/kb/327659/ja

以下はWindowsXP(IIS5.1)でのオペレーション例。
#ちなみにXPではMetaBase.xmlでなくてMetaBase.binなのね。

C:\>cd /d c:\inetpub\adminscripts

C:\Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/ASPMaxRequestEntityAllowed 2048000
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

ASPMaxRequestEntityAllowed      : (INTEGER) 2048000

C:\Inetpub\AdminScripts>iisreset

停止しようとしています...
インターネット サービスの停止に成功しました
開始しようとしています...
インターネット サービスの再開に成功しました

C:\Inetpub\AdminScripts>

正しいオペレーションだとダウンしている時間はiisresetの実行時間のみで、多くて1分間を見てればよいだろう。でも、kill -HUP `cat /var/run/hogehoged.pid`のほうがダウン時間は短そうだなw

#好みの問題だけど。