c# - Windows 服务 : The underlying provider failed on Open 上的间歇性错误

标签 c# .net sql-server entity-framework windows-services

我有一个 Windows 服务在域服务帐户的上下文中运行,该帐户使用它与 SQL Server 数据库进行通信。它每 10 分钟运行一次,每次都与数据库通信。

我有好几次它会运行几天,然后我发现服务停止了,因为抛出了异常。

查看我发现的日志:

Message: The underlying provider failed on Open.

Stack Trace: at System.Data.Entity.Core.EntityClient.EntityConnection.Open() ...

有一个内部异常(exception):

Message: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

Stack Trace: at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) ...

我与管理 SQL Server 的 DBA 进行了核实,发现错误发生时服务器已启动并正在运行,并且日志中没有任何相关信息表明停机或网络连接丢失。

Windows 服务是使用 Entity Framework 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 服务设置为在停止时自动重新启动。但我想找到根本问题。我也想到了Connection Resiliency但这可能会导致问题,因为如果服务器名称不正确,则在安装服务时也会发生此错误。换句话说,它可以继续重试错误的连接名称。

我设置了 DebugDiag 并对转储文件进行了分析,它给了我以下建议:

Please follow up with vendor Microsoft Corporation for problem resolution concerning the following file: C:\Windows\assembly\NativeImages_v4.0.30319_64\mscorlib\ce681fb89786c8f11e99ae5f8e9588ab\mscorlib.ni.dll.

最佳答案

这很可能是网络问题。我最好的建议是您与组织中的网络人员合作,找出是否存在一些潜在的间歇性网络问题。

一种可能适用于您的情况的解决方法是尝试直接连接到数据库服务器的 IP 和端口。

可以在以下 MSDN 博客上找到有关解决此确切问题的更多信息:http://blogs.msdn.com/b/sql_protocols/archive/2007/05/13/sql-network-interfaces-error-26-error-locating-server-instance-specified.aspx

关于c# - Windows 服务 : The underlying provider failed on Open 上的间歇性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26722818/

相关文章:

mysql - 选择sql中在一个属性上具有最大值且小于另一属性的记录

c# - 使用 C++ 创建 Windows Phone 8 GUI

c# - WPF RichTextBox 获取字符矩形

c# - 删除列表中包含另一个名称的名称

c# - GetHashCode 是线程安全的吗?

c# - process.start() 嵌入式 exe,无需首先提取到文件 c#

c# - 从 KeyData 中提取 KeyCode

c# - 关闭文件夹/命名空间约定

c# - 反转 SQL Server 中列的内容

sql-server - 在位置索引中查找二元组