|
出来るのだASP Q&A掲示板(過去LOG)
訪問数 52046
昨日 889
今日 776 【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。 |
Topに戻る
掲示板に戻る
検索
削除
管理者
|
![]()
Application.Lockついて
ASPmanさん
[2002/05/29 18:14:39]
[2115]
|
アプリケーション変数
北岳さん
[2002/05/30 7:18:42]
[2116]
Re:アプリケーション変数
北岳さん
[2002/05/30 10:48:58]
[2117]
Re:アプリケーション変数
ASPmanさん
[2002/05/30 18:49:38]
[2118]
|
| [2115] Application.Lockついて |
| 投稿者:ASPmanさん 2002/05/29 18:14:39 |
| はじめて質問させていただきます。 現在、ファイルの入出力処理を作ってファイルをロックしたいのですが、 ApplicationオブジェクトのLockメソッドについてなのですが、 これは、Application変数にデータを格納しなければ意味がないのでしょうか? たとえば、 --------------------------------------------- Application.Lock ファイルを開き、内容を書き込む処理を記述 (Application変数は使用してません。) Application.Unlock --------------------------------------------- この場合Application.LockやUnLockを記述しても、意味がないのでしょうか? 何冊か本を読んだのですが、いまいちApplicationのLockについて よくわからなかったので質問させていただきました。 どなたか、分かるかたいらっしゃいましたらよろしく ご教授のほどお願いします。 |
| [2116] アプリケーション変数 |
| 投稿者:北岳さん 2002/05/30 7:18:42 |
| 以下、「[2076] セッション変数 」の続編です。 ■Session変数はユーザごとに管理されますが、Application変数は全ユーザが共有的に使用します。 ---------- 1.asp --------- Session.contents("scnt")=Session.contents("scnt")+1 Application.contents("acnt")=Application.contents("acnt")+1 ------------------------- 甲、乙が1.aspを複数回実行する場合、 甲のSession.contents("scnt")は甲が1回実行するときのみ1つ増加し、乙の実行とは無関係。 甲はセッション変数の中身を0、1、2・・・と連続的に増加させます。 Application.contents("acnt")は、誰かが実行すれば1つ増加。 甲は、他のユーザが同時アクセスしているときは、アプリケーション変数の中身を101、103、108・・・と断続的にしか増加できません。 通常、甲が接続を中止して20分経過したら、甲が使っていたSession変数はすべて消滅します。 一方通常、Application変数はサーバが稼動中は継続します。 どちらも、Application(または Session).Contents.RemoveAllメソドなど使えば強制的に消滅させられます。 ■Application変数は複数ユーザ間の相互干渉を避けたいときに使います。 ---------- 2.asp ------- if Application.Contents("flag")=0 then Application.Contents("flag")=1 (ファイルやDBの書換処理) Application.Contents("flag")=0 end if ------------------------- 甲が 2.aspを実行してファイルを更新しているときに、乙が 2.aspを実行しようとしても、Application.Contents("flag")=1になっているので、乙はファイルを更新できません。 しかし乙のアクセス直前に、丙がたまたま別のASP、 ---------- 3.asp ------- Application.Contents("flag")=0 ------------------------- を実行すると、Application.Contents("flag")は 0 に戻ってしまい、直後に乙が 2.aspを実行すると、甲と干渉します。 (1.aspと3.aspを両方用意しておくような不注意なサーバは、珍しいとは思いますが。) ■Application.Lockは、他のユーザが Application変数を書き換えられないようロックします。 ロックした本人だけは、ロック中も書換え可能です。 ---------- 2.asp(改) ------- if Application.Contents("flag")=0 then Application.Lock Application.Contents("flag")=1 (ファイルやDBの書換処理) Application.Contents("flag")=0 Application.Unlock end if ------------------------- 甲が 2.asp(改)を実行中に丙が 3.asp にアクセスしても、Application.Contents("flag")=0 は実行されず、値は 1 のままです。 ■Application.Lock でロックされるのは、アプリケーション・オブジェクト(変数)のみです。 更新中のファイルやDBそのものを、ロックするのではありません。 |
| [2117] Re:アプリケーション変数 |
| 投稿者:北岳さん 2002/05/30 10:48:58 |
| [訂正] >(1.aspと3.aspを両方用意しておくような不注意なサーバは、珍しいとは思いますが。) 2.aspと3.aspを・・・ [疑問の1] ユーザがファイルをアップロードできるフォルダで、甲がApplication.lockをかけ、"xxx.txt" を開いたり閉じたりしながら編集しています。 このとき乙がたまたま同名のファイルを上書き可モードでアップロードしてきたら、甲が次に開いたとき中身が別ものに化けている可能性が。 全然ロックになっていないようですが、テキストファイルの排他制限って、できるのでしょうか。 [疑問の2] http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpiis/iishelp/iis/asp/vbob8zw4.htm の最下行に、 「Application オブジェクトを使用したサンプル .asp ファイルは、「ASPの例」の「ASP アプリケーションを作成する」にあります。」 とありますが、そこに行ってみたら、 「アプリケーション変数では、アプリケーションが実行される間の情報を格納する Application オブジェクトの使用方法を示します。 」 とあるだけで、サンプルが見当たりません。 |
| [2118] Re:アプリケーション変数 |
| 投稿者:ASPmanさん 2002/05/30 18:49:38 |
| 北岳様 詳細な回答ありがとうございました。 なんとなくでは、ありますが 分かってきたような気がします。 私もいろいろ調査しまして 報告したいと思います。 また、何かありましたらご教授のほど よろしくお願いいたします。 |
|
TreeBBS For ASP V.0.1.3 |