2012-03-03 2 views
0

MysqlMembership에 대해 UserName/Password 인증을 수행하는 데 사용하는 사용자 지정 httpModule이있는 WCF Webservice가 있습니다.MysqlMembership Membership.ValidateUser 부하가 낮을 때 교착 상태 문제

public void Init(HttpApplication application) 
    { 
     application.AuthenticateRequest += new EventHandler(this.OnAuthenticateRequest); 
     application.EndRequest += new EventHandler(this.OnEndRequest); 
    } 

    public void OnAuthenticateRequest(object source, EventArgs eventArgs) 
    { 
      ... 
      ... 

      if (Membership.ValidateUser(username, password)) 
      { 

서비스를로드 테스트를 시작했을 때 난처한 문제가 발생했습니다. 요청은 무작위로 Membership.ValidateUser 호출에 실패합니다. 로드 테스터의 각 스레드마다 동일한 사용자 이름/로그인을 사용하고 있습니다. 다음은 오류입니다.

[MySqlException (0x80004005): Deadlock found when trying to get lock; try restarting transaction] 
    MySql.Data.MySqlClient.MySqlStream.ReadPacket() +506 
    MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId) +450 
    MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) +131 
    MySql.Data.MySqlClient.MySqlDataReader.NextResult() +1216 
    MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +2191 
    MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() +27 
    MySql.Web.Security.MySQLMembershipProvider.ValidateUser(String username, String password) +1092 

    [ProviderException: An exception occurred. Please check the Event Log.] 
    MySql.Web.Security.MySQLMembershipProvider.ValidateUser(String username, String password) +1481 
    MyApplication.UserAuthenticator.UserNameAuthenticator.OnAuthenticateRequest(Object source, EventArgs eventArgs) in C:\Develop\MyProject\MyProject.UserAuthenticator\UserNameAuthenticator.cs:123 
    System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)  +270 

아이디어가 있습니까?

감사합니다, AFrieze

답변

0

암호가 유효하지 않은 것으로 판명 경우 유효성 검사 사용자가 잘못된 암호 시도를 증가하기 위해 행을 잠급니다 : 당신 이후

If an incorrect password is supplied to the ValidateUser method, the internal counter that tracks invalid password attempts is incremented by one. This can result in the user being locked out and unable to log on until the lock status is cleared by a call to the UnlockUser method. If the correct password is supplied and the user is not currently locked out, then the internal counters that track invalid password and password-answer attempts are reset to zero. For more information, see the MaxInvalidPasswordAttempts and PasswordAttemptWindow properties.

http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.validateuser.aspx

교착 상태가 발생할 수있는 모든 요청에 ​​대해 동일한 사용자를 사용하고 있습니다.

+0

실제 오류는 lastActivityDate에서 교착 상태 였지만 동일한 효과가있었습니다. – AFrieze