我需要在.NET中创建一个服务,在内存中维护(内部)状态,生成多个线程并且通常是长时间运行的。有很多选择 -
我真的不知道选哪个。大多数功能都在此服务使用的库中,因此服务本身非常简单。
一方面,服务主机尽可能接近“简单工作”非常重要,这不包括Windows服务。另一方面,重要的是主服务不会因为没有外部活动而取消服务,这使得WCF变得“可怕”。至于WF,它最强烈的卖点是能够创建流程,嗯......,工作流程,这是我不需要也不想要的。
总而言之,过多的微软技术让我有些困惑。
对于.NET中有状态,长期运行的服务问题,我非常感谢每个解决方案(或其他我未提及的)的优缺点
谢谢,
阿萨夫
P.S。,
我正在使用.NET 4。
编辑:
感谢迄今为止的所有回复! 阿萨夫。
编辑2:
我将使用Windows服务,并可能在其中托管WCF服务,以允许其他进程与之通信。
谢谢,
阿萨夫
答案 0 :(得分:7)
根据您的描述,您最好的选择是#1,Good Old Windows Service。您可以为其分配工作,它可以根据需要运行,并且可以生成线程。不确定“简单工作”是什么意思,或者为什么Windows服务不能正常运行。
您也可以制作一个简单的控制台应用程序,但您必须自己处理管理(重启等)。
WCF本质上是基于Web的远程处理,它本身不处理长时间运行的进程。 Workflow Foundation可以处理长时间运行的工作流,但仅限于此。
答案 1 :(得分:3)
根据你的要求“(内部)状态在内存中,产生多个线程并且通常是长时间运行的”有两种选择:
提到的其他两个是这些的衍生物。第一个太原始了,让我们忘记这一点。但为了便于调试,我建议在Main
检查Environment.UserInteractive
,如果是,则以控制台应用程序运行,否则作为服务运行。所以你的选择应该是第二名。
WCF是通信框架,对长时间运行的服务一无所知。 IIS可以托管WCF应用程序,但是没有多线程和内存数据,它是作为Web服务的单个调用。 WF是工作流框架,并且对服务一无所知。它可以帮助实现复杂的流逻辑。
WCF和WF都可以在Windows服务中使用。
答案 2 :(得分:2)
由于您似乎不需要任何与工作流程相关的功能,我的投票结果是WCF中的Durable Services。这是.NET 3.5中的新功能,它允许WCF服务器将其状态保存到基于提供程序的“持久性存储”,通常是SQL Server后端数据库(但也有基于文件系统的提供程序,并且它是可扩展的 - 您可以编写如果需要你自己的。)
查看有关此主题的一些优秀博文:
WCF是一个功能强大的强大通信库,可以让您从头开始创建所有这些内容时,免除了许多麻烦和细节。
WCF可以在IIS中托管(具有所有缺陷),或者您可以将WCF服务粘贴到Windows NT服务中,并在计算机启动时启动并运行,而无需任何人登录。
答案 3 :(得分:1)
我会建议好的ol服务。为了这些目的,我已经使用C#编写了许多服务。它们可以产生线程,运行永恒,并且设计得很好,可以做你想要的。您可以在Visual Studio中创建.net Windows服务。它是.net项目类型之一。
WCS和WCF都会做你想要的,但需要一些额外的工作,而且真的不是为你想要做的设计的。
答案 4 :(得分:0)
似乎没有你想要的选项那么多! ; P
编辑我的第一选择也是Windows服务,但通过调度程序更简单。
答案 5 :(得分:0)
也许看看Quartz.Net?它更像是一个调度程序,但你可以在多个线程上启动作业等。我使用它而不是Windows服务取得了巨大的成功。