.net Windowsサービスは、タスクのスケジューリングにQuartz.NETを使用します
Net Windows Service Uses Quartz
石英 。ネット :これは、タスク計画を実行するための単純なフレームワークであり、基本的に、ジョブ(ジョブ)、トリガー(トリガー)、スケジューラー(スケジューラー)の3つの部分が含まれます。
1.仕事割り当て:ミッション計画で実行する必要がある特定の論理操作
2.トリガートリガー:いつ、どのようなルールを実行する必要があるかジョブ操作
3.スケジューラースケジューラー:意志ジョブと引き金登録するスケジューラースケジューラーでは、主に調整を担当しますジョブ、引き金の操作
Windowsサービスは標準のC#で記述されており、タスクスケジューリングフレームワークはオープンソースのQuartz.NETを使用します。
最初にWindowsサービスを作成します-JobService
次に、クラスライブラリプロジェクトを作成します-JobLibrary
全体的なソリューションアーキテクチャ図は次のとおりです。
JobLibaryで、Quartz.NETのNugetパッケージ参照を追加します。追加後、vsは一連の依存関係を自動的に追加します。これらの依存関係は必要です。シェイクして削除しないでください。
次に、Log4netの別の実装であるCommon.Logging.Log4Net1211 Nugetパッケージを追加します。これにより、log4netの依存関係が自動的に追加されます。
追加されたすべてのパッケージは次のとおりです。
以下のタスクの追加を開始し、ライブラリにジョブクラスを追加して、IJobを継承し、そのインターフェイスを実装します
システムを使用する
System.Collections.Genericを使用する
System.Linqを使用する
System.Textを使用する
System.Threading.Tasksを使用する
クォーツを使用
名前空間JobLibrary
{{
パブリッククラスジョブ:IJob
{{
プライベート静的読み取り専用Common.Logging.ILoglogger = Common.Logging.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod()。DeclaringType)
public void Execute(IJobExecutionContext context)
{{
試してみてください
{{
logger.Info( 'ジョブ開始')
using(System.IO.StreamWriter sw = new System.IO.StreamWriter( 'd:\ log.txt'、true))
{{
sw.WriteLine(DateTime.Now.ToString( 'yyyy-MM-dd HH:mm:ss')+ '食べる---スリープ')
}
logger.Info( 'ジョブ終了') 'ジョブ終了'
}
キャッチ(例外e)
{{
logger.Error(e.Message)
}
}
}
}
このクラスはあなたがする必要があることです。私の仕事は食べて寝ることです。
次に、JobServiceにJobLibrary参照を追加し、次のコードを追加します(Nuget参照も追加する必要があります)
log4netを使用する クォーツを使用 Quartz.Implを使用する システムを使用する System.Collections.Genericを使用する System.ComponentModelを使用する System.Dataを使用する System.Diagnosticsを使用する System.Linqを使用する System.ServiceProcessを使用する System.Textを使用する System.Threading.Tasksを使用する 名前空間JobService {{ パブリック部分クラスService1:ServiceBase {{ プライベートISchedulerスケジューラー プライベート読み取り専用ILogロガー パブリックサービス1() {{ InitializeComponent() ISchedulerFactory SchedulerFactory = new StdSchedulerFactory() スケジューラー= schedulerFactory.GetScheduler() ロガー= LogManager.GetLogger(GetType()) } 保護されたオーバーライドvoidOnStart(string [] args) {{ logger.Info( 'Quartzサービスが正常に開始されました') Scheduler.Start() } 保護されたオーバーライドvoidOnStop() {{ Scheduler.Shutdown(false) } } } |
コードが完成したら、quartz_jobs.xmlを構成し、xml構成ファイル「quartz_jobs.xml」をJobServiceプロジェクトに追加して、タスク構成を追加する必要があります。
true
DemoJob1
DeomJobGroup
Quartz.Netサンプルタスク1
JobLibrary.Job、JobLibrary
true
false
DemoJob1Trigger
DeomJobTriggerGroup
DemoJob1
DeomJobGroup
0/3 * * * *?
この構成ファイルには不可解なバグがあります。つまり、上部の数行に空白行を含めることはできません。状況がわかりません。長い間これに悩まされていました。
次に、quartz.config構成ファイルを追加します
#どちらの構成セクションでもスケジューラーを構成できます
#またはクォーツプロパティファイル
#構成セクションが優先されます
quartz.scheduler.instanceName = ServerScheduler
#スレッドプール情報を構成する
quartz.threadPool.type = Quartz.Simpl.SimpleThreadPool、Quartz
クォーツ.threadPool.threadCount = 10
クォーツ.threadPool.threadPriority =通常
#ジョブ初期化プラグインは、デフォルトが使用されることなく、xmlの読み取りを処理します
quartz.plugin.xml.type = Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin、Quartz
quartz.plugin.xml.fileNames =〜/ quartz_jobs.xml
#このサーバーをリモートコンテキストにエクスポートする
quartz.scheduler.exporter.type = Quartz.Simpl.RemotingSchedulerExporter、Quartz
quartz.scheduler.exporter.port = 8092
quartz.scheduler.exporter.bindName = QuartzScheduler
quartz.scheduler.exporter.channelType = tcp
quartz.scheduler.exporter.channelName = httpQuartz
次に、app.configファイルがあります。
次にコンパイルします。App.config、quartz_jobs.xml、quartz.configの3つのファイルがすべて選択されていることを覚えておいてください。右クリックして、「出力ディレクトリにコピー」を選択します。「常にコピー」を選択します。そうしないと、読み取られません。
次のコンパイル済みファイルをD: JobService にコピーします
次の2つの方法でサービスを作成できます。
(1)コンソールで次のコマンドを実行します。sccreateQuartzService binpath = D: QuartzService Quartz.Net.Service.exe
完全なサービスの作成
QuartzServiceサービスを開始すると、D: QuartzService のログファイルに次の出力が表示されます。たとえば、次の図()
(2)cmdはコマンドラインツールを開き、インストールまたはアンインストールコマンドを実行します(次のディレクトリが存在します)。
インストールコマンド:
CDC: WINDOWS Microsoft.NET Framework v4.0.30319
C: WINDOWS Microsoft.NET Framework v4.0.30319 InstallUtil.exe'D: JobService JobService.exe'
以下に示すように:
マイコンピュータの「サービス」でJobSerivce1サービス名を検索します-「右クリック-」
サービスを開始します。
JobService1を開始しないでください
故障中
JobService1を停止しないでください
次に、サービスのアンインストールコマンドを示します。
C: WINDOWS Microsoft.NET Framework v4.0.30319 InstallUtil.exe / u'D: JobService JobService.exe'
道'
起動後、ファイルに書き込まれた内容を確認できます。
デバッグ:
サービスのメソッドであるブレークポイントメソッドをデバッグする必要がある場合は、[生成]-[プロセスにアタッチ]を選択して、以下に示すように対応するサービスプロセスを見つけます。
サービスが実行されると、自動的にブレークポイントにジャンプします。
注:サービスの開始後に1053エラーが報告された場合は、appconfig構成ノードconfigSectionsノードを一番上に配置する必要がある可能性があります。下に置いてありますが、いつもサービスを開始できるとは限りません。トップに変更すれば、正常に起動できます。見つける長い間存在していた問題が他の人によって発見されました。
転載元:http://www.cnblogs.com/yangkangIT/p/5665102.html
私はいくつかの変更を加えました