【问题标题】:How do i make a forever running service in asp.net?我如何在 asp.net 中创建一个永远运行的服务?
【发布时间】:2011-10-03 11:34:01
【问题描述】:

From my other question 我了解到 asp.net 会杀死我的线程,因为“感觉就像这样”。这些线程是我处理缩略图生成、注册电子邮件和其他事情的守护进程。

有人告诉我使用“Windows 服务”,但据我所知,它是您安装在机器上并在启动时运行的应用程序。如果这就是他的意思,那么使用它有几个问题。上次我尝试服务时,我记得这很困难,我只是将应用程序放在启动文件中。反正我不在 WINDOWS 上。我在linux上。

在单独的应用程序中使用它的其他问题是我在 asp.net 中有很多代码需要复制,而我不想这样做。另一个是我让asp.net在需要时使用ManualResetEvent戳线程,这样我就不会敲击数据库并立即获得结果。 AFAIK 我不知道有什么方法可以戳另一个进程。

我该如何运行这段代码?用asp.net?我不认为检查线程是否存在每个请求是一个好主意。我能做什么?

【问题讨论】:

  • 您的网站架构听起来很奇怪。我通过将thumbnails.ashx 文件作为img src 来处理缩略图生成,然后在需要时生成+ 返回缩略图。使用操作需要时发送注册电子邮件。
  • 只需在你的项目中添加一个windows服务项目,然后包含你需要的项目。如果这是不可能的,那么您的架构就会出现问题
  • @Oliver:好的,不过我也处理音频文件。如果用户制作 10 个 1 分钟的样本并同时上传它们,我无法将 10ffmpeg 进程同时放入 ram。现在,如果另一个用户用 5 个 3 分钟的样本同时做同样的事情......我绝对不能这样做。
  • @acidzombie24 看看这个帖子:stackoverflow.com/questions/637948/… 我希望它能让你朝着正确的方向前进
  • @acidzombie24 您希望构建代码以便使用命令行应用程序对其进行测试和调试,然后将其打包到服务安装程序中进行部署。这基本上只是意味着将所有代码放在 DLL 中,而只是在控制台应用程序和服务主机中调用它。

标签: asp.net


【解决方案1】:

ASP.NET 旨在遵循请求-响应模式。它具有专门用于防止线程在请求​​之外运行的机制,例如杀死长时间运行的线程(它认为是“损坏的”)。

您要求做的是不是 ASP.NET 的预期功能。要在 ASP.NET 中做您想做的事,您将与平台抗争,而不是在平台上构建。这就是为什么你被告知要编写另一个应用程序来执行你的长时间运行的进程。如果你在 Linux 上,那就意味着编写一个守护进程,它可以托管你想要在后台连续运行的线程,因为这就是他们的目的。

您必须为工作使用正确的工具。

【讨论】:

  • “你必须是适合这项工作的工具。” - 没必要侮辱这个人:)
  • +1 虽然当然可以使用 ASP.NET 来处理像这样的任务(StackOverflow 过去很长一段时间),但对于关键任务任务来说它不够可靠。
  • 那有点蹩脚(请参阅我的 cmets 到我的问题)。当然,许多构建的站点都需要线程来管理队列和内存。为什么 asp.net 不允许我在我的 asp.net 项目中为此编写代码:(
  • “许多网站”以正确的方式做事,不要将 ASP.NET 用于不适合的事情。
【解决方案2】:

看看这个帖子:How to migrate a .NET Windows Service application to Linux using mono?我希望它能让你朝着正确的方向前进 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 2018-01-11
    相关资源
    最近更新 更多