Настройка 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, а не использовать его непосредственно из вашего кода.

Другие вопросы по тегам