Azure函数静态构造函数错误日志记录

sea*_*ght 6 c# azure azure-functions

我有一个Azure功能应用程序(使用更新的.net class library方法),我使用静态构造函数初始化,以便共享生成的资源.

官方文档建议像HttpClient 在web api中共享资源.

Azure函数C#脚本开发人员参考文档底部的讨论提到放置HttpClient一个静态变量以防止对每个请求进行重新实例化,因为它是线程安全的.

我想知道两件事.

  1. 静态构造函数是否可以初始化所有请求使用的昂贵的"设置"资源?

  2. 如果这种方法没问题,如果这些资源的初始化失败,如何在静态构造函数中配置错误日志记录?

这是我的班级定义

public static class HttpSubmissionTrigger
{
    private static readonly SendGridClient sendGridClient;
    private static readonly Func<IDictionary<string, object>, string> template;
    private static readonly EmailAddress senderEmail;
    private static readonly string emailTitle;
    private static readonly HttpResponseMessage errorResponse;

    static HttpSubmissionTrigger()
    {
          // ... initialization of above static members here
    }

    public static async Task<HttpResponseMessage> Run(...)
    {
         // ... use static members here to send emails, respond to client
    }
}
Run Code Online (Sandbox Code Playgroud)

Run使用DI的方法在我的方法中执行错误记录TraceWriter,这很好.我可以使用它来查看Azure门户控制台中的函数错误,但静态构造函数不能有参数,因此该方法不适用于资源初始化.

Azure函数文档中还有另一个对此问题的引用,但响应是在此处提出问题.

Fab*_*nte 4

您不仅限于使用静态构造函数来执行共享资源的初始化逻辑。

几种可能的方法之一是让一个类为您管理这些资源,在调用函数时执行静态初始化,传递记录器和其他相关信息,确保进行适当的检查以避免双重初始化。

我们即将发布的函数过滤器功能也将有助于解决这些场景: https: //github.com/Azure/azure-webjobs-sdk/wiki/Function-Filters