0

我注册了一个 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)

因此,似乎缺少存储过程和“用户”(?)。我希望网络版默认具有这些功能?

如果它可用,我会选择 Express 版,但是我只能从 Azure 控制面板中选择“Web 版”和“商业版”。

有什么办法让这个工作?

4

1 回答 1

1

您正在使用 SQL 数据库并调用存储过程sp_addrole。因为它反映在此存储过程不可用的错误中。

如果您查看下面的链接,您将看到 SQL 数据库中不支持 sp_addrole SP:http: //msdn.microsoft.com/en-us/library/windowsazure/ee336237.aspx#sqlazure

The following table lists the security stored procedures that 
Windows Azure SQL Database does not support:

sp_addrole sp_dropremotelogin sp_helpuser 

因此,您真正需要的是首先直接在 SQL 数据库上完成此类工作,而不是直接从您的代码中使用它。

于 2013-03-15T22:48:25.403 回答