Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Error: 4021 Resetting the connection results in a different state than the initial login. / 14 сообщений из 14, страница 1 из 1
06.02.2015, 11:45
    #38873200
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
При попытке посредством 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
06.02.2015, 12:03
    #38873232
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
Ex_Soft,

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

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

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

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

Эксепшен то на какой строке возникает, на connection.Open()?
...
Рейтинг: 0 / 0
06.02.2015, 12:51
    #38873278
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
Ex_SoftГрубо говоря это выглядит так:
Ex_SoftПри попытке посредством ADO.NET при открытии соединения выполнить SET CONTEXT_INFO прилетело
Непонятно в вашем сообщении, при каком действии прилетает эксепшен. Из исходного текста следует, что при выполнении SQL-запроса к базе данных "SET CONTEXT_INFO"
Для выполнения SQL-запросов соединение, естественно, УЖЕ должно быть установлено.
...
Рейтинг: 0 / 0
06.02.2015, 12:59
    #38873288
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
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
06.02.2015, 13:03
    #38873291
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
'Связывает до 128 байт бинарных данных с текущим сеансом или соединением.

Код: sql
1.
2.
3.
DECLARE @BinVar varbinary(128);
SET @BinVar = CAST(REPLICATE( 0x20, 128 ) AS varbinary(128) );
SET CONTEXT_INFO @BinVar;
...
Рейтинг: 0 / 0
06.02.2015, 13:11
    #38873301
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
Konst_One'Связывает до 128 байт бинарных данных с текущим сеансом или соединением.
Да я на это уже смотрел. Не в этом дело. Это не единственное соединение, открытое под этим юзвером, до этого и после этого - все сухо. Мало того - приложение находится в промышленной эксплуатации и юзает его довольно-таки довольно большое кол-во людей. И у них все oB!
Это я просто по результатам анализа log'ов приложения пытаюсь разобраться в ситуации. Чел же продолжает фунциклировать дальше. Ошибка не повторяется. Вот я и хочу в голове прокрутить, как можно ее добиться/воссоздать.
...
Рейтинг: 0 / 0
06.02.2015, 13:25
    #38873316
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
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
06.02.2015, 13:26
    #38873320
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
Ex_SoftalexeyvgЭксепшен то на какой строке возникает, на connection.Open()?
То ж - обработчик. Он дергается при смене State connection'а. Т.е. когда connection открывается (его State изменился) - дергается этот метод.Да, так вы на вопрос не ответили - на какой строке эксепшен случается?
...
Рейтинг: 0 / 0
06.02.2015, 13:42
    #38873340
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
alexeyvgНепонятно, почему так замысловато, почему нельзя написать:
Код: sql
1.
2.
3.
var connection = new SqlConnection(connectionString);
connection.Open();
SetContext(connection);


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

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

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

При возврату к статусу "Open" опять вызывается ваш обработчик, т.е. после выполнения любого вашего запроса вы как минимум один раз выполняете в завершение ещё один запрос установки контекста?
Я не ошибаюсь?
...
Рейтинг: 0 / 0
06.02.2015, 15:03
    #38873443
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
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
Период между сообщениями больше года.
12.10.2020, 12:19
    #40007667
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error: 4021 Resetting the connection results in a different state than the initial login.
Ex_Soft

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

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

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


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