「ASP」カテゴリーアーカイブ

Vista (IIS 7) へのファイルアップロード制限

Vista上でASP.NETをベースとしたウェブアプリケーションを作っていて、そのなかでクライアントからファイルをアップロードする処理がある。転送ファイルは30MBを超えるものがあって、Vista (IIS 7) では31MBくらいのファイルはクライアントから問題なくアップロードできるのに、32MBくらいから失敗する。ちなみに、XPでは同じコード、同じ転送ファイルなのにすんなりとアップロードは成功する。

いろいろと調べた結果、Vista (IIS 7) にはやはりアップロードできるファイルの制限がかけられていた。

と、その前に、ASP.NETではXPでもそうだけど、アップロードできるファイルサイズは4MBに制限されている。その制限を変更するには、Web.configに<configuration>
  <system.web>
    <httpRuntime maxRequestLength="102400" />
  </system.web>
</configuration>
を追加する。デフォルトでは 4096 (4MB) が設定されているはず。上の例では 100MB に変更している。

さて、Vistaではさらに制限があって、それを変更するには、%windir%\System32\inetsrv\config\applicationHost.configを編集する必要がある。が、Vistaではシステムファイルの編集にアクセス権が設定されていて、エディタで開こうとしても拒否されてしまう。そこで、エディタ(メモ帳でもいい)を管理者として実行して(右クリックして「管理者として実行」を選ぶ)、エディタからファイルを開けば編集できる。ここでは以下の設定を変更する。<configuration>
  <configSections>
    <sectionGroup name="system.webServer">
      <sectionGroup name="security">
        <section name="requestFiltering" overrideModeDefault="Deny" />
Deny → Allow にする。そして、Web.configに以下の設定を追加する。<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="100000000"/>
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

これでようやく32MBを超えるファイルもアップロードできるようになった。

VistaでASP.NET

Windows XPで動いているASP.NETアプリケーションをVistaに移す場合の注意点を二つ。これは仮想ディレクトリを使っているときに発生する。

一つ目は、web.configに <authentication mode="Windows" />があったら、とる。なぜかこれがエラーになる。

二つ目は、アプリケーションを仮想ディレクトリ以下に置いていて、App_Codeを作ってその仮想ディレクトリに置いている場合、XPではApp_Codeのクラスを参照することができても、Vistaではできなくなる。その場合は、App_Codeを %SystemDrive%\inetpub\wwwroot 以下に移動させれば参照できるようになる。

仮想ディレクトリではなく、IISマネージャで「アプリケーションの追加」を行って作ったサブディレクトリなら上記2点は問題なかった。XPとの親和性を考えると、「アプリケーションの追加」を行うほうが正解、っぽい。

Windows VistaでASP

aspおよびaspxで書かれたaspアプリケーションをWindows Vista上のIIS7で動かそうとしても、デフォルトではその機能がオフになっていて、すんなりと動かない。ここら辺はWindows 2000やXPとは大きく違っている。

[コントロールパネル]−[プログラムと機能]でIISを有効化するときに気をつけないといけないのは、IISのチェックボックスをチェックしただけではだめで、アプリケーション開発機能の下もちゃんとチェックしないといけないこと。これを知らずにaspを動かそうとしていろいろと設定をいじってしまった。

無事DBアクセスする部分以外は動いたけど、まだSQL Server 2005がインストールできていない。というよりもできるのか? Vistaはソフトウェアの互換性がありそうでないのが怖いところ。

ASPからWSHを起動する

ウェブページにWSHスクリプトを起動するスイッチを設けて、ウェブでWSHのOn/Offを行おうと思っていたんだけど、なかなかそのやり方がわからなかった。どこにもその方法が書いてなかったけど、試行錯誤で何とかできた。

ウェブページはtest.aspで、< %@ LANGUAGE="VBSCRIPT" %>
< % Dim WshShell Set WshShell = CreateObject("Wscript.Shell") WshShell.Run "cscript.exe c:\test.vbs", 0, True Response.Write("test complete!
" & vbcrlf)
Set WshShell = Nothing
%>
ただ test.vbs を起動して、「test complete!」と表示するだけ。

test.vbsは、Dim Fs,info
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
Const filename="C:\dummy.txt" 'ファイル名を決めます。

If Fs.FileExists(filename)=False Then
'FileExistsメソッド。引数が存在するファイル名ならTrue、存在しないとFalseを返す。
WScript.Echo filename & "というファイルは存在しません。"
WScript.Quit
End If

info="ファイル名=" & Fs.GetFileName(filename) & vbCrLf & _
"フルパス=" & Fs.GetAbsolutePathName(filename) & vbCrLf & _
"親フォルダ名=" & Fs.GetParentFolderName(filename) & vbCrLf & _
"ドライブ名=" & Fs.GetDriveName(filename) & vbCrLf & _
"拡張子=" & Fs.GetExtensionName(filename) & vbCrLf & _
"拡張子を除いた名前=" & Fs.GetBaseName(filename)

WScript.Echo info
と、dummy.txt の存在チェックを行う簡単なスクリプト。

ブラウザでtest.aspにアクセスすると、Microsoft VBScript 実行時エラー (0x800A0046)
書き込みできません。
と怒られてしまう。

そこで、c:\windows\system32にあるcscript.exeのIUSR_(マシン名)のアクセス権をフルコントロールにしてあげる。やり方は、cscript.exeを右クリックして、プロパティのセキュリティタブの「インターネット ゲスト アカウント」のアクセス許可で、フルコントロールの許可のボックスをチェックすればOK。あとはIISを再起動すれば無事aspからWSHが起動できるはず。