【问题标题】:Intermittent Error on Windows Service: The underlying provider failed on OpenWindows 服务上的间歇性错误:底层提供程序在打开时失败
【发布时间】:2014-12-30 14:46:20
【问题描述】:

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

我曾多次在一天内运行数天,然后我发现服务停止了,因为抛出了异常。

查看我找到的日志:

消息:底层提供程序在打开时失败。

堆栈跟踪:在 System.Data.Entity.Core.EntityClient.EntityConnection.Open() ...

内部例外:

消息:发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/实例时出错 指定)

堆栈跟踪:在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔型 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 服务设置为在停止时自动重新启动。但我想找到根本问题。我也想到了Connection Resiliency,但这可能会导致问题,因为如果服务器名称不正确,安装服务时也可能出现此错误。换句话说,它可能会不断重试错误的连接名称。

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

请与供应商 Microsoft Corporation 联系以解决问题 关于以下文件的决议: C:\Windows\assembly\NativeImages_v4.0.30319_64\mscorlib\ce681fb89786c8f11e99ae5f8e9588ab\mscorlib.ni.dll。

【问题讨论】:

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


    【解决方案1】:

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

    在您的情况下可能有效也可能无效的解决方法是尝试直接连接到数据库服务器的 IP 和端口。

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

    【讨论】:

    • 奇怪的是消息“错误定位服务器/指定的实例”——你会认为这是一个超时问题。
    猜你喜欢
    • 2011-01-29
    • 1970-01-01
    • 2018-01-20
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多