3

我们将 WCF Ria 服务与 silverlight 5 项目一起使用。对于身份验证,我们使用自定义成员提供程序。RIA 服务类库中的 WCF Ria 服务。客户端身份验证正在运行。我们使用 WebContext.Current.User.Name 访问当前用户名。但服务器端 ServiceContext.User 为空。如果我们使用 [RequireAuthentication] attr。在 DomainServices 中总是返回拒绝访问。我们如何将 WebContext.Current.user 推送到 ServiceContext.user。我阅读了几个文档和教程,但每次测试都失败了。

代码示例:

CustomMembershipProvider.cs:

   public class CustomMembershipProvider : MembershipProvider    {
    public override bool ValidateUser(string username, string password)
    {
        using (var context = new TimEntities())
        {
            var user = context.User.FirstOrDefault(u => u.Username == username &&
                                                         u.Password == password);
            return user != null;
        }
    }

}

身份验证域服务:

      [EnableClientAccess]
      public class AuthenticationDomainService : AuthenticationBase<AuthUser>
      {}
      public class AuthUser : UserBase
      {}

应用程序.Xaml.Cs:

  var webContext = new WebContext();
  var formsAuth = new FormsAuthentication();
  var authContext = new AuthenticationDomainContext();
  formsAuth.DomainContext = authContext;
  webContext.Authentication = formsAuth;
  ApplicationLifetimeObjects.Add(webContext);
4

2 回答 2

2

我遇到了同样的问题,但我终于找到了答案。我一直在尝试公开 SOAP 端点,所以我可以从手机应用程序访问相同的 RIA 服务。作为其中的一部分,我在 App 构造函数中添加了以下行:

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);

摆脱它,您应该可以再次使用用户名。SOAP 端点似乎仍然暴露给手机应用程序。

于 2012-12-07T09:48:35.233 回答
0

首先,无论您是否使用 WCF RIA 服务,您都必须为您的托管网站配置表单身份验证。此外,必须在 IIS 上安装并启用Forms 身份验证。

然后你必须配置ASP.NET 成员才能使用你的CustomMembershipProvider类。

于 2013-10-09T19:06:17.000 回答