多个asp.net应用程序实例出现问题

时间:2010-04-27 15:53:05

标签: asp.net instance

我有一个使用该文件的asp.net应用程序(类似于手工制作的DB)。它以非共享模式打开文件。这就是为什么只有一个站点实例可以使用它。

但是当我在服务器上更新网站时,问题就出现了(通过app_offline.htm技巧)

有时更新的AppDomain实例会在旧应用程序停止之前启动。 我有2个AppDomain实例同时工作。

有没有任何标准方法可以阻止它?

PS:我知道应用程序池中的“重叠回收”设置,但这是另一回事。它适用于同时工作的多个应用程序池,但我有一个应用程序池,其中包含同一应用程序的多个实例。

2 个答案:

答案 0 :(得分: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申请开始和停止的地方

答案 1 :(得分:0)

This article完美地解释了这种情况。

要解决我的问题,我需要使用

  

HostingEnvironment.RegisterObject()