线程已中止?

时间:2010-12-27 14:15:50

标签: c# asp.net webservice-client

您好,

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

问题是此操作需要几个小时,通常以线程中止异常结束?

我已经看到你可以增加executionTimeout,这就是:

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

但这没有用?

我还尝试在循环中添加thread.sleep。如果我将它设置为500它将会进入一半,如果我设置&lt; 100,它将在线程中止异常之前进行几次1000循环?

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:8)

不要在Web服务中运行循环。相反,它在控制台应用程序,winforms应用程序,甚至可能是Windows服务。使用Web服务启动其他程序。

Web服务基本上是一个网页,而asp.net网页并不意味着托管长时间运行的进程。

本文并未直接回答您的问题,但包含与我的回答相关的一小段信息:

http://msdn.microsoft.com/en-us/magazine/dd296718.aspx

  但是,当持续时间   手术比手术长得多   典型的ASP.NET会话持续时间(20   分钟)或需要多个演员   (在我的招聘示例中),ASP.NET   没有提供足够的支持。您   可能还记得那个ASP.NET工作者   进程自动关闭   闲置并定期回收   他们自己。这会造成很大的影响   长期运营的问题,   作为国家在这些进程中举行   将失去。

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

答案 1 :(得分:0)

不确定这是否是“答案”,但是当您收到Web服务调用时,您可以考虑将操作分派到另一个线程。然后可以运行直到完成。您可能想要考虑如何确保某人不会同时启动其中两个进程。

答案 2 :(得分:0)

  

我有一个ASP.NET应用程序   添加了包含的Web服务   一种“即发即忘”的方法。当这个   方法执行它会启动一个   循环(0-99999)并为每个循环它   将读取一个xml文件并保存到   数据库。

让我们不要进入我这种方法的背后......嗯...因为很多原因而糟糕(比如重置之中)。我会将请求排队,然后返回,并让队列侦听器以事务完整性进行处理。

无论如何,你能做的是:

  • 为一个wpool线程排队一个WorkItem来提取东西。
  • 立即返回。

除此之外,Web服务和类似的东西不适合每小时长时间运行的进程。勾选工作流程,单独处理。