IIS中,當檔案夾被刪除時,防止應用程式重啟的解決辦法

來源:互聯網
上載者:User

如果你曾經修改了ASP.NET應用程式(dll檔案),與修改了bin檔案夾或Web.config檔案(添加/刪除/重新命名的檔案等),而該網 站在運行,你可能已經注意到,這將導致在AppDomain的重新啟動。所有的工作階段狀態會丟失和網站再次成功啟動,任何登入的使用者將被退出(假設你不使用 持久Cookie身分識別驗證)。 當然,當我們修改了web.config檔案,並儲存它,迫使一個AppDomain重新啟動,這是我們需要的。

 

我們有時動態建立和刪除的檔案夾,在ASP.NET 2.0中,檔案夾刪除將導致一個AppDomain重新啟動,這將導致嚴重的問題。 例如,對於一個電子商務網站的產品,你可能想儲存在目錄中的產品來自它的名字ID的產品的圖片,例如。/ productImages/123/ipod-nano.jpg,甚至為身份證映像的記錄。 這有助於避免與其他上傳的檔案和影像檔名衝突。 當然,當你來到刪除從資料庫產品,你自然要刪除其相應的映像和含有它的檔案夾,但顯然不能因為這AppDomain重新啟動的問題。 因為,我們刪除留在我們的伺服器中的空檔案夾(檔案刪除不會引起應用程式重新啟動)。

解決方案

幸運的是,我們有了Reflection and HttpModules的解決方案。 首先建立一個像.cs檔案...

using System.Reflection;   

using System.Web;

namespace MyWebsite
{
 /// <summary>
 /// Stops the ASP.NET AppDomain being restarted (which clears
 /// Session state, Cache etc.) whenever a folder is deleted.
 /// </summary>
 public class StopAppDomainRestartOnFolderDeleteModule : IHttpModule
 {
    public void Init(HttpApplication context)
    {
        PropertyInfo p = typeof(HttpRuntime).GetProperty("FileChangesMonitor",
        BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);

        object o = p.GetValue(null, null);

        FieldInfo f = o.GetType().GetField("_dirMonSubdirs",
        BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);

        object monitor = f.GetValue(o);

        MethodInfo m = monitor.GetType().GetMethod("StopMonitoring",
          BindingFlags.Instance | BindingFlags.NonPublic);

        m.Invoke(monitor, new object[] { });
     }

     public void Dispose() 
     { }
   }
}

以上類中的代碼在使用中一個字都不要改動。

我們要使上述代碼起作用,需要在web.config檔案<httpModules>區段中放入:
<add name="stopAppDomainRestartOnFolderDelete"  type="MyWebsite.StopAppDomainRestartOnFolderDeleteModule" />

需要說明的是,"stopAppDomainRestartOnFolderDelete"為自訂的任意名稱,"MyWebsite"為上述.cs檔案中的命名空間,一般為項目名稱."StopAppDomainRestartOnFolderDeleteModule"為上述.cs檔案中的類名. 如果上面的類是在App_Code檔案夾下,就沒有命名空間。寫成<add name="stopAppDomainRestartOnFolderDelete" type="StopAppDomainRestartOnFolderDeleteModule" />就可以了。

這就是它。 這將防止檔案夾刪除AppDomain重新啟動,但修改web.config和bin檔案夾時仍會重新啟動,這正是我們想要的。

本文來源:http://wanrenbao.blog.163.com/blog/static/99903454201001832617509/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.