.NET中长时间运行的有状态服务

weylhg0b  于 2023-04-13  发布在  .NET
关注(0)|答案(6)|浏览(137)

我需要在.NET中创建一个服务,该服务在内存中维护(内部)状态,产生多个线程,并且通常是长时间运行的。有很多选项-

  • Windows服务
  • Windows通信服务
  • Windows工作流基础

我真的不知道该选择哪一个。大多数功能都在这个服务使用的库中,所以服务本身相当简单。
一方面,服务主机尽可能接近“简单工作”是很重要的,这不包括Windows服务。另一方面,服务不会因为没有外部活动而被主机关闭也是很重要的,这让WCF有点“可怕”。至于WF,它最大的卖点是创建流程的能力,嗯......,工作流,这是我不需要也不想要的
总而言之,过多的微软技术让我有点困惑。

对于.NET中长时间运行的有状态服务的问题,我希望能就每个解决方案(或其他我没有提到的解决方案)的优缺点提供帮助

谢啦
阿萨夫
另外
我用的是.NET 4。

编辑:

  • 我所说的主机“简单地工作”的意思是,例如,如果我创建的服务崩溃,它将被重新激活。
  • 我想这个问题的原因是我过去创建了Windows服务(我认为它是用普通的C++和Win32 API),如果有这样的事情,我不想错过一些更简单的东西。

感谢所有的答复到目前为止!
阿萨夫

编辑2:

我将使用一个Windows服务,并可能在其中托管一个WCF服务,以允许其他进程与之通信。
谢啦
阿萨夫

omqzjyyz

omqzjyyz1#

根据您的描述,您最好的选择是#1,一个好的旧Windows服务。您可以将工作分配给它,它可以运行任何时间,并且可以生成线程。不知道您所说的“简单工作”是什么意思,或者为什么这会使Windows服务无法运行。
或者,你可以做一个简单的控制台应用程序,但你必须自己处理管理(重启等)。
WCF本质上是Web上的.NET远程处理,它本身不能处理长时间运行的流程。Workflow Foundation可以处理长时间运行的 * 工作流 *,但仅此而已。

5m1hhzi4

5m1hhzi42#

根据您的要求“内存中的(内部)状态,产生多个线程并且通常长时间运行”,实际上有两个选项:
1.控制台应用程序

  1. Windows服务
    其他两个提到的是这些的衍生。第一个太原始,让我们忘记这一点。但为了便于调试,我建议在Main检查Environment.UserInteractive,如果真的运行作为控制台应用程序,否则作为服务。所以你的选择应该是第二。
    WCF是一个通信框架,与长时间运行的服务无关。IIS可以托管WCF应用程序,但没有多线程和内存数据,它是作为Web服务的单次调用。WF是一个工作流框架,也与服务无关。它可以帮助实现复杂的流程逻辑。
    WCF和WF都可以在Windows服务中使用。
ars1skjm

ars1skjm3#

既然你似乎不需要任何与工作流相关的功能,我的投票就投给了WCF中的持久服务。这是.NET 3.5中的新功能,它允许WCF服务将其状态持久化到基于提供程序的“持久化存储”中,通常是SQL Server后端数据库(但也有一个基于文件系统的提供程序,它是可扩展的-如果需要,你可以编写自己的)。
查看关于此主题的一些优秀博客文章:

WCF是一个伟大而强大的通信库,它使您从从头开始创建所有这些时必须处理的许多麻烦和细节中解脱出来。
WCF可以托管在IIS中(尽管有其所有缺陷),或者您可以将WCF服务粘贴到Windows NT服务中,并在机器引导时启动和运行它,而无需任何人登录。

bxgwgixi

bxgwgixi4#

我建议使用好的ol windows服务。我已经使用C#编写了许多服务,用于这些目的。它们可以产生线程,永久运行,并且设计得很好,可以做你想做的事情。你可以在Visual Studio中创建一个.net windows服务。它是.net项目类型之一。
WCS和WCF都可以做你想做的事情,但需要一些额外的工作,而且实际上并不是为你想做的事情而设计的。

kpbwa7wx

kpbwa7wx5#

1.尽可能“简单地工作”-这不包括Windows服务...
1.由于不活动而未被取下...可怕- WCF...
1.不需要工作流,也不想要它-工作流基金会...
似乎没有你想相信的那么多选择!P

  • 那么一个简单的EXE来完成这项工作,并且通过Windows任务计划程序进行计划呢?您可以从应用程序内部管理多线程。这将与控制台应用程序一样简单。
    编辑我的第一选择也是Windows服务,但通过调度程序更简单。
uxhixvfz

uxhixvfz6#

也许可以看看Quartz.Net?它更像是一个调度程序,但你可以在多个线程上启动作业等。我用这个代替了Windows服务,取得了巨大的成功。

相关问题