2012-01-20 10 views
1

クライアントアプリケーションは(RIAを介して)サーバー上のプロセスを開始しますが、実装は重要ではありません。私がプロセスと言うと、ビジネスコードが実行されていて、CPU上で実行されている実際のプロセスを参照しているわけではありません。C#でサーバーの動作状態を確認します。サーバープロセス(ビジネスオペレーション)の状態を確認します

コードはC#です。

クライアントはプロセスの状態を確認します。失敗、完了、まだ実行中。

基本的な実装は比較的簡単です。私は、クライアントが定期的にサーバーをポーリングしてプロセスidを確認するプロセスIDを静的にサーバーに保管します。

これに関連するエッジケースはもう少し作業が必要です。コードが例外を処理することを許可せずにスレッド(プロセス)を異常終了させ、プロセスに関連する状態を正常に設定する致命的かつ壊滅的な理由。このシナリオでは、クライアントはプロセスがまだ進行中であると引き続き仮定します。

私は別のスレッドでプロセスを実行し、スレッドIDを追跡することを考えていました。クライアントがプロセス状態をチェックするためにサーバーを呼び出すと、プロセスを実行しているスレッドのIsAliveプロパティを確認できます。

問題が発生するシナリオがあるのでしょうか?おそらく、スレッドがハングアップしていても、IsAliveがTrueを返す可能性があります。

もう1つの方法は、サーバー上のプロセスに、クライアントが状態をチェックするときに使用できるタイムスタンプを定期的に設定することです。状態をチェックするコードは、タイムスタンプがどれほど古いかを確認し、選択した間隔に基づいて(2分としましょう)、プロセスがまだ実行中かどうかを判断できます(最後のタイムスタンプが書き込まれてから2分が経過していません)。プロセスは例外なくタイムアウトになりました(スレッドが最後のタイムスタンプを書き込んだ後2分以上経過しています)。すべてのタイムスタンプはメモリ内で行われます。

これを回避する有益な方法がありますか?誰にも、これに最善のアプローチをとるための特別な洞察やヒントがありますか?私は他のシナリオや人々の考えにもオープンしていますか?

+0

また、これは一般に、多くのコードステップで長時間実行される操作であることに注意してください。サーバーの処理には1時間以上かかる場合があります。 – user1060500

+0

メッセージングシステム[キープアライブ](http://en.wikipedia.org/wiki/Keepalive)という用語を使用すると、実行中の各ビジネスプロセス(BP)が実行状態を示すキープアライブメッセージを送信することが認識されます。高いネットワーク負荷を避けるために、統計情報を収集するローカルのリスナにKAメッセージを送信することができます。リスナーが別のプロセスである限り、shoudlの作業をきちんと提供したタイムスタンプ付きのシナリオですが、リスナーがハングするケースをカバーする方法を考える必要があります。 – sll

答えて

0

各ビジネスプロセスの例外を含むすべてを処理し、すべての状態を管理する、完全に制御されたサーバーアプリケーションを使用する方がよいと確信しています。クライアントがポーリングではなくStateChangedイベントを受信した場合(たとえばWCFデュプレックスチャネルの場合)はさらに優れています。あなたがしているのは基本的に1999年です。 .NETは無料でほぼすべてのものを提供します。実際には正しいアーキテクチャーを作成するのが早く、時間をかけてサポートするのが安くなります。

関連する問題