gpt4 book ai didi

asp.net - 为使用 AspNetSqlMembershipProvider 的站点获取 "SQLExpress database file auto-creation error",但连接字符串是 SQL Server 2005

转载 作者:行者123 更新时间:2023-12-04 10:32:39 25 4
gpt4 key购买 nike

我有一个 ASP.NET v2.0根目录是公共(public)的网站(不是 Web 应用程序),但“Admin”子目录需要身份验证。有关设置的所有内容都非常通用 - 我使用了根 web.config 中定义的连接字符串,以及标准 AspNetSqlMembershipProvider提供程序,我正在使用 ASP.NET 登录控件。
Admin 目录中的 web.config 指定用户必须具有“Admin”角色。

我正在使用 SQL Server 2008 ,我的连接字符串很好;每个根级页面都是数据驱动的,它们都可以正常工作。
提供者配置似乎不错。

当我登录时,登录控件的“OnLoggedIn”事件会触发。
该事件代码的最后一行将我重定向到我的 Admin/Default.aspx页。我在“OnLoggedIn”中的断点显示一切都很好,直到重定向到我的管理目录......然后......

......然后我等待......等待......

然后我收到一条错误消息,告诉我它遇到了“SQLExpress database file auto-creation error”。

为什么它会突然尝试创建 SQL Server Express 文件?为什么它突然忽略了我的连接字符串?

一个奇怪的线索:就在“OnLoggedIn”事件的最后一行之前,我输入了这个:

bool blnTest = User.IsInRole("Admin");

我想看看 blnTest = true .
发生的事情是该进程到达这条线......并等待......最终告诉我它无法访问 SQL Server Express 数据库。似乎任何用于确定用户角色的引用(无论是在我的代码中还是在幕后)都调用了错误的数据库。

编辑:啊,有时当我测试 blnTest 时它会等待。其他时候,它会立即将该值报告为“假”。

最佳答案

根据您的评论,您似乎没有为您的站点明确配置角色提供程序。

如果您的 web.config 中的所有内容是:

<roleManager enabled="true" />

然后,您将依赖在配置层次结构中进一步声明的默认提供程序(machine.config、全局 web.config 等)

在 machine.config 中,你可能有类似的东西:
<roleManager>
<providers>
<add name="AspNetSqlRoleProvider"
connectionStringName="LocalSqlServer"
applicationName="/"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<add name="AspNetWindowsTokenRoleProvider"
applicationName="/"
type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>

如您所见,第一个提供程序被配置为使用名为 LocalSqlServer 的连接字符串——它通常也在 machine.config 中声明:
<add name="LocalSqlServer" 
connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient"/>

这旨在使用基于本地文件的数据库,如果它尚不存在则将创建该数据库。

因此,要让角色在您的站点上工作,您应该将根 web.config 修改为:
<roleManager enabled="true">
<providers>
<clear />
<add name="AspNetSqlRoleProvider"
connectionStringName="YourConnectionStringName"
applicationName="/"
type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>

使用 元素将删除之前为该类型定义的所有提供程序。

关于asp.net - 为使用 AspNetSqlMembershipProvider 的站点获取 "SQLExpress database file auto-creation error",但连接字符串是 SQL Server 2005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1402430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com