5

aspnet の役割とセキュリティを備えた 1 つの wcf サービスを作成しました。

あるWebサイトでそれを消費して確認しようとすると、正しいユーザー名とパスワードで完全に機能しますが、ユーザー名とパスワードが正しくないとエラーが発生します:

保護されていない、または誤って保護された障害が相手から受信されました。障害コードと詳細については、内部の FaultException を参照してください。

代わりに「アクセスが拒否されました」と表示されることを期待していました。

それで、なぜですか?

アップデート

あなたは正しいFaultContractsを追加できます...しかし、追加しても同じエラーが発生します..さらに、同じユーザーがinroleであるかどうかを確認しようとしましたが、そうでない場合は外部でFaultExceptionを発生させました...

実際の「アクセスが拒否されました」を取得せずに、同じエラーが引き続き発生します。

資格情報と役割を確認するためにaspnetフォーム認証を使用したことを更新するために...コードはやや似ています

public class SampleService : ISampleService
{
    [PrincipalPermission(SecurityAction.Demand, Role = "admin")]
    public string GetCurrentTime()
    {
        if (!Roles.IsUserInRole(HttpContext.Current.User.Identity.Name, "admin"))
            return DateTime.Now.ToString();
        else
            throw new FaultException("Access is denied");
    }
}

[ServiceContract]
public interface ISampleService
{
    [OperationContract]
    string GetCurrentTime();
}

クライアント側で、私が消費したところで、このサービス...

protected void btnSubmit_Click(object sender, EventArgs e)
    {
        try
        {
            ChannelFactory<AuthCustWithAspnetRoleService.ISampleService> factory = new ChannelFactory<AuthCustWithAspnetRoleService.ISampleService>("*");
            factory.Credentials.UserName.UserName = txtUserName.Text.Trim(); // "admin"; 
            factory.Credentials.UserName.Password = txtPassword.Text.Trim(); // "admin";
            AuthCustWithAspnetRoleService.ISampleService proxy = factory.CreateChannel();
            lblMessage.Text = proxy.GetCurrentTime();
        }
        catch (Exception ex)
        {
            lblMessage.Text = ex.Message;
        }
    }

これが私のコードについてより多くのことを導き、あなたが私をより詳細に助けてくれることを願っています....他の(この概念を理解した参照はほとんどありません)が「アクセスが拒否されました」と表示された理由がわかりません。システムから...

4

2 に答える 2

1

このメッセージを回避するには、 FaultContractsを使用する必要があります。

于 2012-07-17T07:27:17.427 に答える