2010-03-19 27 views
15

que je fais un inspecteur des messages dans WCF:Comment puis-je obtenir le nom de l'opération invoquée dans un WCF message Inspecteur

public class LogMessageInspector : 
    IDispatchMessageInspector, IClientMessageInspector 

qui met en œuvre la méthode:

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

je peux obtenir le nom du service appelé avec:

instanceContext.GetServiceInstance().GetType().Name 

Mais comment obtenir le nom de l'opération invoquée?

Répondre

11

Il est pas joli, mais ce que je l'ai fait pour obtenir le nom de l'opération:

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

Le ToList() n'est pas nécessaire, n'est-ce pas? – Nuzzolilo

+0

@Nuzzolilo, non requis. –

4

Cette approche est similaire à d'autres présentés ici, mais utilise Path.GetFileName:

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

La valeur de retour de cette méthode et le format de la chaîne path fonctionnent assez harmonieusement s scénario:

Les caractères après le dernier caractère de répertoire dans le chemin. Si le dernier caractère du chemin est un caractère de séparateur de volume ou de répertoire, cette méthode renvoie String.Empty. Si le chemin est null, cette méthode renvoie null.

+0

Est venu comme une chaîne vide pour moi, tandis que la réponse de Michael a fonctionné. – jk7

+0

@ jk7: Cela est dû au fait que vous faites des requêtes RESTful (en utilisant 'WebHttpBinding' de WCF). La solution ci-dessus fonctionnera pour les requêtes SOAP (toutes les liaisons standard en plus de 'WebHttpBinding') tandis que la solution @ Michael fonctionnera pour les requêtes RESTful. –

+0

Question connexe ici: https://stackoverflow.com/questions/852860/wcf-retrieving-methodinfo-from-operationcontext –