gpt4 book ai didi

asp.net - 如何检测当前应用程序池是否在 IIS7.5 和 Asp.Net 3.5+ 中结束

转载 作者:行者123 更新时间:2023-12-03 13:50:51 24 4
gpt4 key购买 nike

好吧 - 正如问题主题所述 - 关于如何做到这一点的任何想法?

我一直在查看 System.Web.Hosting 中的对象,但没有什么突出的。

原因?我收到一两个应用程序错误,这些错误通常发生在回收过程中(它们相隔大约 25 小时发生,我的应用程序池回收时间设置为默认值),所以我想知道它们是否发生在正在关闭的池中的线程,或者正在启动(ed/ing)的线程。

最佳答案

我最近偶然发现了this article on Brain.Save()它从托管 WCF 的角度讨论了这个问题(他是 Steve Maine - Redmond 的 Connected Servies 部门的项目经理)。

当 WCF 服务托管在 Asp.Net 中时,他们需要能够执行此操作,因为他们需要能够关闭任何打开的监听器,以便新应用程序域中的 WCF 引擎能够再次打开它们。

正如文章所展示的,答案是实现 IRegisteredObject interface , 调用ApplicationManager.CreateObject创建对象的实例,然后将其注册到 HostingEnvironment.RegisterObject (接口(interface)的 MSDN 文档中都有详细说明)。

当这个对象的 IRegisteredObject.Stop(bool)使用 false 调用实现作为参数,这是通知应用程序域正在关闭,并且应该通过调用 HostingEnvironment.UnregisterObject 来取消注册对象(有点像全局处置) .

当它被 true 调用时这意味着您没有及时取消注册,如果您不立即取消注册,它将为您完成。

我当然可以使用这种机制来查明,当发生异常时,AppDomain 是否被杀死。引发异常的相关对象的性质意味着,如果它不是在关闭时,它必须在初始启动期间。

然而,同样地,我很可能会开始为我的其他一些更复杂的静态信息研究这种持久性机制!

历史

这篇文章还解释了您为什么要使用 IRegisteredObject 的一些历史和理由。而不是 申请_开始申请_结束 global.asax 中的方法:

Traditional ASP.NET applications can hook application lifecycle events (application startup/shutdown) by implementing methods like Application_Start and Application_Stop in global.asax. However, global.asax is for application code. Infrastructure pieces (of which the WCF hosting system is one) need a mechanism of hooking AppDomain lifecycle events that do not involve dumping infrastructure code in your global.asax file. That space is reserved for you, the user, and it would be rude of use to pollute that with a bunch of hosting goo we need to make the whole thing work. Instead, the ASP.NET folks did some great work during the Whidbey release to open up the hosting API’s and make it easy for people like WCF to come along and hook these lifecycle events in a way that’s invisible to application code.

关于asp.net - 如何检测当前应用程序池是否在 IIS7.5 和 Asp.Net 3.5+ 中结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3448839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com