代码之家  ›  专栏  ›  技术社区  ›  Paul Michaels

Windows服务与Winforms/WPF桌面应用

  •  1
  • Paul Michaels  · 技术社区  · 15 年前

    Im目前正在编写一个windows服务,它的唯一目的是轮询数据库,并根据结果信息更新一些其他数据。我将此作为windows服务编写,因为它看起来是一个理想的平台。我不需要任何用户交互。

    然而,在开发它的时候,我注意到一两个问题,使得开发windows服务比开发简单的windows应用更加耗时。有人对这种选择有经验吗?这种应用程序的最佳实践是什么?有什么原因可以说明为什么最好使用windows服务吗?

    4 回复  |  直到 15 年前
        1
  •  5
  •   SwDevMan81    15 年前

    imoho的开发问题远未被服务提供的特性所权衡。远程轮询,无需用户登录,内置故障恢复和监控。

        2
  •  1
  •   nportelli    15 年前

    我刚做了我的第一次服务,并注意到他们不太容易调试或测试。您可以安装并启动服务,然后将调试器附加到进程。或者您可以将该服务作为控制台应用程序运行,以便测试功能。像这样的东西 http://tech.einaregilsson.com/2007/08/15/run-windows-service-as-a-console-program/

    服务是否可取是你的决定。重新运行列出了提供服务的好理由。根据您的描述,听起来像是某个SQL的预定任务将完成您想要的任务。

        3
  •  1
  •   ChrisF    15 年前

    若要直接在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服务,没有任何问题。如果调试之前应该有一个哈希。

        4
  •  0
  •   Francesco De Vittori    15 年前

    有件事你应该知道 服务将无法使用视频硬件加速 . 如果你没有做任何图形化的工作,那么你可以安全地忽略这个限制,但是如果你有图形化的密集型操作(例如与WPF相关的操作),你必须记住这一点。

    我承认这不是一个常见的场景,但我在一个项目中工作过,其中一个服务提供了WPF控件。

    原因是 ,描述的 here .