【发布时间】:2014-01-06 16:03:47
【问题描述】:
背景
我有一个批处理系统,需要向一群人发送消息(通过 SMS/电子邮件)。
由于我们的消息发布系统相当慢,当用户点击“发送”按钮时,系统会将所有消息信息发布到具有“批处理 ID”的数据库中,然后执行异步调用 (WebRequest.BeginGetRequest) 到一个“ProcesBatch”ASHX 处理程序请求,批处理 ID 作为 URL 请求参数。
这会将前端页面释放给用户以进行下一批消息,因为用户实际上不需要任何反馈,但是,数据库中的记录随后用于报告模块。
同时,批处理处理程序简单地围绕给定批处理 ID 的数据库中的记录循环,然后按顺序将消息发布到我们的(慢)消息发布者。
问题
问题是在批处理过程中,asp.net 抛出了一个
System.Threading.ThreadAbortException: Thread was being aborted.
进行到一半,剩余的消息没有发送。
我检查了 IIS,并且回收分钟设置为默认 1740,那么还有什么会导致这种情况的吗?
或者有没有更合适的方法来解决这个问题。
【问题讨论】:
-
您可以使用 Windows 服务,而不是在您的网络服务器上运行的异步函数
-
这是我考虑过的事情,如果它只是那些无法控制的 IIS/ASP.Net 事情之一,那么它就是我的“支持”选项。
-
Response.Redirect将抛出 ThreadAbortException,正如我提到的 in this SO answer,这取决于你如何使用它。也许看看做Response.Redirect(url, false);是否有帮助。但就像@RononDex 所说,windows 服务会更适合这个。 -
@MikeSmithDev - 我实际上并没有做任何重定向。主用户页面对 ASHX 处理程序执行异步“WebRequest.BeginGetResponse”。然后 ASHX 处理程序(偶尔)让线程中止。
标签: asp.net multithreading iis batch-processing