【发布时间】:2020-02-20 11:12:15
【问题描述】:
我有这个 Windows 服务(使用 SqlDependency),它每次启动时都会向我发送一封电子邮件,并且每次在我的销售表中插入新行时(数据库启用了 Service Broker)。
我还写了一个日志文件来注册服务启动时,数据插入到表中,邮件是否成功发送以及服务停止时。
- 当我手动启动服务时,它运行良好。
- 然后我关闭了我的电脑,然后再次打开并在我的表中插入了数据 在数据库中,但什么也没发生(没有发送电子邮件,也没有 在我的日志文件中注册)。
- 我手动重新启动了服务,它又可以正常工作了。
- 关闭并再次打开电脑,没有任何反应。
- 我做了一些研究并将初始化类型更改为自动 并再次尝试。然后什么也没发生。
- 我将初始化类型更改为自动延迟并尝试 再次。但它也不起作用,即使在我打开电脑 1 小时后也是如此。
- 现在我手动重启了服务并且日志文件注册了 服务停止并启动,我收到了该服务的电子邮件 开始,在我在我的数据库表中插入数据后,两个日志 注册和电子邮件工作正常。
每次它不起作用时,我检查了 Windows 中的服务管理器,它被标记为“正在运行”。
我不知道我是否需要在我的代码或我的服务属性中配置一些不同的东西。 有人遇到过这个问题吗?
编辑
我修改了我的服务并包含了一个计时器,因此每过一分钟它就会在我的日志文本文件中写入时间。重启电脑后,日志文件继续每分钟记录时间,但没有记录我在数据库表中所做的插入。
我的猜测是,当 PC 重新启动时,服务可能会丢失数据库连接,因此SqlDependency 无法检测到更改。这有意义吗?
【问题讨论】:
-
与编程无关。我们有一个单独的数据库管理站点 (dba.stackexchange.com)
-
抱歉,我认为我必须在代码中进行一些更改才能使其正常工作。谢谢!
-
记录您的服务执行。如果它被标记为正在运行,它应该至少执行一些序列。也许服务执行在某些部分崩溃,因为某些 Windows 部分尚未初始化。例如工作网络连接、数据库服务器尚未启动等
-
@MichalZhradnkNono3551 我目前正在制作一个日志文件(在代码执行期间,它会在文本文件中写入一些我确定的消息)。还有其他方法可以记录吗?
-
@Gabic 还有很多其他方法,但文件日志应该足以发现问题。也许您还应该检查 Windows 中的事件查看器以获取一些信息。但是由于您的服务没有崩溃并且仍在运行,您可能找不到您要查找的内容。
标签: c# windows-services service-broker sqldependency