国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

asp.net刪除文件session丟失

2024-07-10 12:42:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
如果你曾經(jīng)修改了ASP.NET應(yīng)用程序(dll文件),與修改了bin文件夾或Web.config文件(添加/刪除/重命名的文件等),而該網(wǎng)站在運(yùn)行,你可能已經(jīng)注意到,這將導(dǎo)致在AppDomain的重新啟動(dòng)。所有的會(huì)話狀態(tài)會(huì)丟失和網(wǎng)站再次成功啟動(dòng),任何登錄的用戶將被退出(假設(shè)你不使用持久Cookie身份驗(yàn)證)。 當(dāng)然,當(dāng)我們修改了web.config文件,并保存它,迫使一個(gè)AppDomain重新啟動(dòng),這是我們需要的。

我們有時(shí)動(dòng)態(tài)創(chuàng)建和刪除的文件夾,在ASP.NET 2.0中,文件夾刪除將導(dǎo)致一個(gè)AppDomain重新啟動(dòng),這將導(dǎo)致嚴(yán)重的問(wèn)題。 例如,對(duì)于一個(gè)電子商務(wù)網(wǎng)站的產(chǎn)品,你可能想存儲(chǔ)在目錄中的產(chǎn)品來(lái)自它的名字ID的產(chǎn)品的圖片,例如。/ productImages/123/ipod-nano.jpg,甚至為身份證圖像的記錄。 這有助于避免與其他上載的文件和圖像文件名沖突。 當(dāng)然,當(dāng)你來(lái)到刪除從數(shù)據(jù)庫(kù)產(chǎn)品,你自然要?jiǎng)h除其相應(yīng)的圖像和含有它的文件夾,但顯然不能因?yàn)檫@AppDomain重新啟動(dòng)的問(wèn)題。 因?yàn)?,我們刪除留在我們的服務(wù)器中的空文件夾(文件刪除不會(huì)引起應(yīng)用程序重新啟動(dòng))。

解決方案

幸運(yùn)的是,我們有了Reflection and HttpModules的解決方案。 首先創(chuàng)建一個(gè)像.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() { }
}
}

如果您喜歡在 Application_Start使用Global.asax文件中,放置在Init()代碼在Application_Start 中。 我相信在Global.asax使用方法已過(guò)時(shí),在使用HttpModules可以響應(yīng)網(wǎng)絡(luò)(應(yīng)用程序生命周期的會(huì)話開(kāi)始,會(huì)話結(jié)束時(shí),)。 init方法在Global.asax同Application_Start作用是一樣的,Dipose類似于Application_End。

我們要以上述代碼起作用,需要在web.config文件<httpModules>區(qū)段中放入:

<add name="stopAppDomainRestartOnFolderDelete"
type="MyWebsite.StopAppDomainRestartOnFolderDeleteModule" />
需要說(shuō)明的是,"stopAppDomainRestartOnFolderDelete"為自定義的任意名稱,"MyWebsite"為上述.cs文件中的命名空間,一般為項(xiàng)目名稱."StopAppDomainRestartOnFolderDeleteModule"為上述.cs文件中的類名.
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 洞口县| 龙口市| 江西省| 绥化市| 扎鲁特旗| 宜川县| 商洛市| 鲁甸县| 宝兴县| 老河口市| 安国市| 眉山市| 库尔勒市| 黄山市| 东乌珠穆沁旗| 齐河县| 类乌齐县| 常山县| 苏州市| 广德县| 鄂托克旗| 泾阳县| 四川省| 中江县| 玉龙| 荆州市| 左权县| 萍乡市| 罗山县| 台北市| 沙河市| 宁津县| 嘉禾县| 吉隆县| 衡东县| 军事| 陵水| 祁东县| 三门峡市| 青铜峡市| 廉江市|