0

我们正在尝试将我们的 Azure Web 应用程序之一的 ASP.NET 会话状态移动到数据库中,看起来 aspnet_regsql.exe 工具是要走的路。不幸的是,我陷入了以下几个问题。这是一个 Azure SQL 数据库,我正在使用服务器的管理员帐户进行连接。

  • 我最初想将会话表添加到我们现有的数据库中,所以我运行了.\aspnet_regsql.exe -U adminusername -P adminpassword -S servername.database.windows.net -d databasename -ssadd -sstype c. 抛出异常“数据库'databasename'已经存在。选择不同的数据库名称”
  • 省略数据库名称并再次运行它会在大约 30 秒后引发异常:“Execution Timeout Expired”,这只是 SqlCommand.CommandTimeout 的默认值。这发生在执行“CREATE DATABASE”命令时。我尝试手动创建数据库,但由于某种原因大约需要 50 秒。此数据库为 S0 层,未承受任何负载
  • 在已经创建的数据库上再次运行 aspnet_regsql(因为它是幂等的,对吗?)会导致“数据库已存在”错误,就像预先创建一个空数据库以供其启动一样。
  • 没有可以让我增加超时的标志,并且我无法使用 -C(连接字符串)标志设置命令超时
  • 添加 -sqlexportonly 标志以生成脚本并直接运行它也不起作用(是的,我知道我不应该直接运行 InstallSqlState.sql)。它会抛出一大堆错误消息,例如:
    • Reference to database and/or server name in 'msdb.dbo.sp_add_job' is not supported in this version of SQL Server.
    • USE statement is not supported to switch between databases.
    • 这让我觉得这个脚本可能与 Azure SQL 数据库有一些问题......

有没有人有任何想法?

更新:

看起来所有涉及“msdb”的错误都与删除和重新添加名为“Job_DeleteExpiredSessions”的数据库作业有关。Azure SQL 不支持数据库作业,所以我能看到的唯一选项是

  1. 而是在 VM 上运行 SQL(成本要高得多,而且我宁愿坚持使用平台服务而不是管理 VM)
  2. 实施其中一种“弹性工作代理”
  3. 也许将相同的功能移到其他地方(例如存储过程)?
4

1 回答 1

0

原来微软有一篇关于如何准确地做我需要的文章,我在昨天的搜索中不知何故错过了这篇文章。希望这个答案可以为其他人节省几个小时的挫败感。您需要的所有信息都在https://azure.microsoft.com/en-au/blog/using-sql-azure-for-session-state/之前。

请注意,YMMV 是从 2010 年开始的,并且还用可怕的红色字母表示

“Microsoft 不支持将 SQL Azure 数据库用于 ASP.net 应用程序的 SQL 会话状态管理”

尽管如此,他们提供了一个似乎完全符合我需要的工作脚本。

于 2019-09-24T01:14:18.260 回答