接收错误 Error: 18059, Severity: 20, State: 1 in the SQL Logs

Ron*_*red 5 sql-server-2008 errors

我正在使用 SQL Server 2008 Sp3

最近我在 SQL 日志中遇到错误:

错误:18059,严重性:20,状态:1
。连接已被删除,因为打开它的主体随后假定了一个新的安全上下文,然后尝试在其模拟的安全上下文下重置连接。不支持此方案。请参阅联机丛书中的“模拟概述”。

我通过 Profiler 找到了相关的原始服务器和应用程序。

我搜索并发现有人说我需要更改应用程序连接字符串中的连接池

以下是相关Web.Config文件:

<?xml version="1.0"?>
<appSettings>
    <add key="Main.ConnectionString" value="Data Source=db-002\db2;Initial   
Catalog=APPDB;TRUSTED_CONNECTION=YES"/>
    <add key="ConnectionHash" value="==QMr1meolHO3YWdTNFOzcTO"/>
    <add key="Database" value="[APPDB]"/>
    <add key="UseApprole" value="True"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

我在我们的测试环境中将其更改为以下内容:

<?xml version="1.0"?>
<appSettings>
    <add key="Main.ConnectionString" value="Data Source=db-002\db2;Initial 
Catalog=APPDB;TRUSTED_CONNECTION=YES;Pooling=false"/>
    <add key="ConnectionHash" value="==QMr1meolHO3YWdTNFOzcTO"/>
    <add key="Database" value="[APPDB]"/>
    <add key="UseApprole" value="True"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)

我已经重置了应用程序、服务和 IIS。检查应用程序,它的工作原理。

有一段时间我没有再收到这些错误,但 3 小时后它们又恢复了。

谁能给我一个想法我能做什么?

RLF*_*RLF 1

Roni Vered 在 2013 年提到的帖子并没有说只是简单地说:“更改应用程序连接字符串中的连接池。

文本中指出,使用“应用程序角色……与连接池”存在问题。答案是:关闭连接池。

这可以通过在应用程序的连接字符串中包含“ ; Pooling=False ”来完成。

这在 2000 年代中期就发挥了作用。如果您仍在使用 SQL Server 2008,它可能仍然适合您。

原始帖子的不再正确的路径是:http://forums.microsoft.com/MSDN/ShowPost.aspx ?PostID=473777&SiteID=1

2007 年建议的解决方法:在每次调用时,如果 approle 已在使用中,则再次跳过 approle 的设置。示例代码:

IF NOT EXISTS (SELECT * FROM sysusers
    WHERE name = USER_NAME()
     AND isapprole = 1)
 EXEC sp_setapprole ...  
Run Code Online (Sandbox Code Playgroud)