我有一个在域服务帐户上下文中运行的Windows服务,它使用SQL Server数据库进行通信。它每隔10分钟运行一次,并且每次都与数据库通信。
我曾多次遇到这样的情况:它会连续运行数天,然后我发现服务停止了,因为抛出了异常。
查看日志,我发现:
消息:“底层提供程序在打开时失败。”
堆栈跟踪:在System.Data.Entity.Core.EntityClient.EntityConnection.Open()...
内部异常是:
消息:“在建立与SQL Server的连接时发生与网络相关或特定于实例的错误。无法找到服务器或无法访问服务器。请验证实例名称是否正确,并确认SQL Server已配置为允许远程连接。(提供程序:SQL Network Interfaces,错误:26 - 无法定位服务器/实例指定)”
堆栈跟踪:在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)...
我可以将Windows服务设置为在停止后自动重新启动。但我想找到潜在的问题。我还考虑过连接弹性, 但这可能会导致问题,因为如果服务器名称不正确,则在安装服务时也可能出现此错误。换句话说,它可能会一直重试错误的连接名称。
我设置了DebugDiag并针对转储文件运行了分析,它给出了以下建议:
请与供应商Microsoft Corporation跟进以下文件的问题解决方案: C:\Windows\assembly\NativeImages_v4.0.30319_64\mscorlib\ce681fb89786c8f11e99ae5f8e9588ab\mscorlib.ni.dll。
我曾多次遇到这样的情况:它会连续运行数天,然后我发现服务停止了,因为抛出了异常。
查看日志,我发现:
消息:“底层提供程序在打开时失败。”
堆栈跟踪:在System.Data.Entity.Core.EntityClient.EntityConnection.Open()...
内部异常是:
消息:“在建立与SQL Server的连接时发生与网络相关或特定于实例的错误。无法找到服务器或无法访问服务器。请验证实例名称是否正确,并确认SQL Server已配置为允许远程连接。(提供程序:SQL Network Interfaces,错误:26 - 无法定位服务器/实例指定)”
堆栈跟踪:在System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)...
我与管理SQL Server的DBA核实过,当出现错误时,服务器正在运行且没有相关日志表明停机或网络连接丢失。
该Windows服务使用.NET 4.5和Entity Framework 6构建,并使用以下连接字符串:
<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。