Проблема с несколькими экземплярами приложения asp.net - PullRequest
0 голосов
/ 27 апреля 2010

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

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

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

Есть ли какой-нибудь стандартный способ предотвратить это?

PS: Я знаю о настройке «Перекрывающаяся утилизация» в пуле приложений, но это другое дело Он предназначен для нескольких пулов приложений, работающих одновременно, но у меня есть один пул приложений с несколькими экземплярами одного и того же приложения.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2011

Эта статья прекрасно объясняет ситуацию.

Для решения моей проблемы мне нужно использовать

HostingEnvironment.RegisterObject ()

0 голосов
/ 04 мая 2010

Я нашел следующее решение

  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, где ваше приложение запускается и останавливается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...