При открытии соединения с 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 , в которой говорится, что ошибка возникает, когда предыдущая команда еще не прервана до отправки команды EXECUTE AS LOGIN. И все же, как это может быть, если соединение было только что открыто?
Может ли это быть как-то связано с пулами соединений, которые странным образом взаимодействуют с MARS?
ОБНОВЛЕНИЕ: В краткосрочной перспективе мы внедрили обходной путь, очищая пул соединений всякий раз, когда это происходит, чтобы избавиться от плохого соединения, поскольку в противном случае оно продолжает передаваться различным пользователям. (Это теперь происходит 5-10 раз в день с небольшим количеством одновременных пользователей, поэтому это довольно раздражает.) Но если у кого-то есть какие-то дальнейшие идеи, мы все еще ищем реальное решение ...