如何在Amazon RDS上使用SQL Server模式设置sessionState

时间:2012-09-28 09:07:08

标签: asp.net session-state amazon-rds

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

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

aspnet_regsql.exe -ssadd -sstype p -S mydb.rds.amazonaws.com -U myuser-P mypass

因此我认为它适用于本地数据库。但对于Amazon RDS,我收到了下一个例外:

  

开始添加会话状态。

     

..执行SQL文件时发生错误   'InstallSqlState.sql'。 SQL错误号是229和   SqlException消息是:EXECUTE permissio n被拒绝了   对象'sp_delete_job',数据库'msdb',架构'dbo'。如果工作的话   不存在,msdb.dbo.sp_delete_job会出现错误。 SQL   服务器:mydb.rds.amazonaws.com数据库:aspnetdb加载的SQL文件:   InstallSqlState.sql

     

命令失败:

     

/ *删除所有表,启动过程,存储过程和类型。   * /

     

/ *删除DeleteExpiredSessions_Job * /

     

DECLARE @jobname nvarchar(200)SET @jobname = N'ASPState'+   '_Job_DeleteExpiredSessions'

     

- 删除[本地]作业    - 如果作业不存在,我们预计会收到错误。 PRINT'如果作业不存在,则会出现msdb.dbo.sp_delete_job的错误   编'。

     

EXECUTE msdb.dbo.sp_delete_job @job_name = @jobname

     

SQL异常:System.Data.SqlClient.SqlException(0x80131904):.   对象'sp_delete_job',数据库上的EXECUTE权限已被删除   'msdb',架构'dbo'。如果作业不存在,则发生错误   msdb.dbo.sp_delete_job是预期的。在   System.Data.SqlClient.SqlConnection.OnError(SqlException异常,   Boolea n breakConnection)   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()at   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,   SqlCommand cm dHandler,SqlDataReader dataStream,   BulkCopySimpleResultSet bulkCopyHandler,Tds ParserStateObject   stateObj)at   System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串   methodName,Boolean async)at   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult   res ult,String methodName,Boolean sendToPipe)at   System.Data.SqlClient.SqlCommand.ExecuteNonQuery()at   System.Web.Management.SqlServices.ExecuteFile(String file,String   server,String database,String dbFileName,SqlConnection连接,   Boolean sessionSta te,Boolean isInstall,SessionStateType   sessionStatetype)

有人知道解决这个问题的方法吗?这会创建一个数据库,但它不完整。

2 个答案:

答案 0 :(得分:2)

可以在SQL RDS上使用sql server会话状态。

您只需要注释掉与创建SQL Server代理作业有关的InstallSqlState.sql部分。运行aspnet_regsql.exe命令时使用该脚本。它位于该exe旁边的框架文件夹中。它没有正常处理无法创建作业,因此它不会执行任何其他步骤来安装会话状态。

这是我的InstallSqlState.sql最终的样子: http://pastebin.com/QJDXC093

或者,您可以在有权创建作业的数据库上运行aspnet_regsql.exe命令,然后使用management studio中的导入/导出功能将生成的数据库架构从数据库移动到RDS。

答案 1 :(得分:1)

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

  1. 使用以下工具SQLAzureMW v5.15.6发布二进制文件为SQL Server 2014在AWS RDS上创建ASPState数据库以及数据库和模式迁移。
  2. 在sessionState模式下更改数据库名称=" SQLServer" allowCustomSqlDatabase ="真" sqlConnectionString =" data source = amazon-server-name; initial catalog = ASPState; persist security info = True; user id = userid; password = password" Cookie的="假"超时=" 100">