2012-08-24 70 views
2

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

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

我已阅读了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 目前,我们正在服务了非常低的量,因为我们都在一个小测试窗口。

+0

只有评论和覆盖面。你确定你的PDC和BCD启动了吗?你确定你的PDC和BDC是同步的吗?当PCD和BDC不同步时,我在Citrix中看到了类似的症状。 – Paparazzi

回答

0

看来这是ActiveDirectoryMembershipProvider类中的一个错误。我们最终切换到Common.LdapAuth.LdapAuthProvider类来认证用户。