編集:私は私の問題の解決策を見つけました。詳細については、投稿の最後に。
クライアントに承認を提供し、ユーザー/ロールなどを管理するために、メンバーシップ プロバイダーを使用する 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.