【问题标题】:Various difficulties creating ASP.NET Session tables via aspnet_regsql.exe通过 aspnet_regsql.exe 创建 ASP.NET 会话表的各种困难
【发布时间】:2019-09-23 07:05:36
【问题描述】:

我们正在尝试将我们的 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'已经存在。选择一个不同的数据库名称”
  • 省略数据库名称并再次运行会引发异常:“Execution Timeout Expired” 大约 30 秒后,这只是 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. 也许将相同的功能移到其他地方(例如存储过程)?

【问题讨论】:

    标签: asp.net azure-sql-database session-state command-timeout sql-session-state


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多