2

さまざまな継続的なタスクを実行するいくつかの異なる c# ワーカー アプリケーションがあります: キューからの電子メールの送信、Web サイト データベースから注文データベースへの新しい注文のインポート、データベースのバックアップと復元の作成、OLTP -> OLAP のデータ処理の実行、およびその他の関連タスク。以前は Windows サービスとしてリリースしていましたが、現在は通常のコンソール アプリケーションとしてリリースしています。それらはすべて、私が作成した一般的なタスク ランナー フレームワークに基づいており、これには満足していますが、これらのタイプのアプリケーションをデプロイする最善の方法が何であるかはわかりません。コンソール バージョンは、すばやく簡単に使用でき、プログラムのアクティビティと出力をすばやく確認できるため、気に入っています。欠点は、ワーカー コンピューターで複数のコンソール画面が実行されているため、煩雑になることです。一方、サービス メソッドはデプロイに時間がかかるようで、イベント ログを調べてメッセージを確認する必要があります。これに関するいくつかの経験/コメントは何ですか?

4

8 に答える 8

2

コンソール アプリのアプローチが気に入っています。私は通常、コンソール画面を抑制する -unattended のようなスイッチを渡すことができるように設定しています。

于 2008-09-30T21:16:21.190 に答える
1

Windows サービスは適切な選択です。現在のセッションを閉じてもバックグラウンドで実行されます。また、サーバーでパッチの更新を実行するときに、Windows の再起動後に自動的に開始するように構成することもできます。重要なメッセージをイベント ビューアまたはデータベース テーブルに記録できます。

于 2008-09-30T21:19:20.153 に答える
1

このようなことを行う標準的な方法は、Windows サービスを使用することです。ログインしているユーザーを必要としないように、サービスをネットワーク アカウントで実行する必要があります。

于 2008-09-30T21:25:20.263 に答える
1

すべての世界を最大限に活用して、次のようなものを使用してみませんか:
http://topshelf-project.com/

プログラムをコマンド ラインまたは Windows サービスとして実行できます。

于 2011-11-03T18:23:36.810 に答える
1

Windows サービスに投票します。これらのコンソール アプリケーションを管理するのは本当に大変なことになるでしょう。

Windows サービスの展開は簡単です。最初のインストール後、それらをオフにして XCOPY を実行するだけです。複雑なインストーラーを実行する必要はありません。最初はやや複雑ですが、それでも

installutil MyApp.exe

最高のセキュリティと他のマシンとの相互運用を容易にするために、サービスをドメイン アカウントで実行するように構成します。

重要な通知にはイベント ログ (エラー、警告、および情報) を組み合わせて使用​​し、詳細なログをテキスト ファイルにダンプするだけです。

于 2008-09-30T21:30:45.100 に答える
1

私は数年前に同様の問題を抱えた何かに取り組みました。論理的にはサービスが必要でしたが、時々何が起こっているのかを確認する必要があり、一般的には履歴が必要でした. そこで私は、ログに記録したいときはいつでも、サブスクライバーを呼び出す (オブザーバー パターンとして実装された) サービスを開発しました。

サービスは独自のデータ ロガーを登録し (データベースへの書き込み)、実行時に、ユーザーはリモート処理を使用してサービスに接続された GUI を実行し、ライブ リスナーになることができました。

于 2008-09-30T21:29:44.793 に答える
0

これがあなたのアプリケーションに当てはまるかどうかはわかりませんが、ユーザー入力に依存しないコンソールアプリケーションがある場合、またはそれらが単に仕事をして終了する種類のアプリケーションである場合、そのようなプログラムを仮想環境で実行しますこれにより、作業中に画面がポップアップ表示されなくなり、仮想サーバーの作成と再起動が簡単になります。

于 2009-02-20T20:44:34.963 に答える
0

バックグラウンドプロセスとしてWindowsサービスを定期的に使用しています。コマンドライン アプリは好きではありません。実行するにはサーバーにログインする必要があるからです。サービスは常にバックグラウンドで実行されます (自動開始を前提としています)。また、Windows にある sc.exe コマンドライン ツールを使用して簡単にインストールできます。installutil.exe というブロートウェアよりも気に入っています。もちろん、installutil はさらに多くのことを行いますが、その機能は必要ありません。サービスを登録したいだけです。

また、インターフェース定義に基づいて .DLL をロードする汎用サービス .exe を持つインフラストラクチャも作成したため、新しい「サービス」の追加は、新しい DLL をドロップしてサービス ホストを再起動するのと同じくらい簡単です。

しかし、私たちはサービスから離れ始めました。私たちが抱えている問題は、(明らかな理由で) DLL がロックされているため、アップグレードするのが面倒なことです。停止し、アップグレードしてから再起動する必要があります。難しいことではありませんが、追加の手順です。代わりに、必要な実際のバックグラウンド ジョブを実行する asp.net アプリの特別な「ページ」に移動します。サービスはまだありますが、すべて asp.net ページを呼び出すため、DLL がロックされることはありません。次に、asp.net の bin ディレクトリにある DLL を置き換えて、アプリ ドメインの再起動の通常の asp.net ルールを適用します。

于 2009-05-05T19:37:35.863 に答える