C# 持续运行的C代码-服务还是独立线程?

C# 持续运行的C代码-服务还是独立线程?,c#,html,multithreading,web-services,entity-framework,C#,Html,Multithreading,Web Services,Entity Framework,我有一个.NET4Web应用程序,它有3个独立的相关项目——DAL、BAL和UI。我使用实体框架进行数据库交互 我有一段代码,它循环遍历一组数据库数据,根据找到的内容调用方法,然后更新数据库。我想让这段代码一直运行。同时,我希望用户能够在后台代码持续运行的同时登录并运行报告等 什么是解决这个问题的好方法?我是为持续运行的代码创建服务,还是为持续运行的代码创建一个单独的线程、一个完全独立的项目,还是一种不同的方法 另外,根据给出的答案,我如何启动持续运行的代码?i、 e.只是通过表单加载方法还是有

我有一个.NET4Web应用程序,它有3个独立的相关项目——DAL、BAL和UI。我使用实体框架进行数据库交互

我有一段代码,它循环遍历一组数据库数据,根据找到的内容调用方法,然后更新数据库。我想让这段代码一直运行。同时,我希望用户能够在后台代码持续运行的同时登录并运行报告等

什么是解决这个问题的好方法?我是为持续运行的代码创建服务,还是为持续运行的代码创建一个单独的线程、一个完全独立的项目,还是一种不同的方法


另外,根据给出的答案,我如何启动持续运行的代码?i、 e.只是通过表单加载方法还是有更好的方法?我当前通过单击开始按钮来启动代码;这适用于测试,但在生产中不起作用。

您最适合用于始终运行的任务


在IIS下的单独线程上运行代码不是一种可靠的机制,因为IIS可以随意终止线程以节省服务器资源。

使用Windows服务。还应该考虑使用存储过程进行您提到的数据库交互。在启动Windows服务方面,您可以将其设置为自动启动(操作系统启动时),这意味着它将一直运行到终止。

我只建议Windows服务始终运行。但是,“始终”通常是指每x秒/分钟/小时/天

如果x大于几分钟,我将使其成为一个控制台应用程序,并通过Windows任务调度器运行它。这样,您就不必担心内存泄漏和一系列其他问题


但是,如果它只处理数据库,我建议使用存储过程和Sql作业。

鉴于您的问题和对其他答案的澄清:

  • 您的解决方案在无法安装服务的托管环境中运行
  • 从第三台服务器(即Azure或类似服务器)调用它不是您的选择 您最好在应用程序启动事件中启动一个线程来管理数据库工作。您可能希望确保该线程有一定的周期性空闲时间,以避免占用托管环境的太多时间,并确保在应用程序结束或重新启动时关闭该线程


    服务确实是最佳选择,但如果您在托管环境中,不能/不会使用其他服务器,则这是不可能的。

    与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。看见如果线程的唯一目的是数据库交互,而DBMS是SQL Server,那么您可能需要考虑将其实现为使用实体框架的@ MPEKEY OP——NET框架CLR中不支持实体框架。看见它必须转换为纯ADO.NET。@SliverNinja-OP没有指定后台线程需要使用实体框架。也许ASP.NET站点的DAL部分应该使用实体框架。您也可以将服务设置为自动启动。还要确保访问代码握手,并确保服务在神奇发生之前启动。创建Windows服务是否会影响web托管选项。假设我希望GoDaddy托管我的应用程序。我可以在他们的web服务器上安装windows服务吗?如果您使用GoDaddy,则必须远程托管该服务-请参阅。您应该考虑迁移到。在Azure下设置web角色+工作者角色+SQL DB将为您解决此问题。Windows Azure目前不是一个选项。如果可能的话,我希望有一个解决方案能够与我目前拥有的解决方案配合使用。要获得可靠的性能,您必须远程运行windows服务,或者切换到以获得对远程计算机的管理员级别访问权并安装服务。