1
4
这个问题有了很大的更新,所以请容忍我。。。 假设您的web方法代码没有直接\间接创建线程:
按照“请求”而不是线程来重新表述原始问题更有帮助。
这是自动处理的,因为存在请求队列和活动请求的概念。当ASP.NET应用程序重新启动时,所有当前和排队的请求都将完成(除非它们没有及时完成),新请求将排队,然后在新的工作进程恢复时提供服务。回收ASP.NET应用程序所属的应用程序池时,将遵循此过程。
更新 我想我可以从你的评论中得知,当所有请求都得到服务,然后应用程序即将关闭时,你需要运行一些清理代码。您应该将此代码放在“全局” Application_End “事件处理程序。 更新2 回答你最新的问题。您的要求是: 重新启动应用程序时:
我所描述的标准回收模式支持这一点。您不需要自己处理请求线程—这是ASP.NET框架的支柱之一,它会为您处理这些问题。它是面向请求的,抽象了如何处理请求,即在多个线程上提供服务。它管理将请求放入线程,并在应用程序被回收时管理这些请求的生命周期。 更新3 好吧,我想我们有最后一个场景了。您正试图通过发出“关闭的”web服务调用从客户端关闭ASP.NET。基本上 你想重新发明轮子。 ASP.NET已具有此行为,并且受以下各项支持: 答。 应用程序回收 b。 应用程序结束 一个全局应用程序事件处理程序,您可以在其中放置清理代码。它会执行的 回收处理干净你的未完成的要求。 你不需要你的“关闭”命令。 您应该考虑让IIS回收您的应用程序,因为它支持在指定的每日时间进行回收。如果由于部署原因而无法配置IIS,则可以使用web.config“touching”强制回收IIS: 答。在服务器上运行一个计时器,可以检查日期变化情况,然后触摸web.config文件。 b。仍然让客户端调用“CLOSED”web方法,但是让“CLOSED”方法只接触web.config文件。 IIS,那么“a”是最理想的。 老实说,微软已经考虑过了 更新4 @拉吉,好吧,让我再重复一遍。 您的条件是:
我的建议是:
除非你的问题中缺少一些细节,否则上述内容似乎符合你的条件。您希望执行“x,y,z”,而ASP.NET具有内置的支持,可用于实现“x,y,z”,并为您提供成熟、有保证和文档化的实现。 我还在努力理解你为什么要谈论线程。我做多线程开发,但是在考虑ASP.NET时,谈论线程而不是请求会给讨论增加不必要的复杂性。除非你的问题还不清楚。
我在这里试图帮助你们,因为试图自己实现这种行为是不必要的,也不是小事。 |
user755806 · 从Rest服务返回JSON响应? 6 年前 |