我有一个使用该文件的asp.net应用程序(类似于手工制作的DB)。它以非共享模式打开文件。这就是为什么只有一个站点实例可以使用它。
但是当我在服务器上更新网站时,问题就出现了(通过app_offline.htm技巧)
有时更新的AppDomain实例会在旧应用程序停止之前启动。 我有2个AppDomain实例同时工作。
有没有任何标准方法可以阻止它?
PS:我知道应用程序池中的“重叠回收”设置,但这是另一回事。它适用于同时工作的多个应用程序池,但我有一个应用程序池,其中包含同一应用程序的多个实例。
答案 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();
}
只需致电OnAppStart
和OnAppEnd
申请开始和停止的地方
答案 1 :(得分:0)