ASP.NET SessionState с allowCustomSqlDatabase="true" не вызывает указанную базу данных

Документация Microsoft здесь

http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.90).aspx

и несколько статей SO указывают, что указание allowCustomSqlDatabase="true" в объявлении sessionState файла ASP.NET web.config позволит мне переопределить, используя базу данных ASPState по умолчанию, и указать мое собственное имя базы данных.

Я установил эти свойства в моем файле web.config.

<sessionState allowCustomSqlDatabase="true" mode="SQLServer" sqlConnectionString="Data Source=mysqlservername;Initial Catalog=DR_ASPState;Integrated Security=true;Connect Timeout=15;" />

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

Я наблюдал за трафиком SQL с помощью SQL Profiler и заметил, что сбой вызван этим запросом:

SELECT @appId = AppId
FROM [ASPState].dbo.ASPStateTempApplications
WHERE AppName = @appName

Я перезапустил пулы приложений и перезапустил IIS, пытаясь очистить любую ссылку на имя кэшированной базы данных, но это не помогает. Насколько я понимаю, ASP.NET SessionState будет использовать указанное мной имя базы данных DR_ASPState для генерации операторов SQL, которые он использует для подключения к базе данных SessionState. Но похоже, что [ASPState] жестко запрограммирован в рамках.

Кто-нибудь может обнаружить что-то, что я сделал неправильно, или предоставить полезную информацию по устранению неполадок о том, как решить эту проблему?

1 ответ

Я раскрыл проблему. Наша ИТ-команда создала пользовательскую базу данных состояний сеансов ASP, DR_ASPState, восстановив резервную копию нашей существующей базы данных ASPState. Однако простое предоставление другого имени не изменяет хранимые процедуры, которые были сгенерированы с жестко закодированными ссылками на базу данных.

Веб-сайт вызывает правильную альтернативную базу данных DR_ASPState, как определено в моей строке подключения. Однако по крайней мере одна из хранимых процедур, созданных командой.NET, имеет жестко запрограммированные имена баз данных в операторах хранимых процедур.

Используя SQL Profiler, я обнаружил, что это оператор, который вызывал проблемы при использовании переименованной базы данных.

declare @p2 int
set @p2=NULL
exec dbo.TempGetAppID @appName='/LM/W3SVC/10/ROOT',@appId=@p2 output
select @p2

Изучение хранимой процедуры dbo.TempGetAppID показывает такие операторы:

SELECT @appId = AppId
FROM [ASPState].dbo.ASPStateTempApplications
WHERE AppName = @appName

Это было бы правильно решено,если правильно установить DR_ASPState в качестве новой базы данных в соответствии с инструкциями в документации.NET здесь.

http://msdn.microsoft.com/en-us/library/ms229862(v=vs.80).aspx

Это заявление должно быть выполнено с нашего веб-сервера.

aspnet_regsql.exe -S *servername* -E -ssadd -sstype c –d DR_ASPState
Другие вопросы по тегам