2017-08-18 12 views
2

Azure関数のアプリケーション(新しい.net class libraryアプローチを使用)を使用して、生成されたリソースを共有するために静的なコンストラクタで初期化します。Azure関数静的コンストラクタエラーログ

公式ドキュメントでは、HttpClientin a web apiのようなリソースを共有することを推奨しています。

Azure Functions C# script developer referenceのドキュメントの最後の説明では、スレッドセーフであるため、各リクエストの再インスタンス化を防ぐために、HttpClientを静的変数に配置しています。

私は2つのことが不思議です。

  1. すべてのリクエストで使用される高価な「セットアップ」リソースを初期化するための静的コンストラクタは問題ありませんか?

  2. これらのリソースの初期化が失敗した場合、スタティックコンストラクタでエラーロギングをどのように設定する必要がありますか?

は、ここで私は正常に動作TraceWriterのDIを使用して、私のRun方法でエラーログを実行する私のクラス定義

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 
    } 
} 

です。これを使用して関数のAzureポータルコンソールのエラーを表示できますが、静的コンストラクタにはパラメータを設定できないため、リソースの初期化ではこのアプローチは機能しません。

Azure function docsにこの質問の別の参照がありますが、回答はここで質問することでした。

答えて

2

共有リソースの初期化ロジックを実行する静的コンストラクタに限定されません。

いくつかの方法の1つは、関数が呼び出されたときに静的な初期化を実行し、ロガーやその他の関連情報を渡し、ダブルを避けるための適切なチェックを確実にするためのリソースを管理するクラス初期化。

関数フィルタは、我々はすぐにリリースする予定です機能は、同様にこれらのシナリオで役立ちます。https://github.com/Azure/azure-webjobs-sdk/wiki/Function-Filters

+0

ので、フィルタは現在webjobsのために利用可能であり、すぐに機能のために利用できるようになりますか?私はAzure関数で当てはまらないものをグローバルに宣言するオプションに気づいた(右?)。その物語は洗練されていますか?これは、認証層で複数の機能をカバーする優れたアプローチです。 – seangwright