0

検索データベースごとに約 50 のアプリケーション変数があります。querid特定の DB に接続する URL で渡された QueryString に応じて、Single Search.aspx ページからの合計 50 の検索データベース。

例:if Search.aspx?li=1次に接続する1SearchDB

if Searcg.aspx?li=2 then Connect to 2SearchDB.....

50SearchDB内の URLSearchDBに応じてそれぞれの合計訪問者数を維持しQueryString、ファイル内のアプリケーション変数を増やしGLOBAL.ASAXます。

Global.asax で:

void Application_Start(object sender, EventArgs e)  
    { 
        // Code that runs on application startup 
        Application["1"] = 0;           
        Application["2"] = 0; 
        . 
        . 
        Application["50"] = 0; 

    } 

Search.aspx.cs のページ読み込み:

int LocalBody = Convert.ToInt32(Request.QueryString["li"]); 
public void Page_Load(object sender, EventArgs e) 
    { 
    Label1.Text = GetHits(LocalBody).ToString(); 
    } 


     private int GetHits(int LocalBody) 
        { 
            int counter=0; 
            switch (LocalBody) 
            { 
                case 1: 
                    Application["1"] = (int)Application["1"] + 1; 
                    counter=(int)Application["1"]; 
                    break; 
                case 2: 
                     Application["2"] = (int)Application["2"] + 1; 
                    counter=(int)Application["2"]; 
                    break; 
                . 
                . 
                case 50: 
                    Application["50"] = (int)Application["50"] + 1; 
                    counter=(int)Application["50"]; 
                    break;            default: 
                    break; 
            } 
            return counter; 

        } 

ここで、これらのアプリケーション変数を QUEUE に追加し、1000 に到達するか、指定されたTIME INTERVAL20 分後に値を DB または Windows イベント ログに書き込む必要があります。

サービスを書くかどうか...!

4

1 に答える 1

0

WebApp がメモリ内にある限り、Application オブジェクトはメモリ内に残ります。一定時間リクエストがない場合、IIS は WebApp をシャットダウンできます。その場合、Application オブジェクトに格納されている値は失われます。IIS が Web アプリをシャットダウンしなくても、オブジェクトはサイトのメモリに存在すると仮定します。共有の場所 (データベースやメッセージ キューなど) に永続化するまで、外部サービスはこのオブジェクトにアクセスできません。

私の提案は、アプリケーション オブジェクトを使用しないことです。代わりに、インメモリ ストアに永続化します。値が更新されるたびにデータベースに保持したくない理由は、ディスクへの書き込みを避けるためだと思います。したがって、MSMQ や DotNetMQ などのメッセージ キュー、または Redis などのキー バリュー ストアを使用することをお勧めします。

データを共有の場所に永続化したら、サービスでその場所をポーリングし、1000 アイテムごとまたは 20 分ごとに保存できます。

于 2012-07-05T06:14:47.703 に答える