【发布时间】: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