在使用IClientMessageInspector接口时,是否可以取消来自BeforeSendRequest方法的请求?无论如何,返回null都会发送请求。
 public object BeforeSendRequest(ref Message request, IClientChannel channel)
 {
    if(Condition)
    {
        return null; //I want cancel my send
    }
    else
    {
       return request;
    }
  }发布于 2016-05-10 23:26:21
您可以使用IClientChannel的Abort方法取消请求。但是客户端的分派方法抛出了CommunicationObjectAbortedException.
public object BeforeSendRequest(ref Message request, IClientChannel channel)
 {
    if(Condition)
    {
        channel.Abort();
        return null;
    }
    else
    {
       return request;
    }
  }发布于 2017-04-04 03:57:53
可能有多种方法来处理这种情况,但我认为它们都只涉及到在IClientMessageInspect.BeforeSendRequest中抛出一个异常来提前结束客户端操作。抛出的异常类型可能会有所不同,这取决于消费应用程序在您的场景中所期望的内容,或者您可以在上游其他地方捕获的内容。
在我的例子中,我正在构建一个WCF代理/路由服务。我的IClientMessageInspect被要求检查发往我们的短信供应商的输出消息,并且不允许输出消息被发送到供应商的服务应用编程接口,除非出站电话号码在路由器代理/路由服务web.config中被“白名单”
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    if (!WhiteList.IsWhiteListed(outboundNumber))
    {
        throw new WebFaultException<RouterServiceFault>(new RouterServiceFault {Message = $"Phone number {outboundNumber} is not white listed." }, HttpStatusCode.Forbidden);
    }
    // Save the routed to service request address so we can see it after receive reply (in correlationState)
    return request.Headers.To;
}在RouterServiceFault是一个简单类的情况下,我可以回传一条消息来显示/记录消费应用程序。
[ServiceContract]
public class RouterServiceFault
{
    [DataMember]
    public string Message { get; set; }
}https://stackoverflow.com/questions/16696750
复制相似问题