2010-04-27 54 views
0

我有一個使用該文件的asp.net應用程序(類似於手工製作的數據庫)。它以非共享模式打開文件。這就是爲什麼只有一個站點的實例可以使用它。多個asp.net應用程序實例的問題

但是當我(通過app_offline.htm招)

更新服務器上的網站的問題開始有時舊的應用程序已經停止之前的AppDomain更新實例啓動。 我有兩個AppDomain實例在同一時間工作。

有沒有任何標準的方法來防止它?

PS:我知道應用程序池中的「Overlapped recycle」設置,但這是另一回事。它適用於多個應用程序池同時工作,但我擁有單個應用程序池以及同一應用程序的多個實例。

+0

我不知道標準的方式,但我認爲這裏的大非標準的是單一訪問'手工製作的數據庫'... – Paddy 2010-04-27 15:55:39

+0

使用什麼樣的存儲並不重要,問題在於非共享訪問。 應用程序池中的「重疊回收」設置也是爲這些原因而設計的。 – murad 2010-04-28 08:35:00

回答

0

This article完全解釋這種情況。

解決我的問題,我需要使用

HostingEnvironment.RegisterObject()

0

我發現下面的解決方案

internal class AppInstanceSyncronizer 
    { 
    bool m_HasHandle; 
    EventWaitHandle m_Event; 

    const int START_TIMEOUT_MILLISECONDS = 60 * 1000; 

    const string GLOBAL_EVENT_NAME="{D22555A0-BF47-41fd-AFC9-D83B4EADF75C}"; 

    internal bool OnAppStart() 
     { 
     bool createdNew; 
     m_Event = new EventWaitHandle(false,EventResetMode.AutoReset,GLOBAL_EVENT_NAME,out createdNew); 
     if(createdNew) { m_Event.Set(); } 
     //--- first time created event 
     m_HasHandle = m_Event.WaitOne(START_TIMEOUT_MILLISECONDS); 
     return m_HasHandle; 
     } 

    internal void OnAppEnd() 
     { 
     //--- Release the event 
     if(m_HasHandle) 
     m_Event.Set(); 
     } 

只要打電話OnAppStartOnAppEnd您的應用程序啓動和停止