Asp.net 如何在Amazon RDS上使用SQL Server模式设置会话状态
我有asp.net应用程序,我将在SQL Server中存储我的会话。我正在使用AmazonRDS(MicrosoftSQLServerExpress版)。我使用本地数据库进行测试,它在那里工作得很好 所以我尝试用下一行创建会话数据库Asp.net 如何在Amazon RDS上使用SQL Server模式设置会话状态,asp.net,session-state,amazon-rds,Asp.net,Session State,Amazon Rds,我有asp.net应用程序,我将在SQL Server中存储我的会话。我正在使用AmazonRDS(MicrosoftSQLServerExpress版)。我使用本地数据库进行测试,它在那里工作得很好 所以我尝试用下一行创建会话数据库 aspnet_regsql.exe -ssadd -sstype p -S mydb.rds.amazonaws.com -U myuser-P mypass 正如我的意思,它适用于本地数据库。但对于Amazon RDS,我收到了下一个例外: 开始添加会话状态
aspnet_regsql.exe -ssadd -sstype p -S mydb.rds.amazonaws.com -U myuser-P mypass
正如我的意思,它适用于本地数据库。但对于Amazon RDS,我收到了下一个例外:
开始添加会话状态
。。执行SQL文件时出错
“InstallSqlState.sql”。SQL错误号为229,而
SqlException消息为:在上拒绝执行权限
对象'sp_delete_job',数据库'msdb',架构'dbo'。如果工作需要
不存在,msdb.dbo.sp_delete_作业可能出错。SQL
服务器:mydb.rds.amazonaws.com数据库:已加载aspnetdb SQL文件:
InstallSqlState.sql
命令失败:
/*删除所有表、启动过程、存储过程和类型。
*/
/*删除DeleteExpiredSessions\u作业*/
声明@jobname nvarchar(200)SET@jobname=N'ASPState'+
“\u作业\u删除过期会话”
--删除[本地]作业
--如果作业不存在,我们希望得到一个错误。打印“如果作业不存在,则msdb.dbo.sp_delete_作业将出现错误。”
埃德
执行msdb.dbo.sp_delete_job@job_name=@jobname
SQL异常:System.Data.SqlClient.SqlException(0x80131904):
已拒绝对数据库的对象“sp_delete_job”执行权限
“msdb”,架构“dbo”。如果作业不存在,则会从
应为msdb.dbo.sp_delete_作业。在
System.Data.SqlClient.SqlConnection.OnError(SqlException异常,
Boolea n断开连接)在
System.Data.SqlClient.TdsParser.throweexception和warning()位于
System.Data.SqlClient.TdsParser.Run(RunBehavior,
SqlCommand cm dHandler、SqlDataReader数据流、,
BulkCopySimpleResultSet bulkCopyHandler,Tds ParserStateObject
(b)在
System.Data.SqlClient.SqlCommand.RunExecuteOnQueryTds(字符串
方法名,布尔异步)位于
System.Data.SqlClient.SqlCommand.InternalExecuteOnQuery(DbAsyncResult
result,String methodName,Boolean sendToPipe)位于
System.Data.SqlClient.SqlCommand.ExecuteNonQuery()位于
System.Web.Management.SqlServices.ExecuteFile(字符串文件,字符串
服务器、字符串数据库、字符串dbFileName、SqlConnection、,
布尔sessionstate、布尔isInstall、SessionStateType
sessionStatetype)
有人知道解决这个问题的方法吗?这将创建一个数据库,但它不完整。您可以在sql RDS上使用sql server会话状态
您只需要注释掉InstallSqlState.sql中与创建sql Server代理作业有关的部分。该脚本在运行aspnet_regsql.exe命令时使用。它位于该exe旁边的framework文件夹中。它不会优雅地处理创建作业失败的问题,因此它不会执行任何其他步骤来安装会话状态
下面是我的InstallSqlState.sql最终的样子:
或者,您也可以在具有创建作业权限的数据库上运行aspnet_regsql.exe命令,然后使用management studio中的导入/导出功能将生成的数据库架构从数据库移动到RDS。您可以在sql RDS上使用sql server会话状态
您只需要注释掉InstallSqlState.sql中与创建sql Server代理作业有关的部分。该脚本在运行aspnet_regsql.exe命令时使用。它位于该exe旁边的framework文件夹中。它不会优雅地处理创建作业失败的问题,因此它不会执行任何其他步骤来安装会话状态
下面是我的InstallSqlState.sql最终的样子:
或者,您也可以在具有创建作业权限的数据库上运行aspnet_regsql.exe命令,然后使用management studio中的导入/导出功能将生成的数据库架构从数据库移动到RDS。我已经解决了在Amazon RDS上创建会话DB的问题
我已经解决了在Amazon RDS上创建会话数据库的问题
谢谢你的评论。当我得到正确答案时,我无法在Amazone RDS上建立sql作业,对吗?建立没有作业的状态数据库没有意义。因为数据库将急剧增长(作业清除过期会话的记录)。你是对的。您可以在另一台服务器上设置操作任务,以便按计划运行sql脚本来清理这些任务。这取决于您,但取决于您对RDS好处的渴望程度。我们现在只是在测试系统上使用RDS,所以这不是我们的问题。正如我提到的,我在EC2服务上安装了MS SQL(选择了额外驱动器等)我看不出有任何理由为两个服务付费,因为我只能使用一个。你也可以根据某个URL请求运行清理脚本-例如,对你的站点的每x个请求中的一个进行额外的javascript GET调用。这不是理想的解决方案,但它完成了任务。同样,这完全取决于您对RDS(即托管sql)的好处有多渴望