0

(私は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) ループが必要だと思いました。この部品を交換する提案はありますか?

4

1 に答える 1

2

あなたのサービスについていくつかの提案をします。

  1. サービスを手動で開始します。したがって、サービスをインストールしたら、一度だけ手動で開始するだけです。
  2. 開始したら、ロジックを実行するための適切なオプションがいくつかあります。

    . X 分ごとに実行http://www.codeproject.com/Questions/540617/windowsplusserviceplustoplusrunpluseveryplusoneplu

    . Run at hh:mm 毎日指定された時刻に機能を実行する Windows サービス 。すぐに実行

  3. コードを関数に入れTimer_Elapsed()、上記のリンクの例で選択した関数でこの関数を呼び出します

  4. OnStart を使用してタイマー情報を設定したり、Config ファイルを読み込んだりします。

  5. Windows の [プログラムの追加と削除] を使用して、サービスを削除してみてください。(インストーラー msi を作成してサービスをインストールします。コマンド ラインを保存します) Visual Studio を使用して .net Windows サービスのインストーラーを作成する方法

于 2014-02-22T07:40:03.610 に答える