Настройка SqlServer Cache Invalidation для ASP.net в Azure
Я зарегистрировал учетную запись Azure и развернул веб-сайт вместе с базой данных, и все прошло очень гладко.
Сначала он был у меня на бесплатном сервисе, но после проблем с производительностью обновил его до общей модели (с той же производительностью). База данных "связанных ресурсов" является базой данных веб-издания. На портале это выглядит так:
Следующий код используется для включения аннулирования кэша в административной части моего сайта:
ConnectionStringSettings Config = ConfigurationManager.ConnectionStrings["MyConnectionString"];
System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(Config.ConnectionString);
System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(Config.ConnectionString, "MyTable");
Он работает на моем локальном SqlServer Express, а также на действующей базе данных одного из моих хостинг-провайдеров. Только в Azure я получаю следующее исключение:
System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'sp_addrole'.
Cannot find the user 'aspnet_ChangeNotification_ReceiveNotificationsOnlyAccess', because it does not exist or you do not have permission.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Web.Caching.SqlCacheDependencyAdmin.SetupNotifications(Int32 flags, String table, String connectionString)
Таким образом, кажется, что хранимая процедура и "пользователь" (?) Отсутствуют. Я ожидаю, что веб-издание будет иметь эти функции по умолчанию?
Я бы пошел на экспресс-выпуск, если бы он был доступен, однако я могу выбирать только между "Web Edition" и "Business Edition" на панели управления Azure.
Есть ли способ заставить это работать?
1 ответ
Вы используете базу данных SQL и вызываете хранимую процедуру sp_addrole. Как отражается в ошибке, эта хранимая процедура недоступна.
Если вы посмотрите на ссылку ниже, вы увидите, что sp_addrole не поддерживается SP в базе данных SQL: http://msdn.microsoft.com/en-us/library/windowsazure/ee336237.aspx
The following table lists the security stored procedures that
Windows Azure SQL Database does not support:
sp_addrole sp_dropremotelogin sp_helpuser
Итак, что вам действительно нужно, так это сначала выполнить такой рабочий элемент непосредственно в базе данных SQL, а не использовать его непосредственно из вашего кода.