powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Error: 4021 Resetting the connection results in a different state than the initial login.
14 сообщений из 14, страница 1 из 1
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873200
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При попытке посредством ADO.NET при открытии соединения выполнить SET CONTEXT_INFO прилетело
exceptionInnerException Message: Resetting the connection results in a different state than the initial login. The login fails.
Login failed for user 'blah-blah-blah'.

google 'ние привело на
http://www.sqlserverf1.com/tag/resetting-the-connection-results-in-a-different-state-than-the-initial-login-the-login-fails/ Error: 4021, Severity: 16, Resetting the connection results in a different state than the initial login. The login fails.

дальнейшее google 'ние ничего вменяемого не дало...

Можете пояснить этиологию событий? Из-за чего она возникла? Как можно воссоздать ее?
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873232
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft,

Мне кажется, это может быть что то, связанное с необработкой результата предыдущего запроса.
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873233
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgEx_Soft,

Мне кажется, это может быть что то, связанное с необработкой результата предыдущего запроса.Или этого запроса - может, вы использовали вызов ADO.NET с получением рекордсета.
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873247
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgМне кажется, это может быть что то, связанное с необработкой результата предыдущего запроса.
Ex_Softпри открытии соединения
Грубо говоря это выглядит так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
var connection = new SqlConnection(connectionString);
connection.StateChange += delegate(Object sender, StateChangeEventArgs e)
{
      if (e.CurrentState == ConnectionState.Open)
      {
            SetContext(connection);
      }
};
connection.Open();


или Вы подразумеваете, что в честном физическом connection'е, полученном из пула, остался какой-то мусор?

alexeyvgИли этого запроса - может, вы использовали вызов ADO.NET с получением рекордсета.
Дык... Еще ж ничего не начинает запрашиваться...
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873272
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftДык... Еще ж ничего не начинает запрашиваться...А "SetContext" - это что, это же ваша функция? Она использует коннект, выполняет в нём запрос к серверу, в контексте базы данных?

И вообще, я не понимаю, connection.Open() - открывает коннект.
ДО этого проверяется статус коннекта - если он открыт, делаем запрос...
А потом уже выполняем открытие коннекта :-)

Я вообще не специалист по C#, не программировал на нём уже давно, новые веяния языка прошли мимо меня, так что извините, если что :-)

Эксепшен то на какой строке возникает, на connection.Open()?
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873278
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftГрубо говоря это выглядит так:
Ex_SoftПри попытке посредством ADO.NET при открытии соединения выполнить SET CONTEXT_INFO прилетело
Непонятно в вашем сообщении, при каком действии прилетает эксепшен. Из исходного текста следует, что при выполнении SQL-запроса к базе данных "SET CONTEXT_INFO"
Для выполнения SQL-запросов соединение, естественно, УЖЕ должно быть установлено.
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873288
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgА "SetContext" - это что, это же ваша функция? Она использует коннект, выполняет в нём запрос к серверу, в контексте базы данных?
Угу... Только не запрос, а
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        public static void SetContext(IDbConnection connection)
        {
            const string COMMAND_TEXT = @"DECLARE @Var nvarchar(max), @BinVar varbinary(max) " +
                                        @"SET @Var = CAST('<' + '{0}' + '>' + '{1}' AS nvarchar(256)) " +
                                        @"SET @BinVar = convert(varbinary(max), @Var) " +
                                        @"SET CONTEXT_INFO @BinVar";

            var windowsIdentity = WindowsIdentity.GetCurrent();
            var user = LoginUser;
            var context = user != null ? user.id : (long?)null;

            var cmd = connection.CreateCommand();
            cmd.CommandText = String.Format(COMMAND_TEXT, context.HasValue ? context.Value.ToString() : string.Empty, windowsIdentity != null ? windowsIdentity.Name : string.Empty);

            cmd.ExecuteNonQuery();
        }



alexeyvgИ вообще, я не понимаю, connection.Open() - открывает коннект.
ДО этого проверяется статус коннекта - если он открыт, делаем запрос...
А потом уже выполняем открытие коннекта :-)

Я вообще не специалист по C#, не программировал на нём уже давно, новые веяния языка прошли мимо меня, так что извините, если что :-)

Эксепшен то на какой строке возникает, на connection.Open()?

То ж - обработчик. Он дергается при смене State connection'а. Т.е. когда connection открывается (его State изменился) - дергается этот метод.

В конечном итоге на сервант уходит
Код: sql
1.
2.
3.
4.
5.
6.
7.
DECLARE
	@Var nvarchar(max),
	@BinVar varbinary(max)

SET @Var = CAST('<' + '0' + '>' + 'SmthUser' AS nvarchar(256))
SET @BinVar = convert(varbinary(max), @Var)
SET CONTEXT_INFO @BinVar
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873291
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
'Связывает до 128 байт бинарных данных с текущим сеансом или соединением.

Код: sql
1.
2.
3.
DECLARE @BinVar varbinary(128);
SET @BinVar = CAST(REPLICATE( 0x20, 128 ) AS varbinary(128) );
SET CONTEXT_INFO @BinVar;
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873301
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One'Связывает до 128 байт бинарных данных с текущим сеансом или соединением.
Да я на это уже смотрел. Не в этом дело. Это не единственное соединение, открытое под этим юзвером, до этого и после этого - все сухо. Мало того - приложение находится в промышленной эксплуатации и юзает его довольно-таки довольно большое кол-во людей. И у них все oB!
Это я просто по результатам анализа log'ов приложения пытаюсь разобраться в ситуации. Чел же продолжает фунциклировать дальше. Ошибка не повторяется. Вот я и хочу в голове прокрутить, как можно ее добиться/воссоздать.
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873316
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftУгу... Только не запрос, аПочему не запрос? Это и называется "выполняется запрос к базе данных, методом ExecuteNonQuery"

Ex_SoftТо ж - обработчик. Он дергается при смене State connection'а. Т.е. когда connection открывается (его State изменился) - дергается этот метод.А, то есть вызывается new SqlConnection(connectionString), потом connection.Open(), а потом, когда статус коннекта меняется, вызывается код SetContext(connection)?
Понятно.

Непонятно, почему так замысловато, почему нельзя написать:
Код: sql
1.
2.
3.
var connection = new SqlConnection(connectionString);
connection.Open();
SetContext(connection);



Вроде и текста меньше нужно вбивать :-)

Ну ладно, неважно. Что то другое, значит :-(
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873320
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_SoftalexeyvgЭксепшен то на какой строке возникает, на connection.Open()?
То ж - обработчик. Он дергается при смене State connection'а. Т.е. когда connection открывается (его State изменился) - дергается этот метод.Да, так вы на вопрос не ответили - на какой строке эксепшен случается?
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873340
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgНепонятно, почему так замысловато, почему нельзя написать:
Код: sql
1.
2.
3.
var connection = new SqlConnection(connectionString);
connection.Open();
SetContext(connection);


Вроде и текста меньше нужно вбивать :-)Вот мне просто интересен ваш подход.

При выполнении запросов, на каждый запрос в конце вы выполняете ещё один запрос - установку контекста?

Ведь, как я понимаю, при типичном выполнении любого запроса статус меняется последовательно:
Executing
Fetching (если запрос что то возвращает)
Open

При возврату к статусу "Open" опять вызывается ваш обработчик, т.е. после выполнения любого вашего запроса вы как минимум один раз выполняете в завершение ещё один запрос установки контекста?
Я не ошибаюсь?
...
Рейтинг: 0 / 0
Error: 4021 Resetting the connection results in a different state than the initial login.
    #38873443
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgВедь, как я понимаю, при типичном выполнении любого запроса статус меняется последовательно:
Executing
Fetching (если запрос что то возвращает)
Open

При возврату к статусу "Open" опять вызывается ваш обработчик, т.е. после выполнения любого вашего запроса вы как минимум один раз выполняете в завершение ещё один запрос установки контекста?
Я не ошибаюсь?
https://msdn.microsoft.com/en-us/library/system.data.common.dbconnection.statechange.aspx DbConnection.StateChange Event

Occurs when the state of the event changes.

The StateChange event occurs when the state of the event changes from closed to opened, or opened to closed.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Error: 4021 Resetting the connection results in a different state than the initial login.
    #40007667
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft

Можете пояснить этиологию событий? Из-за чего она возникла? Как можно воссоздать ее?

хотя и прошла туча лет с того момента,
как это спросили,
но мало ли, вдруг кому пригодится.

такая ошибка может вывалиться, если сменить язык логину,
который уже открыл соединение.
и вот когда он делает reset connection,
такое и получает.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Error: 4021 Resetting the connection results in a different state than the initial login.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]