Asp.net 如何在Amazon RDS上使用SQL Server模式设置会话状态

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,我收到了下一个例外: 开始添加会话状态

我有asp.net应用程序,我将在SQL Server中存储我的会话。我正在使用AmazonRDS(MicrosoftSQLServerExpress版)。我使用本地数据库进行测试,它在那里工作得很好

所以我尝试用下一行创建会话数据库

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的问题

  • 使用以下工具SQLAzureMW v5.15.6 Release Binary for SQL Server 2014在AWS RDS和数据库及模式迁移上创建ASPState DB
  • 更改sessionState mode=“SQLServer”allowCustomSqlDatabase=“true”sqlConnectionString=“数据源=亚马逊服务器名称;初始目录=ASPState;持久安全信息=true;用户id=用户id;密码=密码”cookieless=“false”timeout=“100”>

  • 我已经解决了在Amazon RDS上创建会话数据库的问题

  • 使用以下工具SQLAzureMW v5.15.6 Release Binary for SQL Server 2014在AWS RDS和数据库及模式迁移上创建ASPState DB
  • 更改sessionState mode=“SQLServer”allowCustomSqlDatabase=“true”sqlConnectionString=“数据源=亚马逊服务器名称;初始目录=ASPState;持久安全信息=true;用户id=用户id;密码=密码”cookieless=“false”timeout=“100”>

  • 谢谢你的评论。当我得到正确答案时,我无法在Amazone RDS上建立sql作业,对吗?建立没有作业的状态数据库没有意义。因为数据库将急剧增长(作业清除过期会话的记录)。你是对的。您可以在另一台服务器上设置操作任务,以便按计划运行sql脚本来清理这些任务。这取决于您,但取决于您对RDS好处的渴望程度。我们现在只是在测试系统上使用RDS,所以这不是我们的问题。正如我提到的,我在EC2服务上安装了MS SQL(选择了额外驱动器等)我看不出有任何理由为两个服务付费,因为我只能使用一个。你也可以根据某个URL请求运行清理脚本-例如,对你的站点的每x个请求中的一个进行额外的javascript GET调用。这不是理想的解决方案,但它完成了任务。同样,这完全取决于您对RDS(即托管sql)的好处有多渴望