2

編集:私は私の問題の解決策を見つけました。詳細については、投稿の最後に。

クライアントに承認を提供し、ユーザー/ロールなどを管理するために、メンバーシップ プロバイダーを使用する WCF サービスを構築しました。これまでのところ、承認はうまく機能しています。

クライアントに新しいユーザーを登録できるようにしようとしているので、SQL メンバーシップ プロバイダー コードをサービス内からインターフェイスし、クライアントからそれらのメソッドを呼び出すことにしました。 Client Application Services を使用しないクライアントからの SQL プロバイダー。

サービスで CreateUser メソッドをインターフェースしようとしましたが、クライアントからそれを呼び出して新しいユーザーを作成すると、このエラーが発生し、何が問題なのかわかりません:

オブジェクト参照がオブジェクト インスタンスに設定されていません。

これは、メンバーシップ プロバイダーを直接呼び出すサービスのコードです。

public string RegisterUser(string username, string password, string email,
                                                   string passwordquestion, string passwordanswer, bool isapproved)
        {
            MembershipCreateStatus status;
            SqlMembershipProvider mProvider = new SqlMembershipProvider();
            mProvider.CreateUser(username, password, email, passwordquestion, passwordanswer, true, null, out status);

            switch (status)
            {
                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.";
            }


        }

クライアントから呼び出しているコードは次のとおりです。

private void CreateUser_Click(object sender, RoutedEventArgs e)
        {
            wsBasicAuthService.BasicAuthService c = new wsBasicAuthService.BasicAuthService();
            c.Credentials = new NetworkCredential(txtUserName.Text, txtPassword.Password);
            c.RegisterUser("myUserName", "password", "email@test.com", "question", "answer", true, true);


        }

c.RegisterUser 引数呼び出し「isApprovedSpecified」に追加のパラメーターが追加されていることに気付きましたが、それとは何の関係もないと思います。

私はメンバーシップとサービスに不慣れで、vb.net から C# に切り替えるのに苦労しているので、誰かが私を正しい方向に導くことができれば、私は感謝しています。

解決策: web.config ファイルで includeExceptionDetailInFaults を true に設定した後、オブジェクト参照の問題であることがすぐにわかりました。したがって、メンバーシップ プロバイダーが適切にインスタンス化されていてはならないと考えました。それだけでした。これがどのように見えるべきかです。

SqlMembershipProvider mProvider = (SqlMembershipProvider)Membership.Providers["membershipProvider"];
//membershipProvider is the name you have configured for your provider in the web.config file.
4

0 に答える 0