- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个单页应用程序,前端是 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/
我有一个单页应用程序,前端是 Angular.js,后端是 Web api2,还使用 CaSTLe Windsor 和 SignalR。 我在维护服务器状态的服务器上使用 C# 组件。因此,在 A
我有一个 MVC3 应用程序,我向其中添加了几个简单的缓存变量作为属性。我在 Application_Start 中添加我的数据,然后在 Controller 中尝试将 HttpContext.App
我有一个派生自 HttpApplication 的类,它添加了一些额外的功能。我已经到了需要对这些功能进行单元测试的地步,这意味着我必须能够创建 HttpApplication 的新实例、伪造请求并检
我在设计 View 上制作了一个带有一些静态 HTML 的简单 Web 表单,在后面的代码中我添加了两个方法:Page_Load 和 Page_PreRender,如下所示: public parti
我使用了 this article 顶部的表格作为引用。我有三个问题: 1 - 多个用户(来自不同的物理位置)可以共享一个 HttpApplication 实例吗?如果是这样,这是默认发生的吗? 2
HttpApplication 异步事件(例如,使用AddOnEndRequestAsync 和 friend 注册的事件)在多大程度上是异步的? IIS 是否等待为特定事件触发的所有异步事件完成,然
我在我的 Global.asax 中覆盖了 Application_AuthenticateRequest() 以试图更好地理解事件流。我正在使用默认 MVC2 应用程序附带的成员身份提供程序。 我想
HttpApplication拥有特性Context哪个类是HttpContext . HttpContext 类和HttpApplication 类有一些共同的属性,比如User, Response
我在 Global.asax 中设置了各种全局参数,如下所示: Application["PagePolicies"] = "~/Lab/Policies.aspx"; Application["Pa
我正尝试在我的 MVC 应用程序上运行一些测试,但我一直在努力让它工作。我会尽量开门见山: 我正在使用 RhinoMocks 来尝试这样的事情: 设置: MockRepository mocks =
根据this MSDN article HttpApplication.EndRequest 可用于关闭或处置资源。但是,在我的应用程序中不会触发/调用此事件。 我们通过以下方式在 Page_Load
This comment通过 Stephen Cleary说的是: AspNetSynchronizationContext is the strangest implementation. It t
HttpApplication 类和 IHttpModule 有什么区别?它们是相同还是不同? 我看到文章在两个类(class)中都提到了相同的事件。 最佳答案 HttpApplication 是在其
我正在编写 HttpModule 并需要对其进行测试,我正在使用 C#、.NET4.5.2、NUnit 和 起订量。 我尝试测试的方法是Context_BeginRequest: public cla
我正在尝试向 .NET Mvc 应用程序中的每个请求添加一些请求上下文信息。我为此目的使用 LogicalCallContext,因为我的请求有时会调用异步任务。但是,我发现在 BeginReques
一本书展示了一个示例,其中(使用 IIS7 时)配置了以下模块,以便网站上运行的任何 Web 应用程序(甚至非 asp.net 应用程序)都可以使用它。但是: 如果为非 asp.net 应用程序调用此
我正在创建一个库,它需要在 ASP.NET 请求生命周期的各个阶段运行一些代码。 通过覆盖 HttpApplication.Init() 并在那里注册各种处理程序,在编写 Web 应用程序时很容易做到
我正在尝试为在 Application_Start 上加载的 ASPNET HttpApplication 测试“插件” . 代码是这样的: private HttpApplication appli
我的 Web 应用程序中有一个 HttpApplication (Global.asax),我用它来捕获和记录未处理的异常并设置 WebFormURLRouting。这一切都有效,但是我想将这段代码移
我有 global.asax,它从我创建的自定义类扩展而来,称为 MvcApplication,它从 System.Web.HttpApplication 扩展而来。 在它的构造函数中,它按照以下方式
我是一名优秀的程序员,十分优秀!