1

我正在使用客户端应用程序服务来验证 Windows 应用程序的用户。(SqlMembershipProvider) 登录工作正常,我可以使用以下代码获取用户名:

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

我想获取有关用户的更多信息,例如电子邮件地址。我尝试了以下行来获取用户。

MembershipUser mu = Membership.GetUser();

上面的行给了我一个“不支持指定的方法”的消息。如果我也传入用户名,结果相同。

有没有办法像在 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(String username, Boolean userIsOnline) 在 System.Web.Security.Membership.GetUser(String username, Boolean userIsOnline) 在 BillingFormsApplication.MDIMain.MDIMain_Load(Object sender, EventArgs e) in C:\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.cs:第 340 行

4

1 回答 1

0

SimpleMembership,顾名思义,非常简单,并没有实现所有的MembershipProvider方法;只是 MVC 基本身份验证和授权所需的那些。如果您尝试使用未实现的方法,您将得到该异常。您可以从头开始创建自己的 MembershipProvider,也可以从 SimpleMembership 继承并实现未实现的方法。

于 2013-10-16T18:23:49.187 回答