2

假设情况:假设我在 ASP.Net Web 系统中使用了一个第 3 方 .net 程序集,我正在处理它只是偶尔崩溃。当它这样做时,对它的所有调用都会引发异常,直到系统重新启动。显然,这有点次优。

有没有办法从异常处理程序重新启动该程序集?

(附录:当然,这里的正确答案是让供应商修复他们的错误。但是,有问题的供应商有点......“不愿意”回复我们的电子邮件。所以,这个重新启动组装的想法是今天早上产生的就像一条 MacGyver-eqsue 胶带。然后我们意识到我们都不知道该怎么做。)

4

6 回答 6

7

调用 HttpRuntime.UnloadAppDomain() 将强制应用程序自行终止并在下一个 Web 请求到达时重新启动。这会导致从头开始重新加载所有内容,并且应该消除损坏的程序集数据。

当然,这会杀死任何活动会话,但如果应用程序基本上崩溃了,这可能是可以接受的。

于 2008-11-13T21:48:54.830 回答
4

您可以回收应用程序池,但这将启动所有当前用户并丢失他们的会话信息 - 如果站点已经被坏 dll 冲洗,这可能无关紧要

于 2008-11-13T19:06:52.800 回答
4

好的,真正的答案...当 Web.Config 文件更改时,应用程序会重新编译并且应用程序池会重置。

所以,(我不想这么说)以编程方式更改您的 web.config 文件。

顺便说一句,我不建议这样做,这样你就可以把你的反对票留给别人。

于 2008-11-13T19:09:10.097 回答
2

假设...回到您的第 3 方供应商并让他们修复他们的错误。

于 2008-11-13T19:00:28.650 回答
0

可能是当它奇怪地崩溃时,它仍然会留下一个活跃的进程,该进程会阻止任何后续调用 DLL 的尝试。如果是这样,您可能能够以编程方式找到它并杀死它,这可能会解决需要重新启动的问题。

于 2008-11-13T19:09:21.173 回答
0

除了修改 web.config 之外,您还可以在 bin 文件夹中创建任意文件。这将重新启动您的应用程序。

于 2008-11-13T23:17:31.733 回答