【发布时间】:2010-03-30 13:24:30
【问题描述】:
从我们的 Web 应用程序打开到 SQL Server 2005 的连接时,我们偶尔会看到以下错误:
“模拟会话安全上下文”无法在此批处理中调用,因为同时批处理已调用它。
我们使用 MARS 和连接池。
异常源自以下代码:
protected SqlConnection Open()
{
SqlConnection connection = new SqlConnection();
connection.ConnectionString = m_ConnectionString;
if (connection != null)
{
try
{
connection.Open();
if (m_ExecuteAsUserName != null)
{
string sql = Format("EXECUTE AS LOGIN = {0};", m_ExecuteAsUserName);
ExecuteCommand(connection, sql);
}
}
catch (Exception exception)
{
connection.Close();
connection = null;
}
}
return connection;
}
我发现了一个MS Connect article,这表明该错误是由于在发送 EXECUTE AS LOGIN 命令之前之前的命令尚未终止时引起的。然而,如果连接刚刚打开,这怎么可能呢?
这可能与连接池与 MARS 的奇怪交互有关吗?
更新:在短期内,我们实施了一种解决方法,即在发生这种情况时清除连接池,以摆脱不良连接,否则它会不断交还给不同的用户。 (现在这种情况每天会发生 5-10 次,同时只有少数同时用户,所以这很烦人。)但如果有人有任何进一步的想法,我们仍在寻找真正的解决方案......
【问题讨论】:
标签: c# asp.net sql-server-2005 connection-pooling sql-server-mars