【问题标题】:Starting a new worker process within IIS c#在 IIS c# 中启动一个新的工作进程
【发布时间】:2012-06-09 05:43:40
【问题描述】:

我对我开始的流程有疑问。

我用Process.Start() 方法开始这个过程。 该进程是没有 GUI 的 Windows 窗体应用程序。我从运行在 IIS 上自己的应用程序池(作为 LocalSystem 运行)上的 Web 应用程序启动该过程。

进程开始时没有问题,但过了一段时间我可以在日志中看到进程停止工作(不发生日志记录)。如果我停止启动进程的应用程序池并再次启动池(不执行其他操作),则进程从停止的位置开始。我可以从它停止的日志中看到这一点。

我对父级(网络应用程序)没有任何依赖关系。我不会在子进程中等待任何东西。它只对另一台服务器进行大量 API 调用。当它作为线程运行时,代码实际上完美无缺。我更改为子进程,因为我希望它运行 LONG 作业。如果我使用工作进程,IIS 只会让我关闭。

那么现在有人知道是什么导致了这种奇怪的行为吗?

【问题讨论】:

  • 进程是刚刚挂起还是完全终止,签入taskman
  • 不,它仍在运行,因为我可以在任务管理器中看到该进程。一旦池被回收,进程就会从它“停止/暂停”的地方继续。

标签: c# asp.net iis process application-pool


【解决方案1】:

欢迎 IIS 随时回收应用程序池。这就是停止你的进程的原因。

您应该将您的进程移动到它自己的作为 Windows 服务运行的应用程序中。

【讨论】:

  • 但是我开始了一个单独的过程。它不依赖于 IIS 应用程序池。我什至可以在系统用户上运行的任务管理器中看到一个进程。它实际上并没有在任务管理器中停止它只是停止工作。一旦我回收了游泳池,它就会启动
  • 我怀疑 Process.Start() 将新进程作为 ASP.NET 父进程的子进程生成。我做了一些快速的谷歌搜索来确认这一点,但在我不得不放弃之前没有找到我想要的东西(实际工作调用 ATM)。这是我的怀疑;希望这会有所帮助。让我知道!我很感兴趣。
  • ... 如果最后的评论不清楚,我的想法是,如果新进程是 ASP.NET 进程的子进程,那么当 IIS 回收时子进程将被关闭作为 ASP.NET 应用程序池运行的父进程。
  • 另外,FWIW,我仍然认为将长进程作为 Windows 服务运行是一种更简洁的设计。但我知道意见各不相同,有时由于各种原因(与网络管理员的政治、部署问题等),您没有该选项。
  • 实际上该进程永远不会关闭。当它“停止/暂停”时,我仍然可以在任务管理器中看到该进程。一旦我手动回收应用程序池,进程就会启动(我可以在日志中看到)。无论如何,正如您所说,该进程是 ASP.NET 父进程的某种子进程,这就是它暂停的原因。我将对此进行研究或考虑将其作为服务实现。
猜你喜欢
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
相关资源
最近更新 更多