Исключения прерывистого соединения SQL Server 2000 на производственном сервере - проблема с конкретной средой?

У нас периодически возникали проблемы, из-за которых пользователи принудительно выходили из приложения.

Наша установка представляет собой веб-приложение ASP.Net/C# на Windows Server 2003 Standard Edition с SQL Server 2000 на серверной части. Недавно мы выполнили серьезное обновление продукта на сервере VMWare нашего клиента (у нас есть гостевой экземпляр, выделенный для нас), и хотя у нас не было ни одной из этих проблем с предыдущим выпуском, дополнительная сложность, которую новое обновление привносит в продукт, вызвала много проблем. Мы также запускаем SQL Server 2000 (сборка 8.00.2039 или SP4) и приложение IIS/ASP.NET (.Net v2.0.50727) на одном компьютере и подключаемся друг к другу через соединение TCP/IP.


В первую очередь выбрасываются следующие исключения:

System.IndexOutOfRangeException: не удается найти таблицу 0.

System.ArgumentException: столбец «пароль» не принадлежит таблице Table.

[Это исключение возникает в сценарии входа в систему, хотя явно доступен столбец пароля]

System.InvalidOperationException: уже существует открытый DataReader, связанный с этой командой, который необходимо сначала закрыть.

[Это происходит очень регулярно]

System.InvalidOperationException: эта SqlTransaction завершена; его больше нельзя использовать.

System.ApplicationException: ExecuteReader требует открытого и доступного подключения. Текущее состояние соединения — соединение.

System.Data.SqlClient.SqlException: время ожидания истекло. Время ожидания истекло до завершения операции или сервер не отвечает.

И только сегодня впервые:

System.Web.UI.ViewStateException: недопустимое состояние просмотра.


Мы провели нагрузочное тестирование приложения, используя то же количество одновременных пользователей, что и рабочий сервер, и не можем воспроизвести эти ошибки. Они очень непостоянны и происходят даже тогда, когда есть только 8/9/10 пользовательских подключений. Моя кишка говорит мне, что это проблемы с подключением ASP.NET - SQL Server 2000.

На данном этапе мы в значительной степени исключили ошибки уровня доступа к данным на уровне кода (у нас над этим работает команда разработчиков из 15 опытных разработчиков), поэтому мы считаем, что это проблема конкретной рабочей среды сервера.


person StickyMcGinty    schedule 08.01.2009    source источник


Ответы (3)


Ошибка Invalid Viewstate довольно распространена на веб-сайтах с высоким трафиком. Однако, если вы недавно перешли на несколько веб-серверов, убедитесь, что вы используете один и тот же ключ компьютера, чтобы Viewstate был подписан одним и тем же ключом на всех серверах. http://www.codinghorror.com/blog/archives/000132.html

Основываясь на других ошибках, я бы предположил, что вы используете общие соединения в нескольких потоках. Сохраняются ли ваши соединения в статических переменных, состоянии приложения, состоянии сеанса или другом объекте, который используется в нескольких запросах? Может быть, где-то есть хеш-таблица, содержащая соединения, команды или транзакции. Ни один из объектов ADO.Net не является потокобезопасным. Поэтому убедитесь, что вы используете их только в однопоточном режиме.

Другая возможность заключается в том, что вы передаете объекты ADO.NET и не всегда последовательно удаляете их и управляете их областью действия. Может быть, они кэшируются в контексте запроса или что-то в этом роде?

person JD Conley    schedule 12.01.2009

Я знаю, что вы не хотите это слышать, но это говорили люди умнее меня (ознакомьтесь с Code Complete Макконнелла). если вы мне не верите):

Вероятно, это ваш код, и ваша интуиция, вероятно, верна:

Моя кишка говорит мне, что это проблемы с подключением ASP.NET - SQL Server 2000.

Возникающие ошибки довольно специфичны, и с точки зрения контекста они выглядят так, как будто они просто пытаются подключиться и испытывают трудности, что, если это происходит только в среде клиента, может указывать на то, что параметр не установлен правильно для виртуальной машины. для доступа к TCP-соединениям на хост-компьютере (в другом экземпляре).


Вы уверены, что ни один код не изменился с момента переноса и что в вашей предыдущей среде было включено ведение журнала, подобное этому? Возможно, это происходило (в меньшей степени) раньше, но ваша среда не улавливала этого, потому что у вас не было включено ведение журнала.

Если это не проблема, и я правильно читаю ваш пост: вы используете сервер на гостевом экземпляре, предоставленном клиентом, на их канале и пропускной способности? Если это так, то вполне возможно (примерно в то же время, что и это обновление) была изменена какая-то конфигурация маршрутизации, или были внесены изменения в брандмауэр, или в какой-либо коробке, в которой находится экземпляр, были внесены некоторые изменения, теперь он обрабатывает ваши вещи по-другому.

Если вы не можете воспроизвести его в своей среде и вы на 100 % уверены, что это не ваш код; тогда логически проблема может заключаться только в их окружении.

person George Stocker    schedule 08.01.2009

Ребята, просто в качестве обновления выяснилось, что проблема была связана с VMWare при интенсивном использовании - какая веселая неделя! Мы меняем код, чтобы он подходил для среды VMWare, и мы уже заметили некоторые улучшения.

Спасибо за предложения, я ценю это.

person StickyMcGinty    schedule 16.01.2009