ActiveDirectoryMembershipProvider クラスを使用して、安全な LDAP システムに対してユーザーを作成/更新/認証する Web アプリケーションがあります。「サーバーが利用できません」というランダムなメッセージが表示されることを除いて、すべて正常に動作しているように見えます。例外。ユーザーがこのエラーを受け取った場合、すぐに再試行でき、機能します。
ネットワーク担当者にトラフィックを監視してもらい、Membership オブジェクトが LDAP への 2 つの安全な TCP 接続を作成することに気付きました (con1 と con2 と呼びます)。両方の接続が開いたままのように見えますが、con2 だけが通信を受信します。最終的に、con1 は LDAP サーバーからクローズ要求を送信します。このリクエストはランダムな間隔で発生するようです。エラーが発生すると、通常、エラーが発生する直前 (ミリ秒前) に con1 クローズ リクエストが表示されます。
MSDN のドキュメントを読みましたが、2 つの接続が開かれる理由と、接続が閉じられない理由、またはまだ稼働中であるという通知メッセージが送信されない理由がわかりません。これらの答えを知っている人はいますか?
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 注:小規模なベータ ウィンドウにいるため、現在は非常に少量のサービスを提供しています。