0

我注册了一个Azure帐户,并部署了一个网站和一个非常流畅的数据库。为Azure中的ASP.net设置SqlServer缓存失效

首先,我在免费服务上获得了它,但在遇到性能问题后,将其升级到共享模型(它具有相同的性能)。 “链接资源”数据库是一个网络版数据库。在门户网站,它看起来是这样的:

enter image description here

下面的代码是用来使缓存无效在我的网站的管理员部分:

ConnectionStringSettings Config = ConfigurationManager.ConnectionStrings["MyConnectionString"]; 
System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(Config.ConnectionString); 
System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(Config.ConnectionString, "MyTable"); 

它工作在我的本地SqlServer的快递,如以及在我的一个托管服务提供商的实时数据库上。只有在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) 

所以它看起来像一个存储过程,一个“用户”缺少(?)。我希望网络版默认具备这些功能?

如果有可用的快递版本,我会去的,但是我只能从Azure控制面板中选择“网络版”和“商业版”。

任何想获得此效果的方法?

+0

从您的问题中不清楚您是使用Windows Azure网站(WAWS)还是云服务(WACS)?有了WAWS,对于你可以配置的东西存在限制,然而你可以使用WACS进行配置。如果你清楚你的部署类型,我肯定可以帮你。 – AvkashChauhan 2013-03-15 18:17:33

+0

我认为这是Azure,我添加了门户的屏幕截图。我不知道微软有两个云服务。他们为什么要那样做?他们是否需要内部竞争才能留在其他人面前? :-) – 2013-03-15 22:31:02

+0

Azure网站和Azure云服务在内部非常不同,但外观看起来很相似。你确实有Windows Azure网站。 – AvkashChauhan 2013-03-15 22:39:13

回答

1

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

如果你看一下链接下面你会看到sp_addrole不支持SP在SQL数据库: 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数据库中完成第一,而不是这样的工作项目直接从你的代码中使用它。

+0

谢谢,这是一个有用的链接。你直接用SQL来做什么?我可以通过SSMS访问数据库。我可以尝试手动添加用户和角色,然后再次运行EnableNotifications过程,那是什么意思?顺便说一句,你知道什么样的缓存意味着[这里](http://www.windowsazure.com/en-us/pricing/details/#header-8)? (向下滚动到CDN之后)。 45美元, - 对于128Mb每月听起来像是相当分配给我的“缓存”。这是否意味着默认情况下不支持缓存?在这种情况下,没有什么可以使无效。 – 2013-03-15 23:04:50

+1

是的,你可以使用SSMS。链接上的价格适用于您可以从Azure网站访问的共享案例。请记住,还有另一个名为“基于角色的缓存”的缓存,并且仅适用于Azure Cloud Service。此链接对于共享缓存很有帮助http://msdn.microsoft.com/zh-cn/library/windowsazure/hh697519.aspx – AvkashChauhan 2013-03-15 23:35:45