Есть, вероятно, несколько способов справиться с таким сценарием, но я думаю, что все они вовлекают просто бросать исключение из вашего IClientMessageInspect.BeforeSendRequest преждевременно закончить операцию клиента. Тип исключения, который вы бросаете, может варьироваться в зависимости от того, что ожидает потребительское приложение в вашем сценарии, или что-то, что вы можете поймать вверх по течению где-то еще.
В моем случае я создавал службу прокси/маршрутизации WCF RESTful. Мой IClientMessageInspect должен был проверять исходящие сообщения, привязанные к нашему поставщику текстовых сообщений, и не разрешать отправку исходящего сообщения в API-интерфейс поставщика, если номер исходящего телефона не был «указан в белом списке» в службе прокси-маршрутизатора маршрутизатора. Web-адрес
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; }
}
Вы когда-нибудь это решали? Я смотрю на ту же проблему, и я не нахожу ничего, чтобы отменить запрос без отправки тела –