c# – 实现Windows服务 – 如何满足这些要求?
我正在寻找一些关于实现
Windows服务的一般建议.我的要求如下:
>服务处理来自数据库的行 – 因此,如果存在具有特定状态的行,则需要执行一些工作,写入其他一些表,然后将该行标记为正在处理. 所以我的具体问题是: >如何保持活着并在写入新行时对其进行响应?我可以使用某种SQLDependency对象来有效地处理新行吗? 谢谢你的建议. PS.有没有其他合理的替代方法来使用Windows服务来实现这一目标? 解决方法
编写Windows服务并不是那么困难,但最初确实看起来令人生畏.
就清除业务逻辑而言,我通常会首先编写一个命令提示程序,因为调试起来要容易得多. 现在,关于服务.当然,使用Visual Studio创建Windows服务项目.
好吧,我不确定你是否可以,但我可以告诉你你需要什么.你需要一个线程.如果您未在OnStart事件中创建新线程,您的服务将立即停止.这个线程可以直接使用.NET的许多线程mechinisim创建,也可以通过某种类型的Timer,FileSystemWatcher(可能不适用于你)或其他类似的间接创建.
您可以在OnStop中执行此操作.你可以通过信号通过一个全局变量发信号通知你是时候关闭了.然后,由您的线程及时通知信号并清理并退出线程.如果您处于可能需要20秒以上的事情中间,则需要告诉SCM(服务控制管理器)您需要更多时间.如果你不这样做,那么停止服务的用户就会收到消息说服务没有响应,最终会被杀死.
这是一个商业决策.可能应该取决于每个处理过程需要多长时间,以便在发生停止时您可以及时.
同样,这是一个商业决策,但是,我可能会保持同步.
嗯,一切都取决于. SQL Server是否在同一个盒子上?您使用的是Windows身份验证吗?如果SQL不在同一个框中,则必须使用用户帐户或网络服务.创建服务项目时,需要添加安装程序.创建项目后,您将获得一个Component Class – 在灰色屏幕上,右键单击并选择Add Installer.这将创建一个新的Component Class,其中已安装了两个模块. serviceIntaller1具有服务名称,显示名称和描述以及启动类型(手动,自动等).另一个是serviceProcessInstaller1,您可以在此决定使用哪个登录帐户.
呃,可能.但今天早上我还没喝咖啡. 实际上,最重要的是计划如何保持线程活跃并响应最终的OnStop请求.例如,如果您要尝试使用SqlDependency类,则可能需要在OnStart中创建Manual或AutoResetEvent,启动您的线程并让您的线程设置SqlDependency然后阻止重置事件.然后,在您的OnStop中释放您的重置事件,以便您的线程可以清理并离开.在那之后,它只是一个滑冰山! 玩得开心! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |