Top > ASP

.NETでないASP。いわゆるレガシーASPについて。

関連ページ:IIS VB6.0

ASPのデバッグ Edit

ローカルの IIS で ASP サイトを動かしている場合う、Visual InterDev または Microsoft Script Debugger で ASP のデバッグができます。
「Webサイトのプロパティ」→「構成」→「ASPのサーバー側のデバッグを有効にする」にチェックをつけます。
以後、ブラウザでエラーのあるASPにアクセスすると、「デバッグしますか?」というダイアログが出て、選択したデバッガでデバッグできるようになります。

IIS_debug.GIF

たまに原因不明でデバッグできないこともあるようです。
http://q.hatena.ne.jp/1144037030

ASP ページをデバッグするための VBScript クラスまたは JScript オブジェクトを作成する方法 Edit

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

ASPでOracleに接続するときの注意点 Edit

ASP で、ORACLE との連携を行うときに、注意すべき点を挙げておきます。
http://www.interq.or.jp/www-user/komurak/iis/oracle/

soXXX(StaticObject)について Edit

EXXX-XxxxのASPに出てくるsoXXXという名前の変数は、global.asaで次のようにして宣言しています。

<OBJECT RUNAT=Server SCOPE=Session ID=xxxxxx PROGID="xxx.yyy">
</OBJECT>

ASPでxxxxxxという変数名で最初にアクセスしたときにIISが自動的にクラスxxx.yyyを作成し、ASPに渡します。
SCOPE=Sessionと書いてあるので、そのオブジェクトはセッションが切断されるまで存続し、
それ以降ASPから要求があったときは、さっき作ったxxx.yyyのオブジェクトを渡します。

参考:
Application StaticObjects コレクション
http://www.microsoft.com/windows/windows2000/ja/advanced/iis/htm/asp/vbob5uem.htm
Application オブジェクト
http://www.microsoft.com/windows/windows2000/ja/advanced/iis/htm/asp/vbob8zw4.htm

サーバサイドインクルード(SSI) Edit

<!-- #Include file="../common/SessionCheck.asp" -->

これをサーバサイドインクルードといいます。
これはIISの機能であり、HTMLの仕様ではありません(だからHTMLのコメントの中に含めている)。
Apacheにも同じSSIの機能があります。

SSIには

<!-- #Include file="header.txt" -->

<!-- #Include virtual="hoge/moge/header.txt" -->

という2種類の方法があり、違いはファイルのパスを絶対パスで指定するか相対パスで指定するかだけです(たぶん)。

注意:
IISはアクセスされたASPをコンパイルしてキャッシュしておく機能があります。
要求されたASPのタイムスタンプと前回アクセスされた時間を比較し、前回からファイルが更新されていないならキャッシュを使います。
しかし、A.aspがB.aspをインクルードしているとして、

  1. A.aspにアクセス(→キャッシュされる)
  2. B.aspを変更
  3. A.aspにアクセス(→A.aspのタイムスタンプは変わっていないのでキャッシュが使われる。B.aspの変更は反映されない!

ということが起こるので注意です。
この場合はA.aspのタイムスタンプを更新する、それでもだめならIISを再起動してみましょう。

Application.Lock Edit

アプリケーション変数を更新するときは、排他のために必ず Application.Lock を行います。
しかし Application.Lock を呼んだだけではロックされず、次にアプリケーション変数にアクセスしたときにはじめてロックされるという少し奇妙な仕様なので注意。

> Application.Lock()
>  <排他したい処理(一意のID発行など)>
> Application.UnLock()

これだけだとロックかからなかったはずですね。
Lockの後にアプリケーション変数にアクセスしにいったときにはじめてロックされたはずです。
なので、ダミーのアプリケーション変数を一つつくって、そこに何か適当な値でもいれてみたらいいんじゃないでしょうか。
このあたりの動作はASPでも同じように動いていたと思います。 

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=26090

Application.Lock
ここ←
ファイル操作
Application.UnLock

上記「ここ」の所で、アプリケーション変数(ダミーでかまわない)に何か値を代入してやると、結果としてファイルに対しての排他制御ができます。

http://tryasp.winscom.co.jp/wbbs_qa.asp?TBL=W4_ASP_QA&CATE=&MODE=L_PARENT&NO=65590&CTL_DISP=GROUP&CTL_NO=65512

COM(ActiveX)DLLの作り方 Edit

ASP関連(VisualBasic6.0によるActiveX.DLLの利用)
http://www.asahi-net.or.jp/~ef2o-inue/asp/sub12_05.html

ASPからコールするCOMコンポーネント:.knowledge - frog.raindrop.jp
http://frog.raindrop.jp/knowledge/archives/000111.html

Visual Basic DLL プロジェクトのプロパティを構成し、IIS、MTS、または COM+ で実行する方法
http://support.microsoft.com/kb/281630/ja

ActiveX コンポーネントで作成されるレジストリ エントリ Edit

regsvr32 で DLL を登録したとき、レジストリのどこに DLL のパスが書き込まれるのか
疑問に思ったことはないでしょうか?

次の記事がその疑問に答えてくれます。

ActiveX コンポーネントで作成されるレジストリ エントリ
http://support.microsoft.com/kb/183771/ja

CreateObject の速度 Edit

CreateObject 自体はけっこう速いようです。

次の VBScript を time.vbs として保存して実行すると、

Pentium(R) 4 CPU 3.00GZHz
1.00 GB RAM

の環境で

100回
23秒
0.23 秒/回

という結果になりました。
しかし、CSystemInfo は Initialize の中で ini ファイル読み込みなどもしているので、
純粋に CreateObject だけの時間ではありません。

SysService.CSystemInfo でなく EventService.CSchedule などに変えると、
1回あたりほとんど0秒で生成できました。

Dim a
a = Now()

Dim Count
Count = 100

For i = 1 To Count 
	Set oSys = CreateObject("SysService.CSystemInfo")
	Set oSys = Nothing
Next

Dim b
b = Now()

Dim diff
diff = (b - a) * 24*60*60

MsgBox Count & " 回" & vbNewLine & _
       Round(diff, 6) & " 秒" & vbNewLine & _
	   Round(diff/Count, 6) & " 秒/回" 

asp.dll Edit

ASPの本体はC:\WINDOWS\system32\inetsrv\asp.dllです。
これはCOM DLLで、次のページに書かれているようにRequest、Server、Responseなどおなじみのクラスを持っています。
http://www5a.biglobe.ne.jp/~javajava/ari/00jscript/dll/kaiseki8.html

配列の正しい受けとり方 Edit

1つのformの中に同じnameの要素が複数あると、それらの値が", "区切りで連結されて送られる。
これをASPで受け取るとき、Splitしてしまうとデータそのものの中に", "が入っているとき困ってしまう。
正しくは次のようにする。

Response.Write "t1 の要素は " & Request.Form("t1").Count & "個<br>"
Response.Write "t1=[" & Request.Form("t1") & "]<br>"

For i = 1 To Request.Form("t1").Count
	Response.Write "t1(" & i & ")=[" & Request.Form("t1")(i) & "]<br>"
Next

ASPリンク集 Edit

ASP/VBScript講座
入門ページ。
http://www.site-cooler.com/kwl/asp/
ASP のパフォーマンスやスタイルを改善する 28 の方法
http://www.microsoft.com/japan/technet/prodtechnol/windows2000serv/technologies/iis/tips/asptips.mspx#EGE
ASPフレームワーク ぴいたん
レガシーASPでMVCを実現するための軽量フレームワークです。
http://peetan.cre8labs.com/
ASP FAQ
http://tryasp.winscom.co.jp/faq.asp]]

COMリンク集 Edit

COM総合研究所 - COM研究室
http://www5.plala.or.jp/atata/com/

COM の世界を斬る!
http://pc.2ch.net/tech/kako/981/981823340.html



URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

Attach file: fileIIS_debug.GIF 1482 download [Information] fileFlower-15.jpg 922 download [Information] fileIIS_debug.png.tgz 680 download [Information]

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes