Top > ASP

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

#ls2

#contents

関連ページ:[[IIS]] [[VB6.0]]

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

#attachref(./IIS_debug.GIF)

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


**ASP ページをデバッグするための VBScript クラスまたは JScript オブジェクトを作成する方法 [#qfa1b257]
http://support.microsoft.com/kb/288965/ja
**ASPでOracleに接続するときの注意点 [#w5ad84ce]
ASP で、ORACLE との連携を行うときに、注意すべき点を挙げておきます。 
http://www.interq.or.jp/www-user/komurak/iis/oracle/

**soXXX(StaticObject)について [#a23e4882]
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) [#b7b1c7f5]
 <!-- #Include file="../common/SessionCheck.asp" -->
これをサーバサイドインクルードといいます。
これはIISの機能であり、HTMLの仕様ではありません(だからHTMLのコメントの中に含めている)。
Apacheにも同じSSIの機能があります。

SSIには
 <!-- #Include file="header.txt" -->
と
 <!-- #Include virtual="hoge/moge/header.txt" -->
という2種類の方法があり、違いはファイルのパスを絶対パスで指定するか相対パスで指定するかだけです(たぶん)。

&color(Red){注意:};
IISはアクセスされたASPをコンパイルしてキャッシュしておく機能があります。
要求されたASPのタイムスタンプと前回アクセスされた時間を比較し、前回からファイルが更新されていないならキャッシュを使います。
しかし、A.aspがB.aspをインクルードしているとして、
+A.aspにアクセス(→キャッシュされる)
+B.aspを変更
+A.aspにアクセス(→A.aspのタイムスタンプは変わっていないのでキャッシュが使われる。&color(Red){B.aspの変更は反映されない!};)

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


**Application.Lock [#ud70f6f7]
アプリケーション変数を更新するときは、排他のために必ず Application.Lock を行います。
しかし Application.Lock を呼んだだけではロックされず、次にアプリケーション変数にアクセスしたときにはじめてロックされるという少し奇妙な仕様なので注意。
#pre{{
> Application.Lock()
>  <排他したい処理(一意のID発行など)>
> Application.UnLock()

これだけだとロックかからなかったはずですね。
Lockの後にアプリケーション変数にアクセスしにいったときにはじめてロックされたはずです。
なので、ダミーのアプリケーション変数を一つつくって、そこに何か適当な値でもいれてみたらいいんじゃないでしょうか。
このあたりの動作はASPでも同じように動いていたと思います。 
}}
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=26090

#pre{{

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の作り方 [#i3981cb9]
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 コンポーネントで作成されるレジストリ エントリ [#k191ad59]
regsvr32 で DLL を登録したとき、レジストリのどこに DLL のパスが書き込まれるのか
疑問に思ったことはないでしょうか?

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

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

**CreateObject の速度 [#dc740d65]
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秒で生成できました。

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

**配列の正しい受けとり方 [#g4d6f81a]
1つのformの中に同じnameの要素が複数あると、それらの値が", "区切りで連結されて送られる。
これをASPで受け取るとき、Splitしてしまうとデータそのものの中に", "が入っているとき困ってしまう。
正しくは次のようにする。
#pre{{
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リンク集 [#k8b45ea0]
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リンク集 [#y4f07706]
COM総合研究所 - COM研究室
http://www5.plala.or.jp/atata/com/

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

    Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes