2017-10-04 3 views
0

Je cherche à utiliser Microsoft.Azure.WebJobs.ExecutionContext pour obtenir le InvocationId lorsqu'une fonction est en cours d'exécution, mais est-il possible de l'obtenir en dehors de l'appel de fonction actuel. Par conséquent, si une classe appelante a besoin d'un contexte, elle peut l'utiliser. C'est possible?Azure Fonction Contexte

+0

Un InvocationId est attribué par appel de fonction. Pas vraiment sûr de la façon dont vous vous attendez à y accéder en dehors du contexte d'une fonction appelée car elle n'existe pas encore –

Répondre

0

Lorsque vous exécutez une fonction que vous avez ExecutionContext

public static HttpResponseMessage Run(HttpRequestMessage req, TraceWriter log, ExecutionContext context) 
{ 
    return req.CreateResponse(System.Net.HttpStatusCode.OK, context.InvocationId); 
} 

Donc, si vous appelez une méthode que vous aurez probablement besoin de cet identifiant chemin à lui. Je ne suis pas sûr s'il y a une sorte d'aide statique pour cela.

+0

J'ai vu le ExecutionContext mais j'ai besoin d'y accéder en dehors de la méthode Run. Je ne peux pas vraiment l'assigner à un statique car le statique est partagé entre tous les appels à cette fonction. – Craig

+0

Mais vous allez exécuter la méthode dans la méthode Exécuter à droite? –

+2

Pas vraiment, il utilise l'injection de dépendances pour que toutes sortes d'autres classes soient attirées par le besoin de connaître le contexte auquel elles ont été appelées. – Craig

0

Vous devez enfiler ce paramètre en tant que paramètre dans tous vos appels, en essayant de résoudre ce problème avec un type de stockage ambiant, comme TLS ou AsyncLocal n'est probablement pas la meilleure approche, mais cela fonctionnera probablement.

Si vous n'utilisez pas API async que vous pourriez vous en sortir avec:

[ThreadLocal] 
public static Guid InvocationId; 

... mais si vous utilisez async, vous pouvez essayer:

public static AsyncLocal<Guid> InvocationId = new AsyncLocal<Guid>(); 

Bonne chance!