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

多个asp.net应用程序实例出现问题,asp.net,instance,Asp.net,Instance,我有一个使用该文件的asp.net应用程序(类似于手工制作的DB)。它以非共享模式打开文件。这就是为什么只有一个站点实例可以使用它 但问题开始于我在服务器上更新站点时(通过app_offline.htm技巧) 有时,更新后的AppDomain实例在旧应用程序停止之前启动。 我有两个AppDomain实例同时工作 有没有标准的方法来预防它 PS:我知道应用程序池中的“重叠回收”设置,但这是另一回事。它适用于同时工作的多个应用程序池,但我有一个应用程序池,其中包含同一应用程序的多个实例。我找到了以下

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

但问题开始于我在服务器上更新站点时(通过app_offline.htm技巧)

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

有没有标准的方法来预防它


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

我找到了以下解决方案

  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();
      }
只需在应用程序启动和停止的地方调用应用程序启动和停止,就可以很好地解释这种情况

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

HostingEnvironment.RegisterObject()


我不知道标准方式,但我认为这里最大的非标准方式是单次访问“手工制作的数据库”……不管我使用哪种存储,问题在于非共享访问。应用程序池中的“重叠回收”设置也是出于这些原因而设计的。