你如何拒绝WCF中的消息?

时间:2017-02-20 23:14:55

标签: wcf wcf-security

我正在迁移到Azure,它使用安全令牌来验证用户身份。所以现在我在邮件的标题中传递安全令牌,并使用服务器端的 IDispatchMessageInspector 行为来读取它。基础知识工作非常好,但是当令牌无法通过身份验证时,我需要拒绝它,就像它已经 UserNamePasswordValidator 一样失败。如何完成此代码的任何想法:

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
{
    if (!this.IsAuthenticated(securityToken))
    {
        <Return Error Message Structure>
    }
}

1 个答案:

答案 0 :(得分:2)

简单的选择是抛出FaultException

object IDispatchMessageInspector.AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
    try
    {
        if (!this.IsAuthenticated(securityToken))
        {
           throw new FaultException<string>("some message");
        }
    }      
    catch (FaultException e)
    {
        throw new FaultException<string>(e.Message);
    }
    return null;
}

如果你想要更优雅的东西并控制返回的HttpStatus代码(默认为500),那么你可以实现一个端点行为扩展,它注册一个监视故障的Dispatch Message Inspector。见以下帖子:

http://www.shulerent.com/2016/05/31/returning-custom-http-status-codes-for-wcf-soap-exceptions/