「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
#好みの問題だけど。