Windows服务上的间歇性错误:基础提供程序在打开时失败
本文关键字:程序 失败 服务 错误 Windows | 更新日期: 2023-09-27 18:28:54
我有一个Windows服务在域服务帐户的上下文下运行,该帐户使用与SQL Server数据库通信。它每10分钟运行一次,每次都与数据库通信。
我有过多次这样的情况,它会运行一天,然后我发现服务停止了,因为抛出了异常。
查看日志我发现:
消息:基础提供程序在打开时失败。
堆栈跟踪:在System.Data.Entity.Core.EntityClient.EntityConnection.Open()…
内部例外:
消息:在建立与SQL Server的连接。找不到服务器或无法访问。验证实例名称是否正确,以及SQL Server已配置为允许远程连接。(提供程序:SQL网络接口,错误:26-定位服务器/实例时出错指定)
堆栈跟踪:在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection,操作`1 wrapCloseInAction)。。。
我与管理SQL Server的DBA核实了一下,当错误发生时,服务器已经启动并运行,日志中没有任何相关信息表明停机或网络连接丢失。
Windows服务是使用实体框架6使用.NET 4.5构建的。它使用以下连接字符串:
<add name="AmceContext"
connectionString="data source=ServerName'InstanceName;initial catalog=DbName;integrated security=SSPI;MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient" />
我可以将Windows服务设置为在停止时自动重新启动。但我想找出根本问题。我也考虑过连接弹性,但这可能会导致问题,因为如果服务器名称不正确,在安装服务时也可能发生此错误。换句话说,它可能会不断重试一个错误的连接名称。
我设置了DebugDiag并对转储文件进行了分析,它给了我以下建议:
请与供应商Microsoft Corporation跟进问题关于以下文件的决议:C: ''Windows''assembly''NativeImages_v4.0.30319_64''mscorlib''ce681fb89786c8f11e99ae5f8e9588ab''mscorlib.ni.dll.
这很可能是网络问题。我最好的建议是,你和你所在组织的网络人员一起工作,弄清楚是否存在一些潜在的间歇性网络问题。
在您的情况下,一个可能有效也可能无效的解决方法是尝试直接连接到DB服务器的IP和端口。
有关解决此问题的详细信息,请访问以下MSDN博客:http://blogs.msdn.com/b/sql_protocols/archive/2007/05/13/sql-network-interfaces-error-26-error-locating-server-instance-specified.aspx