gpt4 book ai didi

c# - HttpApplication 不退出

转载 作者:行者123 更新时间:2023-11-30 18:29:02 24 4
gpt4 key购买 nike

我有一个单页应用程序,前端是 Angular.js,后端是 Web api2,还使用 ​​CaSTLe Windsor 和 SignalR。

我在维护服务器状态的服务器上使用 C# 组件。因此,在 Application_Start() 上,我将 CaSTLe Windsor 的主要组件注册为 Singleton。

IoC.Container.Register(Component.For(typeof(MainManager)).ImplementedBy(typeof(MainManager)).LifeStyle.Singleton);

(但是,我测试了 PerWebRequest 和其他一些生活方式,但主要问题仍然存在,启动的任务没有退出)

然后在我的 Web Api 中,我可以针对该实例执行命令。

[HttpGet]
public void StartProcess(Params p) {
IoC.Resolve<MainManager>().StartOperation(p);
}

这也让我有机会通过调用另一个 Controller 方法从网站上停止它

[HttpGet]
public void Stop() {
IoC.Resolve<MainManager>().RequestStop();
}

这在大多数情况下都非常有效。但是,有时我的应用程序处于错误状态(由于多种原因,它可以在产品中重新启动)我可以通过在运行操作期间修改 web.config 来模拟这个问题,所以很多东西都会重置(例如 Signal- R连接),但主操作并没有停止运行。

(事实上,一旦我的应用程序处于错误状态,我就无法再调用 Stop Controller 方法,因为 MainManager 已被重置,所以目前停止它的唯一方法是重置整个 IIS。这当然不是想要的)

我正在尝试找出如何检测此状态并终止正在运行的进程。

作为一种可能的解决方案,我正在尝试使用 Bound 生活方式(CaSTLe Windsor 3 中的新功能),尝试将我的管理器范围限定到我的 web api http应用程序,但还没有成功。

更新

我尝试将主要任务方法设为静态

[HttpGet]
public void Start(ForceData data) {
MainManager.Start(data);
}

我相信这应该排除单例实例,但代码在接触 web.config 后仍然不间断地运行

更新

将 MainManager 类排除在外。我所有的 web api 方法现在都是 loop + sleep

[HttpGet]
public void Start(ForceData data) {
foreach (var e in data.Members)
{
_log.Info("processing member: {0}", e.Email);
Thread.Sleep(1000);
}
}

这个循环在访问 web.config 后也没有中断。

所以,此时我正在阅读有关 MVC 的信息 request lifecycle弄清楚这个请求在什么时候变成了僵尸胭脂

最佳答案

这是设计使然,因为 HttpApplication 实例不会在应用程序重新启动时立即释放,

http://msdn.microsoft.com/en-us/library/vstudio/ms178473%28v=vs.100%29.aspx

When an application restart is required, ASP.NET will serve all pending requests from the existing application domain and the old assemblies before restarting the application domain and loading the new assemblies.

在所有示例 Web API 方法中,您可以看到线程仍然很忙,这意味着 ASP.NET 运行时认为此请求仍在处理中。

关于c# - HttpApplication 不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726529/

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