2017-08-29 15 views
-1

私は一定の間隔(例えば1分)でトリガーするジョブを構築しています。私は正常に関数でハードコードされたタイムスパンでトリガーされたWebジョブを使いました。設定可能なタイマートリガー - Azure Webジョブ

public void foo([TimerTrigger("00:01:00")] TimerInfo timer) 

トリガー時間を1分から2分に変更したい場合は、コードを再デプロイする必要があります。代わりに、設定ファイルからTimeTriggerを設定可能にする方法があります。

TimerTrigger属性はconst文字列式またはTypeであるため、文字列を動的に読み取られた値に置き換えることはできません。

答えて

2

私はこれをSDKエクステンションクラスTimerScheduleで行うことができます。

このため、複数のトリガーに使用できる基本クラスが必要です。あなたのタイマーを生成する

class CustomTimerTriggerBase: TimerSchedule 
{ 
    TimeSpan timer; 
    public CustomTimerTriggerBase(string triggerConfigKey) 
    { 
     timer=TimeSpan.Parse(ConfigurationManager.AppSettings[triggerConfigKey]); 
    } 

    public override DateTime GetNextOccurrence(DateTime now) 
    { 
     return now.Add(timer); 
    } 
} 

使用このベース...あなたのApp.configファイルで

public sealed class FooTimer : CustomTimerTriggerBase 
{ 
    public FooTimer() : base("FooTimerKey") {} 
} 

は "FooTimer"

<add key="FooTimerKey" value="00:02:00" /> 

使用あなたのwebjobでこのFooTimerクラスのためのキーを持っています機能。

public void foo([TimerTrigger(typeof(FooTimer)] TimerInfo timer) 

コードを再デプロイする代わりに、単にapp configの値を変更するだけで済みます。 :Timespanを解析するために、この文字列はTimeSpan形式で定義されているような任意の形式にすることができます。

0

私の知る限りでは、あなたのコード内の特定にTimerTriggerためscheduleExpressionパラメータを必要とするか、実装あなたのWeeklyScheduleまたはこのサンプルTimerSamples.csで説明DailySchedule。コードを再デプロイせずにスケジュールを変更する場合は、Azure Schedulerを使用してスケジュールを設定し、予定通りにスケジュールを変更することができます。詳細は、tutorialのスケジューラージョブの追加に関するセクションを参照してください。

+1

お返事ありがとうございます。私はちょうど毎週または毎日のスケジューリングの代わりに、より設定可能な方法を探していました。私は組み込みAzure SDKの 'TimerSchedule'拡張でそれを行う方法を考え出しました。これは基本的に 'WeeklyScedule'と' DailySchedule'と同じで、よりコントロールできます。 –

関連する問題