3

Silverlight 5 プロジェクトで WCF Ria サービスを使用しています。認証には、カスタム メンバーシップ プロバイダーを使用しています。RIA サービス クラス ライブラリの WCF Ria サービス。クライアント側の認証が実行されています。WebContext.Current.User.Name で現在のユーザー名にアクセスします。ただし、サーバー側の ServiceContext.User は空です。[RequireAuthentication] 属性を使用する場合。DomainServices では常に Access Denied を返します。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;
        }
    }

}

AuthenticationDomainService:

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

App.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 に答える