MySql 成员资格提供程序-缺少或不正确的架构

MySql 成员资格提供程序-缺少或不正确的架构

我们有一个在 IIS 7.5 上运行的 ASP.NET 站点,使用 .net 连接器的 MySQL 数据库,成员资格/角色提供程序在 web.config 中正确设置,并且它们可以正常工作 - 但只是暂时的。

从历史上看(.net 连接器 6.7.4.0 及更早版本),在恢复包括会员表在内的站点备份后,我们总是遇到问题,我们会在页面上收到一条错误,提示会员提供者的“架构缺失或不正确”,这是无稽之谈,因为我们可以在数据库中清楚地看到表格。

为了解决这个问题,我们只需从数据库中删除成员资格表,在 web.config 中设置 autogenerateschema=true,让角色提供程序再次自动生成表,这样就可以了。然后我们可以从备份中恢复(同一个备份!),并用现有帐户覆盖新的空白表,一切正常。我们认为这只是 .net 连接器的一个怪癖,因为它只在从备份恢复数据库后发生,所以我们并不太担心。

现在我们已升级到 .net 连接器 6.9.4.0,我们遇到了同样的问题,只是情况更糟,因为现在如果重新启动该网站的应用程序池,它会触发相同的“缺少或不正确的架构”消息,我们已应用上述修复。执行诸如更改 web.config 之类的操作会触发应用程序池循环,这意味着我们无法在不关闭网站的情况下更改 web.config!

这是来自 web.config 的角色提供程序,省略了一些细节,除了我们手动更新版本号之外,它从未改变过。

<roleManager defaultProvider="MySQLRoleProvider" enabled="true">
      <providers>
        <clear />
        <add name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.9.4.0, Culture=neutral, PublicKeyToken=xxxxxx" applicationName="xxxxx" connectionStringName="xxxxxx" autogenerateschema="True" />
      </providers>
    </roleManager>

值得注意的是,触发该错误并应用我们的修复后,我们从完全相同的备份中恢复成员资格表,这意味着修复之前/之后的表是相同的,因此它不可能是数据库的问题,它是 IIS 的一些内部状态。

答案1

我已经解决了这个问题,您需要更新存储在数据库本身中的架构版本,您可以通过针对数据库运行此 SQL 手动执行此操作。

UPDATE my_aspnet_schemaversion SET version = 10

将 10 替换为适合您下载的连接器的任何版本。

相关内容