我目前正在编写一个Windows服务,其唯一目的是轮询数据库,并根据结果信息更新其他一些数据。我把它写成Windows服务,因为它似乎是一个理想的平台。我不需要任何用户互动。
然而,在开发它时,我注意到一两个问题使开发Windows服务更耗时,开发一个简单的Windows应用程序。有没有人有这种选择的经验?这种应用程序的最佳实践是什么?有什么理由可以使用Windows服务吗?
答案 0 :(得分:5)
服务提供的功能远远超出了发展问题。远程轮询,无需用户登录,内置故障恢复和监控。
答案 1 :(得分:1)
我刚刚完成了我的第一项服务,发现它们不太容易调试或测试。您可以安装并启动该服务,然后将调试器附加到该进程。或者您可以将服务作为控制台应用程序运行,以测试功能。像这样http://tech.einaregilsson.com/2007/08/15/run-windows-service-as-a-console-program/
您的电话是否优先选择服务。重新列出了良好的服务理由。根据您的描述,这听起来像某个SQL的计划任务可以完成您想要的任务。
答案 2 :(得分:1)
要直接在visual studio下调试Windows服务,请将此代码段添加到Main()下的服务设计器类中。
Shared Sub Main()
#If DEBUG Then
Dim service As New YourServiceClass
service.Execute()
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite)
#Else
Dim ServicesToRun() As System.ServiceProcess.ServiceBase
'More than one NT Service may run within the same process. To add
'another service to this process, change the following line to
'create a second service object. For example,
ServicesToRun = New System.ServiceProcess.ServiceBase() {New YourServiceClass}
System.ServiceProcess.ServiceBase.Run(ServicesToRun)
#End If
End Sub
这是vb.net代码,但C#应该做同样的伎俩。我已经管理了几个这样的Windows服务,没有任何问题。如果debug应该以hash开头。
答案 3 :(得分:0)
您应该注意的一件事是服务将无法使用视频硬件加速。如果您没有进行任何图形工作,那么您可以放心地忽略该限制,但如果您有图形密集型操作(例如WPF相关),您必须牢记这一点。
我承认这不是一个常见的场景,但我参与了一个服务呈现WPF控件的项目。
原因是 Session0隔离,描述为here。