HttpApplication 不退出

2024-03-02

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

我在服务器上使用 C# 组件来维护服务器状态。因此,在 Application_Start() 上,我将温莎城堡的主要组件注册为单例。

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);
}

这也让我有机会通过调用另一个控制器方法来阻止它从网站上

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

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

(事实上​​,一旦我的应用程序处于不良状态,我就无法再调用该 Stop 控制器方法,因为 MainManager 已重置,因此目前停止它的唯一方法是重置整个 IIS。这当然是不希望的)

我试图找出如何检测这种状态,并终止正在运行的进程。

作为一种可能的解决方案,我正在尝试使用Bound生活方式(温莎城堡 3 中的新功能),试图将我的经理范围限制到我的 Web api httpapplication,但还没有运气。

update

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

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

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

update

将 MainManager 类排除在外。我的 Web api 方法现在所做的就是循环 + 睡眠

[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 的内容请求生命周期 http://www.codeproject.com/Articles/741228/MVC-Application-Lifecycle找出这个请求在什么时候变成僵尸胭脂


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

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

当需要重新启动应用程序时,ASP.NET 将在重新启动应用程序域并加载新程序集之前处理来自现有应用程序域和旧程序集的所有待处理请求。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpApplication 不退出 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 但说真的...... ASP.NET WebAPI 实现示例(包括 OAuth)

    我真的对 WCF 示例不感兴趣 我发现的 DotNetOpenAuth 实现也是不完整的 https github com DavidChristiansen DotNetOpenAuth WebAPI 40 or 假设WCF https
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • IsReusable 属性中的上下文切换

    是否可重用属性 下面是我的理解IsReusable财产 如果处理程序返回静态内容 将值设置为 true 是安全的 但如果线程返回动态内容 为了使其线程安全 IsReusable应设置为 false 在这种情况下 可能会发生上下文切换 这可能
  • ASP.NET MVC,控制器可以改变提交的值吗?

    ASP NET MVC 中是否允许更改提交的值 HttpPost public ActionResult Create Person toCreate toCreate Lastname toCreate Lastname A return
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • NumPy 广播:计算两个数组之间的平方差之和

    我有以下代码 在 Python 中这需要很长时间 必须有一种方法可以将此计算转换为广播 def euclidean square a b squares np zeros a shape 0 b shape 0 for i in range
  • 从oracle中选择记录

    为了选择最后一条记录 当我的数据库是 MySQL 时 我使用了这个 result mysql query SELECT Id FROM test ORDER BY LENGTH Id Id ASC count mysql numrows r
  • 如果存在则推送到 JavaScript 数组,如果不存在则先创建它

    有没有办法让这条线始终工作而不抛出TypeError Cannot read property Whatever of undefined var MyArray MyArray StringVariableName StringVaria
  • 如何使用 HTML Agility Pack 清理格式不良的 HTML

    我正在尝试替换这个可怕的正则表达式集合 该集合当前用于清理格式不良的 HTML 块 并偶然发现了 C 的 HTML Agility Pack 它看起来非常强大 但是 我找不到如何使用该包的示例 在我看来 这将是其中包含的所需功能 我确信我是
  • Orchard CMS:Javascript 文件返回 404 未找到,即使它存在

    我的 Orchard 模块中的编辑器模板的 Razor 视图中有以下内容 Script Include assets js AtFoot 当页面呈现时 我可以在底部看到这一行 美丽的 唯一的问题是 当我访问该路径时 出现 404 错误 该脚
  • Angular Material Design 中的事件日历

    我想使用 Angular Material Design 默认日期选择器日历作为事件日历 喜欢 http prntscr com fpg1lw http prntscr com fpg1lw 如何在日历中列出我的活动 我只想强调 Angul
  • Django 多对多关系不保存

    Update 对于任何好奇的人 我弄清楚了它是什么 为什么以及如何解决它 在我看来 我有 fields html tags title text taken date image 我在我的模板中使用 form as p 显然 一旦从表单中发
  • Swift 中的视图/层何时设置边界和框架?

    我有这样的东西UIView子类 override var bounds CGRect didSet somelayer frame bounds 在相应的somelayer 我有这个 override var bounds CGRect d
  • 如何解决启动 Chrome 时出现“获取默认适配器失败”错误并尝试使用 Selenium 使用 ChromeDriver 访问网页的问题

    我已经更新了 Selenium 但即使加载网页 错误仍然发生 然而 在某些情况下 驱动程序启动但停滞不前 这是否会导致问题 如果是 我该如何解决 11556 9032 0502 152954 314 ERROR device event l
  • 如何在 git bash 中启用 vim 风格导航?

    我已经厌倦了使用箭头键导航 git bash 并且我在某处读到可以在 git bash 中启用 vim 样式导航 所以我只是想知道如何启用此功能 您应该能够简单地输入 set o vi 这将激活 vi 风格的导航 我刚刚在 Windows
  • 重新部署后 HBase 协处理器未更新

    我正在使用 HBase 1 1 2 并尝试重新部署自定义端点协处理器来修复 Java 代码中的错误 我对协处理器代码进行了一些更改 并通过以下步骤重新部署它 重建协处理器 jar 将其复制到 HDFS 上的某个位置 删除现有的协处理器 al
  • 如何列出句子中表示动物的所有英语术语?

    例如 在句子 两匹马刚刚躺下 一群失去母亲的小鸭子鱼贯进入谷仓 有气无力地吱吱叫 左右徘徊 寻找不被踩踏的地方 有两种动物 马和鸭 我正在寻找动物名称的词汇表 但找不到足够完整的内容 这WordNet http wordnet prince
  • 不是 Stata 版本 5-12 .dta 文件

    我正在尝试使用我的电脑中的现有数据 dta file 我正在尝试使用以下命令在 R 中打开它 library foreign mydata lt read dta file C Users me Desktop data raw dta 但
  • 如何制作一个一次接受一个值的排列函数?

    我正在寻找一个函数 它接受区间 0 1 N 中的 1 个数字 并返回同一区间中的排列值 0 1 2 3 4 5 和 f x 的示例如下 f 0 5 f 1 1 f 2 0 f 3 4 f 4 2 f 5 3 根据我的研究 理解 这是一个循环
  • 在命令行上过滤 Logcat 日志

    public static final TAG Legendry Eagle 问题 我想查看日志 Legendry Eagle 从命令行 I tried adb logcat s Legendry Eagle adb logcat s
  • 求近似规则的点网格子集的周长

    让我们考虑一组接近规则的二维网格 这些网格与相邻网格相邻 相邻网格具有一个或多个相同的顶点 这里是10个网格的样本 顶点坐标 经度 纬度 如下 A lt lon lat 1 2 1 85 30754 27 91250 2 85 32862
  • Powershell 对 Excel 工作簿进行多个 SQL 查询

    首先 如果这是一个重复的问题 我深表歉意 我搜索了又搜索 但没有找到任何可以解决我所遇到的问题的内容 我的目标是使用 7 个 Powershell 脚本 将 SQL 查询中的 CSV 输出到 1 个 Excel 工作簿中 每个 CSV 位于
  • VS.NET默认为私有类

    为什么 Visual Studio 在 C 中将新类声明为私有 我几乎总是把它们转为公开的 我是疯子吗 我不确定为什么要这样做 但为了让 Visual Studio 默认将该类创建为 Public 您需要执行以下操作 进入 Program
  • 在 xcode 4.5.1 上链接库 OpenCV 2.4.2

    我已经按照此处的说明安装了带有 macports 的 opencv 使用 Xcode 为 OS X Lion Mountain Lion 编译 OpenCV 2 3 1 https stackoverflow com questions 8
  • HttpApplication 不退出

    我有一个单页应用程序 前端使用 Angular js 后端使用 Web api2 还使用 Castle Windsor 和 SignalR 我在服务器上使用 C 组件来维护服务器状态 因此 在 Application Start 上 我将温