2017-09-28 3 views
1

私は毎日午前1時に実行する必要があるウェブジョブを持っています。 私settings.jobは、このように構成されています予定のウェブジョブがスケジュールを混乱させる

{ 
    "schedule": "0 0 1 * * *", 
    "is_singleton": true 
} 

私はFunctions.csで宣言された関数を持っている

namespace Dsc.Dmp.SddUpgrade.WebJob 
{ 
    using System; 
    using System.IO; 

    using Microsoft.Azure.WebJobs; 

    public class Functions 
    { 
     public static void TriggerProcess(TextWriter log) 
     { 
      log.Write($"C# Timer trigger function executed at: {DateTime.Now}"); 
     } 
    } 
} 

私は取得しています次のログ:

[09/28/2017 12:02:05 > 9957a4: SYS INFO] Status changed to Running 
[09/28/2017 12:02:07 > 9957a4: INFO] No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. config.UseServiceBus(), config.UseTimers(), etc.). 

私が読んでいくつかの人々はこのような関数の署名を使用しています:

public static void TriggerProcess([TimerTrigger("0 0 1 * * *")] TimerInfo timerInfo, TextWriter log) 

しかし、これは、私のウェブジョブをsettings.jobで予定通りに設定しているため、これは私には論理的ではないようです。

私はここで何が欠けていますか?

+0

Program.csのMain機能を確認できますか? –

答えて

0

settings.jobファイルを使用してWebJobのスケジュールを設定する場合、ロジックはProgram.csのMain機能に入る必要があります。このルートに行くと、Functions.csファイルを無視することができます。これは、コンソールアプリケーションをWebJobに移行してスケジュール設定するのに最適です。

TimerTriggerはWebJob拡張です。 Functions.csに複数のメソッドを持たせることができ、それぞれ別々のTimerTriggerを別々のスケジュールで実行できるので便利です。これらを使用するには、WebJobを継続する必要があります。

+0

それは理にかなっています! – Identity

+0

さらにもう1つの質問ですが、コンソールアプリのアプローチを選択した場合、どうすればWebジョブにログインできますか? Console.WriteLineを使うだけで? – Identity

+0

参照:https://stackoverflow.com/questions/22417081/how-do-i-write-to-the-logs-in-azure-webjobs-from-a-c-sharp-console-app –

2

ロジックをProgram.csに配置する必要があります。

ランタイムは、実行可能ファイルを実行し、Program.csでMainメソッドを実行することによってWebJobを実行します。