1

現在、試作段階です。だから私は始めたばかりです。

状況: サーバー - テストを実行し、進行状況をクライアントに公開します。影響は少なく、Web サーバーはなく、おそらく XP Embedded または XP Home を実行している必要があります。

クライアント - テストを開始し、進捗レポートを受け取ります。XPプロを実行しています。

2 台のマシンはイーサネット経由で接続されています。.NET リモート処理を使用して 2 台のマシン間の通信を行い、イベントを使用してサーバーからの新しい結果でクライアントを更新したいと考えていますが、これらの条件ではイベントが信頼できないことを読みました。どうすればいいですか?サーバーはクライアントに接続し、リモート処理を使用してイベントを発行できますか? それでうまくいくでしょうか?

4

3 に答える 3

3

私はかつて、リモーティングを使用するシステムを展開し、サーバーがクライアントがサブスクライブできるいくつかのイベントを開始しました。

これを可能にするには、typeFilterLevel を完全に設定する必要があります。また、イベントを処理できるようにするために、クライアントとサーバーで認識される「中間」オブジェクトも作成する必要があります。

例: これは、サーバーとクライアント側で認識されるクラスです。

public abstract class MyDelegateObject : MarshalByRefObject
{
   public void EventHandlerCallback( object sender, EventArgs e )
   {
      EventHandlerCallbackCore(sender, e);
   }

   protected abstract void EventHandlerCallbackCore(object sender, EventArgs e );

   public override object InitializeLifetimeService() { return null; }
}

クライアント側では、上記のクラスから継承する別のクラスを作成し、イベントが発生したときに実行する必要がある実際のロジックを実装します。

public class MyConcreteHandler : MyDelegateObject
{
   protected override EventHandlerCallbackCore(object sender, EventArgs e)
   {
       // do some stuff
   }
}

次のように、イベントハンドラをリモート オブジェクトのイベントにアタッチするだけです。

MyConcreteHandler handler = new MyConcreteHandler();
myRemoteObject.MyEventOccured += new EventHandler(handler.EventHandlerCallback);

もちろん、EventHandler クラスで Winform コントロールを更新する場合は、そのクラスも ISynchronizeInvoke を実装する必要があります。

于 2009-01-30T22:01:26.077 に答える
3

まだプロトタイピング段階であるため、リモート処理ではなく Windows Communication Foundation (WCF) の使用を検討することをお勧めします。WCF にはパブリッシュ/サブスクライブ シナリオのサポートが組み込まれており、.NET リモート処理と Web サービスのすべての機能が既に含まれています (私が理解していることから)。

于 2009-01-30T22:11:20.567 に答える
0

サーバーがクライアントに接続することにより、実際にはモデルが逆になり、サーバーがクライアントになり、その逆になります。

クライアントにテストを開始させ、サーバーをポーリングしてステータスの更新を確認することをお勧めします。

リモート処理の選択は大した問題ではありません (そして、私が提供した意見には影響しません) が、「置き換えられたがまだサポートされている」テクノロジに時間を費やすのではなく、その置き換え (WCF) を調査することをお勧めします。

于 2009-01-30T21:49:15.807 に答える