0

WCF と Membership.CreateUser を使用して新しいユーザーを作成する Silverlight Web アプリがあります。

ユーザーを正常に作成してから別のユーザーを作成すると、「ユーザーは正常に作成されました」というステータス メッセージが 2 回表示されます。または、ユーザー名が既に存在するなどの理由で、新しいユーザーを作成する最初の試みが失敗した場合、それ以降の試行ではステータス メッセージが複数回表示されます。

私のWCFサービスコード

[OperationContract]
public MembershipCreateStatus CreateNewUser(string userName, string password, string email, string securityQuestion, string securityAnswer)
{
   MembershipCreateStatus status = new MembershipCreateStatus();
   MembershipUser newUser = Membership.CreateUser(userName, password, email, securityQuestion, securityAnswer, true, out status);

   return status;
}

メソッドへの私の呼び出し

tmsClient.CreateNewUserCompleted += new EventHandler<CreateNewUserCompletedEventArgs>(tmsClient_CreateNewUserCompleted);
tmsClient.CreateNewUserAsync(nu.UserName, nu.Password, nu.Email, nu.SecurityQuestion, nu.SecurityAnswer);

私のイベントは完了しました

void tmsClient_CreateNewUserCompleted(object sender, CreateNewUserCompletedEventArgs e)
{
    MembershipCreateStatus status = e.Result;
    string result = GetErrorMessage(status);
    MessageBox.Show(result);
}

そして最後に GetErrorMessage メソッド

public string GetErrorMessage(MembershipCreateStatus status)
{
    switch (status)
    {
        case MembershipCreateStatus.Success:
            return "The user was successfully created.";

        case MembershipCreateStatus.DuplicateUserName:
            return "Username already exists. Please enter a different user name.";

        case MembershipCreateStatus.DuplicateEmail:
            return "A username for that e-mail address already exists. Please enter a different e-mail address.";

        case MembershipCreateStatus.InvalidPassword:
            return "The password provided is invalid. Please enter a valid password value.";

        case MembershipCreateStatus.InvalidEmail:
            return "The e-mail address provided is invalid. Please check the value and try again.";

        case MembershipCreateStatus.InvalidAnswer:
                return "The password retrieval answer provided is invalid. Please check the value and try again.";

        case MembershipCreateStatus.InvalidQuestion:
                return "The password retrieval question provided is invalid. Please check the value and try again.";

        case MembershipCreateStatus.InvalidUserName:
                return "The user name provided is invalid. Please check the value and try again.";

        case MembershipCreateStatus.ProviderError:
            return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

        case MembershipCreateStatus.UserRejected:
            return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

        default:
            return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
    }
}

なぜこれが起こっているのかについてのアイデアはありますか? 送信

ニール

4

1 に答える 1

1

CreateNewUserCompletedメソッドを呼び出す直前にハンドラーを追加しCreateNewUserAsync、決して削除しないと思います。tmsClient_CreateNewUserCompletedこれを適切に機能させるには、メソッドを次のようにする必要があります。

void tmsClient_CreateNewUserCompleted(object sender, CreateNewUserCompletedEventArgs e)
{
    tmsClient.CreateNewUserCompleted -= new EventHandler<CreateNewUserCompletedEventArgs>(tmsClient_CreateNewUserCompleted);
    MembershipCreateStatus status = e.Result;
    string result = GetErrorMessage(status);
    MessageBox.Show(result);
}
于 2012-04-10T19:47:43.930 に答える