Сервер состояния сеанса Asp.net с SQL Server
-
06-07-2019 - |
Вопрос
Мы пытаемся заставить состояние сеанса работать, используя следующую строку web.config:
<sessionState
mode="SQLServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="Data Source=dbServer;User ID=stateUser;Password='thepassword'"
cookieless="false"
timeout="20"/>
На dbServer мы выполнили следующую команду для настройки ASPState db:
aspnet_regsql.exe -S localhost-E -ssadd -sstype p
На веб-сервере мы запустили службу состояний ASP.Net, однако в таблицах ASPStateTempApplications или ASPStateTempSessions не отображаются записи, и похоже, что сессия все еще сохраняется в процессе.
Что не так? Должна ли служба состояний работать на сервере БД? Будет ли он установлен с IIS, потому что он не доступен на этом компьютере, несмотря на установку .net 3.5.1.
Журналы IIS не показывают никаких признаков сбоя. Что не так?
Решение
Во-первых, вам не нужно запускать службу состояний, чтобы использовать состояние сеанса SQL Server. Забудьте о службе состояний ASP.NET.
Вы уверены, что на вашем сайте создается переменная сеанса? Если вы внесете эти изменения в ваш файл web.config, то если вы никогда не будете использовать переменные сеанса, он не будет использоваться.
Другие советы
Если вокруг пароля действительно есть кавычки, попробуйте удалить их:
sqlConnectionString="Data Source=dbServer;User ID=stateUser;Password=thepassword"
И удалите следующую строку, у нее нет функции для хранения сеанса SQL:
stateConnectionString="tcpip=127.0.0.1:42424"
И вы могли бы также остановить государственную службу; это необходимо для состояния сеанса вне процесса, а не для состояния сеанса SQL Server.
Кроме того, состояние сеанса SQL Server требует от вас выполнения InstallSqlState.sql
в базе данных, а не aspnet_regsql.exe
. Следует создать новую базу данных ASPState
.
Как насчет написания небольшого HttpModule? Вы можете оставить его на время, когда вам нужно будет перевести пользователей на новую кодовую базу. Модуль может выполнить некоторую работу над каждым запросом страницы, чтобы проверить сеанс пользователя и решить, нужно ли от него отказаться. Возможно, вы сохраняете строку версии приложения в сеансе пользователя, когда сеанс создается впервые, и сравниваете строку текущей версии приложения с этим.