2010-03-19 10 views
15

ich eine Nachricht Inspektoren in WCF tun:Wie erhalte ich die aufgerufenen Operation Namen innerhalb eines WCF Nachricht Inspektoren

public class LogMessageInspector : 
    IDispatchMessageInspector, IClientMessageInspector 

, die das Verfahren implementiert:

public object AfterReceiveRequest(ref Message request, 
    IClientChannel channel, InstanceContext instanceContext) 

ich den Namen bekommen des aufgerufenen Dienstes mit:

Aber wie bekomme ich den Namen der aufgerufenen Operation?

Antwort

11

Es ist nicht schön, aber das ist, was ich tat den Operationsnamen zu erhalten:

var action = OperationContext.Current.IncomingMessageHeaders.Action; 
var operationName = action.Substring(action.LastIndexOf("/", StringComparison.OrdinalIgnoreCase) + 1); 
8
var operationName = OperationContext.Current.IncomingMessageProperties["HttpOperationName"] as string; 
1
OperationContext.Current.IncomingMessageHeaders.Action.Split('/').ToList().Last(); 
+1

Die ToList() ist nicht notwendig, oder? – Nuzzolilo

+0

@Nuzzolilo, nicht erforderlich. –

4

Dieser Ansatz ist ähnlich wie andere hier vorgestellt, nutzt aber Path.GetFileName:

Path.GetFileName(OperationContext.Current.IncomingMessageHeaders.Action); 

Der Rückgabewert dieser Methode und das Format der path Zeichenkette arbeiten ziemlich harmonisch in thi s-Szenario:

Die Zeichen nach dem letzten Verzeichniszeichen im Pfad. Wenn das letzte Zeichen des Pfads ein Verzeichnis- oder Volume-Trennzeichen ist, gibt diese Methode String.Empty zurück. Wenn path null ist, gibt diese Methode null zurück.

+0

Ist für mich als leere Saite aufgetaucht, während Michaels Antwort funktioniert hat. – jk7

+0

@ jk7: Dies ist aufgrund der Tatsache, dass Sie RESTful Anfragen (mit 'WebHttpBinding' von WCF). Die obige Lösung funktioniert für SOAP-Anforderungen (alle Standardbindungen außer 'WebHttpBinding'), während @ Michaels Lösung für RESTful-Anforderungen funktioniert. –

+0

In Verbindung stehende Frage hier: https://stackoverflow.com/questions/852860/wcf-retrieving-methodinfo-from-operationcontext –