私が現在得ているものは、この疑似コードで要約することができます:
public static void Main(string[] args)
{
var listOfObjects = Database.GetObjectsToUploadToOnlineService();
Parallel.ForEach(Upload)
}
private static void Upload(MyUploadObject obj)
{
//Build object (takes a few milliseconds)
//Format to JSON (takes a few more milliseconds)
//Upload (can take up to a max of 10 minutes)
//Wait for a response (can take up to a max of 10 minutes)
//Save response to our database (takes a few milliseconds)
}
このプログラムは、スケジュールされたタスクとしてサーバー上でセットアップされるだけです。私たちはプログラムを所有しており、それを使って私たちが望むことを行うことができます。私の質問は、自動監視チェックの作成に関するブログに由来しています(便利なリンクはありません)。
それで私は考えるようになりました:別の「監視」プログラムを起動できるように、プログラムを世界でどのように変更できますか?または、これをコンソールプログラムから [〜#〜] wpf [〜#〜] プログラムと非表示に変更する必要がありますか?
全体として、ネットワーク経由でプログラムの進行状況をチェックするプログラムを自分のコンピューターで実行できるようにしたいので、必要はありません [〜#〜] rdp [〜#〜] ステータスを確認するためにサーバーに入力します(ただし、世界の終わりではありません)。
全体として、次のようなウィンドウを表示したいと思います。これまでにx/yを処理しています。次のアイテムが処理されています。アイテムをテーブルなどに一覧表示し、「アップロード中」や「応答待ち」のように言ってもらいます。多分私が夢中になれば、失敗したアイテムのキューをどのように並べることもできました(しかしそれはただ余分になるでしょう)。
私の心は常にイベントに傾いていますが、実行中のプログラムをサブスクライブおよびサブスクライブ解除できるプログラムを実行する方法がわかりません。これは可能ですか?
必要なのは、プログラムを相互に結び付けないプログラム間の通信方法です。これを行う方法はいくつかあります。タスクにファイルへの書き込みとファイルからの読み取りを監視させ、WCF経由でタスクを利用可能にして、モニターが変更を「ポーリング」し、ネットワークを使用できるようにする必要があります。
ホイールの再発明を回避するには、 log4net logging targets を見てください。このようなものを実装する場合は、おそらくlog4netを使用してUDPまたはTelnetにログを記録し、もう一方の端のモニターに接続しますそれ。 log4netは、アクティブなモニターがないときに例外をスローしないなど、すべてのことを処理します。
あなたのコメントから、あなたは利用可能なクライアント/サーバーデータベースを持っていると思います、そしてあなたのアップローダーはすでに接続と書き込みアクセスを持っていますか?次に、「監視」または「ステータス」テーブルをデータベースに追加し、アップローダーに進行状況を報告させるのがおそらく最も簡単です(そこにある「興味深い」各ステップ、おそらく上記の5つのステップを記録します)。
ステータスを表示するには、GUIで2番目のプログラムを作成します。これは、データベースに接続してステータスを表示します(たとえば、1分間隔でポーリングすることにより)。このプログラムはローカルデスクトップで実行できます。ローカルデスクトップからデータベースに接続できると想定します。
もちろん、ステータステーブルへの書き込みがデータベーストランザクションと干渉する場合は、別の接続を使用する場合があります。 [〜#〜] msqm [〜#〜] のようなメッセージキューメカニズムを利用することもできますが、これは単純なケースでは大きすぎるソリューションになる可能性があります。
@JDTの答えに基づいて構築するために、これを行う一般的な方法は、メッセージキューにメッセージを書き込むことです。アプリケーションで何か重要なことが発生すると、メッセージが書き込まれ、メッセージキューに送信されます。通常、メッセージの形式はXMLなどです。キューライターです。
監視アプリケーションは、キューを読み取り(キューリーダー)、メッセージを選択し、メッセージを保存して、以前のメッセージまたは条件と比較してメッセージを分析します。条件が満たされると、監視アプリケーションは潜在的な問題を示すアラートを生成します。
これは、メッセージを発生させるだけなので、アプリケーションをそれ自体の監視から切り離します。現在のメッセージに基づいて、何か良いことが起こったか悪いことが起こったかを判断するのは、監視アプリケーション次第です。キューは、メッセージを失うことなく保存するための優れた手段を提供するために使用されます。
アプリケーションの複数のインスタンスが実行されている場合は、集中型メッセージングを使用します。インスタンスが1つしかない場合は、Windowsイベントログやファイルなどの他のストアを使用するだけで十分です。