ASP.NET登录时无法连接SQL Server问题求助
Alright, let's dig into why this error is happening and how to fix it. Looking at your stack trace, the key red flag is that your login flow is trying to use SqlMembershipProvider to validate users, even though you intended to use Active Directory for authentication. That's why you're seeing SQL connection errors—your app is defaulting to the SQL-based membership provider instead of the AD one you need.
Here's a step-by-step breakdown of the fixes:
1. Correct Your Web.config Membership & Authentication Configuration
First, make sure you've properly configured the ActiveDirectoryMembershipProvider and set it as the default. This tells Forms Auth to use AD instead of SQL for user validation.
Replace any existing membership/authentication sections with something like this:
<configuration> <!-- Active Directory Connection String --> <connectionStrings> <add name="ADConnection" connectionString="LDAP://your-domain-controller.example.com/DC=example,DC=com" /> </connectionStrings> <!-- Set AD as the default membership provider --> <system.web> <membership defaultProvider="ADMembershipProvider"> <providers> <clear/> <!-- Clear default SQL provider to prevent fallback --> <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADConnection" attributeMapUsername="sAMAccountName" enableSearchMethods="true"/> </providers> </membership> <authentication mode="Forms"> <forms loginUrl="~/Logon.aspx" timeout="2880" slidingExpiration="true" /> </authentication> </system.web> </configuration>
- Replace
your-domain-controller.example.comandDC=example,DC=comwith your actual AD domain details. - The
<clear/>tag is critical—it removes the defaultSqlMembershipProviderso your app doesn't accidentally fall back to it.
2. Verify Session State SQL Connection
Since you're using SQL Server for session state, double-check that your sessionState configuration has a valid connection string:
<system.web> <sessionState mode="SQLServer" sqlConnectionString="Data Source=your-sql-server-instance;Initial Catalog=ASPState;Integrated Security=True;" allowCustomSqlDatabase="true" timeout="20"/> </system.web>
- Test this connection string with SQL Server Management Studio (SSMS) to confirm:
- The SQL Server instance is reachable (double-check server name/instance spelling).
- The app pool identity (or SQL auth credentials) has access to the
ASPStatedatabase. - Remote connections are enabled on the SQL Server, and firewall ports (usually 1433) are open if it's a remote server.
- If you haven't created the
ASPStatedatabase yet, run theaspnet_regsql.exetool (found inC:\Windows\Microsoft.NET\Framework\v4.0.30319\) with this command:
This creates the necessary session state databases and stored procedures.aspnet_regsql.exe -S your-sql-server-instance -E -ssadd -sstype p
3. Fix Your Login Control Configuration
Make sure your Login control explicitly uses the AD membership provider (so it doesn't default to SQL):
<asp:Login ID="LoginCtrl" runat="server" MembershipProvider="ADMembershipProvider" TitleText="AD Login"> <LayoutTemplate> <!-- Your login UI elements here --> </LayoutTemplate> </asp:Login>
Also, check your Logon.aspx code-behind—ensure the Page_Load method isn't accidentally triggering unprotected SQL operations that could cause timeouts. Avoid unnecessary database calls in page lifecycle events unless they're explicitly needed.
4. Validate AD Permissions
Ensure the identity running your ASP.NET app (usually the IIS application pool identity) has permission to connect to your Active Directory and validate user credentials. If you're using a custom service account, make sure it has read access to AD user objects.
Quick Recap
The root issue here is that your app was configured to use SQL-based membership instead of Active Directory. Fixing the membership provider configuration will stop the unwanted SQL connection attempts, and verifying your session state SQL setup will resolve any remaining database-related errors.
内容的提问来源于stack exchange,提问作者Ben Whyall

