Azure Function上下文

3

我想使用Microsoft.Azure.WebJobs.ExecutionContext在函数运行时获取InvocationId,但是是否有一种方法可以在实际函数调用之外获取它。

因此,如果调用类需要某种上下文,则可以使用此内容。这可能吗?


1
每个函数调用都会分配一个InvocationId。不太确定您希望在被调用的函数上下文之外如何访问它,因为它尚不存在。 - Jesse Carter
2个回答

0

你需要将它作为参数在所有的调用中传递,试图通过一些环境存储(如TLSAsyncLocal)来解决这个问题可能不是最佳的方法,但可能会起作用。

如果你不使用异步API,你可能可以这样做:

[ThreadLocal]
public static Guid InvocationId;

...但是如果你使用异步,你可以尝试:

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

祝你好运!


0
当你运行一个函数时,你会有执行上下文
public static HttpResponseMessage Run(HttpRequestMessage req, TraceWriter log, ExecutionContext context)
{
    return req.CreateResponse(System.Net.HttpStatusCode.OK, context.InvocationId);
}

所以如果你调用任何方法,你可能需要将这个id传递给它。我不确定是否有任何静态助手可以做到这一点。


我已经看到了ExecutionContext,但我需要在Run方法之外访问它。我不能将它分配给静态变量,因为静态变量在对该函数的所有调用中共享。 - Craig
5
不完全是,它使用依赖注入,因此需要引入各种其他类,这些类需要知道它们被调用的上下文。 - Craig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接