2010-03-19 3 views
15

Sto facendo un messaggio ispettore WCF:Come faccio ad avere il nome dell'operazione invocato all'interno di un messaggio WCF ispettore

public class LogMessageInspector : 
    IDispatchMessageInspector, IClientMessageInspector 

che implementa il metodo:

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

posso ottenere il nome del servizio richiamato con:

instanceContext.GetServiceInstance().GetType().Name 

Ma come si ottiene il nome dell'operazione richiamata?

risposta

11

Non è bello, ma questo è quello che ho fatto per ottenere il nome dell'operazione:

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

Il ToList() non è necessario, vero? – Nuzzolilo

+0

@Nuzzolilo, Non richiesto. –

4

Questo approccio è simile agli altri qui presentata, ma utilizza Path.GetFileName:

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

Il valore restituito di questo metodo e il formato della stringa path funzionano in modo abbastanza armonioso in s scenario:

I caratteri dopo l'ultimo carattere di directory nel percorso. Se l'ultimo carattere di percorso è un carattere di separatore di directory o di volume, questo metodo restituisce String.Empty. Se path è null, questo metodo restituisce null.

+0

Venuto come una stringa vuota per me, mentre la risposta di Michael ha funzionato. – jk7

+0

@ jk7: Ciò è dovuto al fatto che si stanno facendo richieste RESTful (usando 'WebHttpBinding' di WCF). La soluzione sopra funzionerà per le richieste SOAP (qualsiasi binding standard oltre a 'WebHttpBinding') mentre la soluzione di @ Michael funzionerà per le richieste RESTful. –

+0

Domande correlate qui: https://stackoverflow.com/questions/852860/wcf-retrieving-methodinfo-from-operationcontext –