内部连接致命错误

Nez*_*eli 11 .net sql-server

我最近开始收到此错误:来自我的应用程序的"内部连接致命错误".错误随机发生.当它发生时,我的应用程序在接下来的几分钟内无法使用.

在仔细分析错误之后,我得出结论,这个错误只发生在我的应用程序中的一个方法中.此方法触发一系列简单的普通SQL查询,但它确实涉及多线程,但是所有线程都应该在此代码块之前处理.始终在特定SQL查询上发生错误.为了测试我已经消除了这个查询,这导致在下一行查询中发生错误.

这是堆栈strace:

Internal connection fatal error.

-------------- Stack trace ---------------
   at Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicyEntry.IntentionalRethrow(Exception chainException, Exception originalException)
   at Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicyEntry.RethrowRecommended(Exception chainException, Exception originalException)
   at Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicyEntry.Handle(Exception exceptionToHandle)
   at Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicyImpl.HandleException(Exception exceptionToHandle)
   at Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicy.HandleException(Exception exceptionToHandle, String policyName, ExceptionPolicyFactory policyFactory)
   at Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicy.HandleException(Exception exceptionToHandle, String policyName)
   at Base.Sql.ExecuteScalar()

应用程序基于.NET 3.5构建,显然它使用企业库数据访问.应用程序在Win2003终端服务器上运行,它使用的是不同服务器上的Sql Server 2005数据库.

导致此错误的方法不是从GUI触发,而是从命令行触发,如果它具有任何意义.

如果有人建议从这里去哪里,我将非常感激.

NG.*_*NG. 10

我遇到了类似的问题,并在这个问题上投入了相当多的时间.因此,您需要逐个检查以下所有内容.

  1. 在调用存储过程之前,您可能已经保留了一些与数据库的开放连接.
  2. 调用SqlDataReader.Close()或SqlDataReader.Dispose()时会出现此异常 - 可以使用SqlConnection.Close()而不是SqlDataReader.Close()来修复它.
  3. 删除临时文件夹?
  4. 查看IIS服务器对临时端口的使用情况.默认最大值 可用的端口通常为4000.如果您的应用程序正在进行大量数据库调用,则可以增加它.

如果没有帮助,请告诉我.我可能有机会学到新东西.


Chr*_*ray 7

像这样的奇怪错误通常是对非线程安全的对象进行多线程访问的结果.

我认为这里有一些问题.

  • 跨线程重用开放连接.
  • 跨线程重用sql客户端对象.
  • 没有正确关闭打开的连接 - 你用一个连接创建连接using吗?

提供代码示例,我们也许能够发现问题......


Cob*_*ger 6

对于 .NET Core 2.0 或更高版本,当 .csproj 文件中有以下内容时,也可能会发生该错误:

 <ItemGroup>
   <RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" /> 
 </ItemGroup> 
Run Code Online (Sandbox Code Playgroud)

根据文档,此选项“使您能够消除应用程序对全球化数据和全球化行为的依赖”。除了较小的文件大小之外,我不知道这样做有什么好处,但 SqlConnection 不能使用它。

  • 可能是旧回复,但这条线索帮助我修复了新的 .NET 8 应用程序的此错误。从 .csproj 文件中删除 &lt;InvariantGlobalization&gt;true&lt;/InvariantGlobalization&gt; 解决了该问题。 (5认同)
  • 此问题刚刚在 .NET 8 WebApi 项目模板中返回。我花了两天的时间进行调试和研究,结果发现.NET 8 WebApi 项目的默认模板将 InvariantGlobalization 设置为 true。这使得 SqlConnection 毫无用处,从而导致神秘的内部排序错误。非常难以弄清楚! (3认同)