2010-04-27 6 views
0

У меня есть приложение asp.net, которое использует файл (что-то вроде ручной БД). Он открывает файл в режиме без общего доступа. Вот почему только один экземпляр сайта может его использовать.Проблема с несколькими экземплярами приложения asp.net

Но проблемы начинаются, когда я обновление сайта на сервере (через app_offline.htm трюка)

Иногда обновленный экземпляр AppDomain начинается до того, как старое приложение остановилось. У меня есть 2 экземпляра AppDomain, работающих одновременно.

Есть ли стандартный способ предотвратить его?

PS: Я знаю о настройке «Overlapped recycle» в приложении Pool, но это другое. Это для нескольких пулов приложений, работающих одновременно, но у меня есть один пул приложений с несколькими экземплярами одного и того же приложения.

+0

Я не знаю, о стандартном образе, но я думаю, что большая нестандартная вещь здесь одного доступа «hand-made DB» ... – Paddy

+0

Не имеет значения, какое хранилище я использую, проблема заключается в доступе без доступа. Настройка «Overlapped recycle» в Application Pool также была разработана для этих целей. – murad

ответ

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(); 
     } 

OnAppStart Просто позвоните и OnAppEnd где ваше приложение запускается и останавливается

Смежные вопросы