2009-08-06 9 views
5

一時的なイメージを動的に保存し、Webサーバーのファイルシステムでクリーンアップを処理するというテーマについて説明します(.NET 3.5のC#を使用)。global.asaxの使用方法と適用範囲(アプリケーション終了後のファイルクリーンアップ用)

これを処理するには、global.asaxファイルを使用することをお勧めしました。

私はこのことがどのように機能するのか分かりません。

私は2つの別々のアプリケーションを持っている...

私は、Global.asaxのは、ウェブサイトのルートディレクトリにすることになっていることを考え出しました。

質問:

1)は、どのように私はglobal.asaxのみこれらの2つの特定のアプリケーションのために発射する取得します。

2)両方のアプリケーションで文字列のリスト(ファイルの場所)を作成し、アプリケーションの終了時に削除する必要があります。この配列をアプリで、またはglobal.asaxでインスタンス化しますか?

私のコードは次のようになります。

List<string> fileLocations = new List<string>(); 
//I don't know where to put this. 

//The next line of code will be in both applications (this could 
//be called many times in one application session. The names of 
//the files are generated from the clock (milliseconds and 
//seconds combined, I might change this to use the actual 
//random class combined with sessionID) 
fileLocations.Add(file); 

void Application_End(object sender, EventArgs e) 
{ 
    // Code that runs on application shutdown 
    foreach(string file in fileLocations) 
    { 
     if(File.Exists(file)) 
      File.Delete(file); 
    }  
} 

私は、Global.asaxのは、実際にどのように機能するかについて混乱しています。それはインターフェイスのように使用されますか?

答えて

3

Global.asaxの使い方を調べるには、ASP.NET Quickstart on it's usageを読んでください。 Webアプリケーション/サイトごとに1つあります。グローバルレベルのイベントのようなものです。

ほとんどのサーバーでApplication_Endイベントが頻繁に発生することはありません。 IISアプリケーションプールがアンロード/リサイクルされた場合、web.configが変更された場合、/ Binでアセンブリが変更された場合、またはWebサーバーが停止するその他の状況の場合にのみ発生します。人気のあるサイトでは、イベントが発生する数週間前、数ヶ月前になることがあります。

+0

誰かがアプリケーションを使用してクリーンアップスクリプトを実行したときに検出する簡単な方法はありませんか?私はこれよりもはるかに簡単になるはずです:/ – Dave

+0

ユーザーがログインしている場合は、Global.asaxでもSession_Endイベントを使用できます。デフォルトでは20分ですが、独自の制限を設定できます。 http://stackoverflow.com/questions/621744/how-to-handle-session-end-in-global-asaxおよびhttp://justgeeks.blogspot.com/2008/07/aspnet-session-timeouts.htmlを参照してください。 –

+0

ああ、大丈夫です。 それで、global.asaxファイルでListを宣言すると、すべてのユーザーのセッションごとに新しいリストをインスタンス化するか、プログラム内でリストを宣言して何らかの形でglobal.asaxにアクセスできるようになります。 私が言ったように、私は基本的な質問をお詫び申し上げます...私は自分自身でこのようなことを考え出すのはかなり良いですが、なんらかの理由でglobal.asaxは私には直感的ではありません。 – Dave

2

MSDN LinkおよびWikipedia Linkは開始する場所です。

これはインターフェイスのようには使用されません。アプリケーションオブジェクトやセッションやリクエストの開始など、さまざまなフックを持つフィルタによく似ています。 Wikipediaのリンクには、Global.asaxが行うことができる呼び出しのリストがありますが、Webアプリケーションがデスクトップアプリケーションと比較してどのように終了するかを理解するために少し前から踏み出しておくことをお勧めします。 IISはアプリケーションを終了する方法の1つとしてAppPoolをリサイクルすることができます。そのため、アプリケーション終了時にクリーンアップを設定することは、そのイベントが発生しない場合には最適ではない可能性があります。

+0

私はこれらの両方を読んでいますが、これらは私をより混乱させてしまいます。 これらは、global.asaxがANYセッションまたはANYアプリケーションからアクセスできるストア変数であることを示唆しているようです。これは便利ですが、私が今やっていることではありません。私は、global.asaxが個々のアプリケーションの起動と個々のアプリケーションの終了を処理するスレッドを作成できるという印象を受けました。 – Dave

+0

ASP.NetのSessionオブジェクトとApplicationオブジェクトの使用に関する誤解があると思います。接続されている各ユーザーのセッションが存在するため、ユーザーAに変数がSessionオブジェクトに格納されている場合、ユーザーA以外のユーザーはアクセスできません。対照的に、Applicationオブジェクトは本当にグローバルです。サーバーが稼動しているので、ユーザーAの情報をApplicationオブジェクトに保管したい場合と同じように使用する必要があります。そのユーザーに固有のものにするために、キーをマーキングする何らかの方法を使用する必要があります。 ASP内のどこにでもスレッドを作成できます。Net –

関連する問題