2013-05-22 3 views
7

Wenn ich die IClientMessageInspector Schnittstelle verwende, kann ich eine Anfrage von der BeforeSendRequest Methode abbrechen? Returning null sendet die Anfrage trotzdem.So brechen Sie eine Anfrage in BeforeSendRequest ab

public object BeforeSendRequest(ref Message request, IClientChannel channel) 
{ 
    if(Condition) 
    { 
     return null; //I want cancel my send 
    } 
    else 
    { 
     return request; 
    } 
    } 
+0

Haben Sie das jemals gelöst? Ich sehe das gleiche Problem und ich finde nichts, um die Anfrage abzubrechen, ohne Körper zu senden –

Antwort

0

Sie können die Anforderung mit der Abort-Methode von IClientChannel abbrechen. Aber die Versandmethode Ihres Clients löst CommunicationObjectAbortedException aus.

public object BeforeSendRequest(ref Message request, IClientChannel channel) 
{ 
    if(Condition) 
    { 
     channel.Abort(); 
     return null; 
    } 
    else 
    { 
     return request; 
    } 
    } 
0

Es gibt wahrscheinlich mehr Möglichkeiten, um dieses Szenario zu behandeln, aber ich denke, sie alle einfach eine Ausnahme aus Ihrem IClientMessageInspect.BeforeSendRequest beinhalten werfen den Client-Betrieb vorzeitig zu beenden. Der Typ der Ausnahme, die Sie auslösen, hängt wahrscheinlich davon ab, was die verbrauchende Anwendung in Ihrem Szenario erwartet oder was Sie stromaufwärts woanders fangen können.

In meinem Fall, ich baute einen WCF RESTful Proxy/Routing-Dienst. Mein IClientMessageInspect war erforderlich, um ausgehende Nachrichten zu prüfen, die an unseren SMS-Anbieter gesendet wurden, und die ausgehende Nachricht nicht an die Service-API des Anbieters zu senden, es sei denn, die ausgehende Telefonnummer war im Router-Proxy/Routing-Dienst web.config

Wenn RouterServiceFault eine einfache Klasse ist, kann ich eine Nachricht zurückgeben, um die verbrauchende Anwendung anzuzeigen/einzuloggen.

[ServiceContract] 
public class RouterServiceFault 
{ 
    [DataMember] 
    public string Message { get; set; } 
} 
Verwandte Themen