C# 线程中止?

C# 线程中止?,c#,asp.net,webservice-client,C#,Asp.net,Webservice Client,你好, 我有一个ASP.NET应用程序,其中我添加了一个包含“fire and forget”方法的Web服务。当执行此方法时,它将启动一个循环(0-99999),对于每个循环,它将读取一个xml文件并将其保存到数据库中 问题是此操作将花费几个小时,并且通常以线程中止异常结束 我已经看到您可以增加executionTimeout,这是如何实现的: <httpRuntime executionTimeout="604800"/> <compilation debug="true"

你好,

我有一个ASP.NET应用程序,其中我添加了一个包含“fire and forget”方法的Web服务。当执行此方法时,它将启动一个循环(0-99999),对于每个循环,它将读取一个xml文件并将其保存到数据库中

问题是此操作将花费几个小时,并且通常以线程中止异常结束

我已经看到您可以增加executionTimeout,这是如何实现的:

<httpRuntime executionTimeout="604800"/>
<compilation debug="true">

但这没有帮助吗


我还尝试在循环中添加thread.sleep。如果我将它设置为500,它将运行一半,如果我设置则不要在web服务中运行循环。取而代之的是,把它放在控制台应用程序、winforms应用程序甚至可能是windows服务中。使用web服务启动其他程序

web服务基本上是一个网页,asp.net网页并不意味着承载长时间运行的进程

本文并不直接回答您的问题,但包含与我的答案相关的信息片段:

但是,当 操作的增长时间比 典型ASP.NET会话持续时间(20分钟) 分钟)或需要多个参与者 (如我的招聘示例中所示),ASP.NET 没有提供足够的支持。你 可能还记得ASP.NET worker 进程自动关闭 闲置和定期回收 他们自己。这将造成巨大的损失 长期运行的问题, 作为在这些进程中保持的状态 你会迷路的


无论如何,这篇文章读得很好。它可能会为你提供一些想法。

不确定这是否是“答案”,但是当你收到Web服务调用时,你可以考虑将动作调度到另一个线程上。然后可以运行到完成。你想考虑如何确保某人不同时启动两个进程。

我有一个ASP.NET应用程序 添加了一个包含 一种“开火然后忘记”的方法。当这 方法,它将启动 循环(0-99999)和每个循环 将读取xml文件并将其保存到 数据库

让我们不要讨论这个问题,我觉得这个方法很。。。陛下坏的原因有很多(比如中途重置)。我将对请求排队,然后返回,并让队列侦听器以事务完整性进行处理

无论如何,你能做的是:

  • 将wpool线程的工作项排队以拾取内容
  • 马上回来

除此之外,web服务和类似的东西对于每小时长时间运行的流程来说不是一个好地方。勾选工作流,单独处理。

有没有办法从web服务重构长期运行的流程?对不起,我的web酒店不允许这样做。这真的有效吗?新线程应该以相同的方式处理并终止?