Web アプリから SQL Server 2005 への接続を開くと、次のエラーが表示されることがあります。
「Impersonate Session Security Context」は同時バッチで呼び出されたため、このバッチでは呼び出すことができません。
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;
}
EXECUTE AS LOGIN コマンドが送信される前に前のコマンドがまだ終了していない場合にエラーが発生することを示唆するMS Connectの記事を見つけました。しかし、接続が開かれたばかりの場合、これはどうしてでしょうか?
これは、接続プーリングが MARS と奇妙に相互作用していることと関係があるのでしょうか?
更新: 短期的には、これが発生するたびに接続プールをクリアすることで回避策を実装しました。これにより、さまざまなユーザーに引き渡され続けるため、接続不良を取り除くことができます。(これは現在、少数の同時ユーザーのみで 1 日に 5 ~ 10 回発生しているため、かなり面倒です。) しかし、さらにアイデアがある場合は、まだ実際の解決策を探しています...