可能有多种方法可以处理这种情况,但我认为它们都涉及简单地从 IClientMessageInspect.BeforeSendRequest 中抛出异常以提前结束客户端操作。您抛出的异常类型可能会有所不同,具体取决于使用应用程序在您的场景中所期望的内容,或者您可以在上游其他地方捕获的内容。
就我而言,我正在构建 WCF RESTful 代理/路由服务。我的 IClientMessageInspect 需要检查发往我们的短信供应商的传出消息,并且不允许将传出消息发送到供应商的服务 API,除非出站电话号码在路由器代理/路由服务 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; }
}