ActiveDirectoryMembershipProvider随机错误

时间:2012-08-24 22:10:01

标签: .net active-directory connection

我有一个Web应用程序,它使用ActiveDirectoryMembershipProvider类来针对安全的LDAP系统创建/更新/验证用户。一切似乎都运行良好,除了我们得到随机“服务器不可用”。例外。当用户收到此错误时,他们可以立即重试并运行。

我让我们的网络人监控流量,我们注意到Membership对象创建了2个到LDAP的安全TCP连接(我们称之为con1和con2)。两个连接似乎都保持打开状态,但只有con2接收任何通信。最终con1将从ldap服务器发送一个关闭请求。此请求似乎是以随机间隔发生的。当我们看到错误时,我们通常会在错误发生之前(毫秒之前)看到con1关闭请求。

我已经阅读了MSDN文档,但无法弄清楚为什么它会打开2个连接以及它为什么不关闭它们或发送一条通知消息,它​​仍然正常运行。有谁知道这些答案?

我的第二个问题是我该怎么做才能解决这个问题?我知道我可以重新请求验证,但我不希望我必须这样做。下面是示例代码。

配置

<add name="ADConnectionString" connectionString="LDAP://FullyQualifiedServerName:636/OU=XXX,DC=XXX,DC=XXX" />
<add name="ADMembershipProvider"    
type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
 connectionStringName="ADConnectionString" 
 connectionUsername="CN=XXX,OU=XXX,DC=XXX,DC=XXX" connectionPassword="XXXXXX" 
 connectionProtection="Secure" enableSearchMethods="true" enablePasswordReset="true" 
 requiresQuestionAndAnswer="true" applicationName="XXXX" 
 description="Default AD connection" requiresUniqueEmail="false" 
 clientSearchTimeout="30" serverSearchTimeout="30" attributeMapPasswordQuestion="xxx" 
 attributeMapPasswordAnswer="xxxx" attributeMapFailedPasswordAnswerCount="xxxx" 
 attributeMapFailedPasswordAnswerTime="xxxx" 
 attributeMapFailedPasswordAnswerLockoutTime="xxxx" attributeMapEmail="mail" 
 attributeMapUsername="userPrincipalName" maxInvalidPasswordAttempts="7" 
 passwordAttemptWindow="1" passwordAnswerAttemptLockoutDuration="5" 
 minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" 
 passwordStrengthRegularExpression="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).{8,20}$" />

代码

return Membership.Providers["ADMembershipProvider"].ValidateUser(userName, userPassword);

环境:Windows Server 2008,IIS 7.0,.NET 4.0 注意 由于我们处于小型测试版窗口,因此我们目前的投放量非常低。

1 个答案:

答案 0 :(得分:0)

似乎这是ActiveDirectoryMembershipProvider类中的错误。我们最终切换到Common.LdapAuth.LdapAuthProvider类来验证用户。