(私はWindowsサービスを初めて使用します)データベーステーブルからいくつかのレコードをフェッチし、すべてのレコードに対してWebサービスメソッドを呼び出し、メソッドの戻り値とその他の情報をテーブルに挿入する自動Windowsサービスがあります。私の問題は以下のとおりです。
1-サービスを手動で開始しようとすると、Error 1053 (the service did not respond to the start or control request in a timely fashion)
. ところで、エラー サービスが開始され、それがしなければならないことを実行します。
2- (よくある問題であることは承知していますが、もう一度お聞きしたいと思います) サービスは自動ですが、データベース接続に依存します。サービスが実行されているシステムが再起動されると、手動で開始する必要がありました。Thread.Sleep()
この問題を回避するためにコード行を追加します。問題を解決するための本当の方法は何ですか?
protected override void OnStart(string[] args)
{
checkRegistryForOracleNLS();
//Creating event log
plog = new System.Diagnostics.EventLog();
if (!System.Diagnostics.EventLog.SourceExists("Prov"))
{
System.Diagnostics.EventLog.CreateEventSource("Prov", "ProvLog");
}
plog.Source = "Prov";
plog.Log = "ProvLog";
plog.Clear();
Log("Service started at " + DateTime.Now.ToLongTimeString(), System.Diagnostics.EventLogEntryType.Information);
class_ora_tran.int_class_ora_tran();
DataTable dt;
Thread.Sleep(300000);
while (true)
{
Con2DB();
if (class_ora_tran.dbConnected())
{
RemoveOldRecords();
dt = FetchRec();
if (dt != null)
{
if (dt.Rows.Count > BLKSize)
Bulk(dt);
else
Single(dt);
}
}
}
}
3- メソッドは書いたがOnStop()
、サービス実行中の停止機能がなく停止したい。また、私のサービスは常に開始モードであり、開始済みに変わることはありません。
Protected void OnStop(string[] args)
{
class_ora_tran.Disconnect();
Log("Service stoped at " + DateTime.Now.ToLongTimeString(), System.Diagnostics.EventLogEntryType.Information);
plog.Close();
}
4- ときどき、ステータスは開始中ですが、サービスが必要な処理を停止し、テーブルからレコードをフェッチしません。以前に 2 回発生しましたが、残念ながらイベント ビューアーでエラーが発生していないか確認するのを忘れていました。何が原因か誰か知っていますか?それは私が上で述べた問題に関連していますか?
5- サービスをアンインストールするたびに、アンインストール コマンドを 2 回実行する必要がありました。何か助けはありますか?
編集: レコードは論争の的にテーブルに挿入され、新しいレコードがテーブルに入力されるたびに、Web サービスなどを呼び出すプロセスを実行する必要があります。While(true) ループが必要だと思いました。この部品を交換する提案はありますか?