gpt4 book ai didi

.net - 服务在引导时启动时数据库连接不起作用,但在手动启动时起作用

转载 作者:行者123 更新时间:2023-12-04 20:03:30 27 4
gpt4 key购买 nike

我正在尝试找出导致我的应用无法连接到数据库服务器的可能原因。

我有一个 Windows 服务,它在启动时连接到数据库。该服务在具有可靠有线网络连接的机器上运行。它与启动自动一起安装,因此通常它会在 Windows 启动时启动,并且在几乎所有情况下都可以正常工作。

但是,对于一组 XP 机器(我无法控制),当服务随 Windows 一起启动时,数据库连接失败。引发标准异常:

System.Data.SqlClient.SqlException: An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

在这些机器上,如果用户登录并手动启动服务,它会正确连接到数据库,这很奇怪。所以我猜 Windows 启动时的问题是:

  • 服务在网络连接之前启动
  • 服务在机器可以连接到 DNS 以解析服务器名称之前启动(如果数据库服务器名称是这样解析的)
  • 机器上有最初阻止传出连接的策略/防火墙/等
  • 别的……

当用户手动启动服务时不会出现该问题,因此一定发生了一些事情来解决该问题。我想这可能是一个在启动时运行但在我的服务启动时尚未完成的进程,或者是用户已登录的事实 - 可能是他们的登录脚本中的某些内容。

我无法直接访问这些机器,因此需要想出一个好主意,了解问题可能是什么,以及确定问题是否正确的方法。我无法重复部署诊断程序,因此第一次需要彻底。

所以第一个问题是:有人知道可能导致这种情况的桌面策略、网络策略或软件吗?第二个问题:我能做些什么来准确诊断正在发生的事情?

我正在考虑创建一个新的诊断服务,该服务也将安装为自动启动,并将执行各种操作以查看发生了什么,并记录此信息。例如:

  • 运行“ipconfig/all”(查看是否有网络连接)
  • 通过IP地址ping数据库服务器(看是否能找到服务器)
  • 按名称 ping 数据库服务器
  • 检查包含服务器名称的 HKLM 注册表项(以防 HKLM 注册表稍后更新)
  • 创建到数据库的 sql 连接(以了解它何时开始工作)
  • 每隔几秒重复这些步骤。

我将安装此服务,重新启动机器,然后在一段时间后让用户登录。诊断应该会显示一些有用的信息...但是有人有更好的主意或其他建议吗?

我也曾尝试将服务更改为以具有适当权限的用户帐户运行,但这并没有解决问题。请注意,本地系统帐户确实有足够的权限连接到数据库服务器,因为该服务在手动启动时工作正常。所以它与 this question 不同.

更新:有问题的机器正在运行 Win XP。

更新:this article对错误代码 26 进行了很好的讨论

最佳答案

这些机器上是否可能安装了某种防火墙,但在您的服务启动时尚未启动?我遇到过一些情况,软件防火墙将完全锁定互联网连接,直到服务完全启动并且它可以正确监控流量 - 如果是这种情况,并且您的服务启动速度比防火墙快,您可以看到什么在您的应用程序看来是一个断开连接的网络。

关于.net - 服务在引导时启动时数据库连接不起作用,但在手动启动时起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/687489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com