1

クライアント アプリケーション サービスを使用して、Windows アプリのユーザーを認証しています。(SqlMembershipProvider) ログインは正常に機能し、次のコードを使用してユーザー名を取得できます。

userName =  System.Threading.Thread.CurrentPrincipal.Identity.Name.ToString();

メールアドレスなど、ユーザーに関する情報をもう少し取得したい。ユーザーを取得するために次の行を試しました。

MembershipUser mu = Membership.GetUser();

上記の行により、「指定されたメソッドはサポートされていません」というメッセージが表示されます。userName も渡しても同じ結果になります。

asp.net アプリの場合と同様に、クライアント アプリケーション サービスを使用して、より詳細なユーザー情報を取得する方法はありますか? そうでない場合は、代わりに独自の Web サービス ラッパーを作成する必要があるのでしょうか?

4.0 フレームワークを使用しています。

更新: app.config ファイルのスライス

<system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="http://PC-03/FAAppServices/Authentication_JSON_AppService.axd" credentialsProvider="BillingFormsApplication.LoginForm, BillingFormsApplication" savePasswordHashLocally="True" />
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="http://PC-03/FAAppServices/Role_JSON_AppService.axd" cacheTimeout="1209600" honorCookieExpiry="True" />
      </providers>
    </roleManager>
  </system.web>

更新 2: スタック トレース

System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider.GetUser (文字列のユーザー名、ブール値の userIsOnline) で System.Web.Security.Membership.GetUser (文字列のユーザー名、ブール値の userIsOnline) で BillingFormsApplication.MDIMain.MDIMain_Load (オブジェクトの送信者、EventArgs e) でC:\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.cs:340行目

4

1 に答える 1

0

名前が示すように、SimpleMembership は非常に単純で、すべてのMembershipProviderメソッドを実装しているわけではありません。MVC の基本的な認証と承認に必要なものだけです。実装されていないメソッドを使用しようとすると、その例外が発生します。独自の MembershipProvider を最初から作成するか、SimpleMembership から継承して実装されていないメソッドを実装することができます。

于 2013-10-16T18:23:49.187 に答える