WCF:从另一方收到未安全或未正确安全的故障

WCF:从另一方收到未安全或未正确安全的故障,wcf,Wcf,我已经用aspnet角色和安全性创建了一个wcf服务 当我在一个网站上使用它并尝试检查时,使用正确的用户名和密码,它工作正常,但使用错误的用户名和密码,它会给我一个错误: 从另一方接收到未加密或加密不正确的故障 聚会。有关故障代码和详细信息,请参见内部FaultException 我本来希望得到的是“访问被拒绝” 那么,你知道为什么吗 更新 你是对的,我们可以添加合同。。。但即使我加了,它也给了我同样的错误。。此外,我试图检查同一个用户是否为isinrole,如果不是,则从外部触发FaultEx

我已经用aspnet角色和安全性创建了一个wcf服务

当我在一个网站上使用它并尝试检查时,使用正确的用户名和密码,它工作正常,但使用错误的用户名和密码,它会给我一个错误:

从另一方接收到未加密或加密不正确的故障 聚会。有关故障代码和详细信息,请参见内部FaultException

我本来希望得到的是“访问被拒绝”

那么,你知道为什么吗

更新

你是对的,我们可以添加合同。。。但即使我加了,它也给了我同样的错误。。此外,我试图检查同一个用户是否为isinrole,如果不是,则从外部触发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;
        }
    }
protectedvoid btnSubmit\u单击(对象发送方,事件参数e)
{
尝试
{
ChannelFactory工厂=新的ChannelFactory(“*”);
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();
}
捕获(例外情况除外)
{
lblMessage.Text=ex.Message;
}
}
希望这将引导你更多地了解我的代码,你可以帮助我在更详细的。。。。
我不知道为什么其他人(我理解这个概念的参考文献很少)得到“访问被拒绝”,我不是直接从系统中得到这个信息…

您应该使用它来避免这个消息。

我刚刚遇到这个问题,不得不关闭WCF绑定上的安全上下文。您需要在客户端和服务中的绑定上关闭它们

如果您的WCF是IIS托管的,则以下是配置文件:

<ws2007FederationHttpBinding>
    <binding>
        <security mode="TransportWithMessageCredential">
            <message establishSecurityContext="false" />
        </security>
    </binding>
</ws2007FederationHttpBinding>

见此帖: