4

いくつかのローカル Windows クライアント マシンで実行する C# プログラムを作成する必要があります。これらの「クライアント」プログラムは、別のマシンで実行されている「管理」プログラムからコマンドを取得する必要があります。コマンドは、クライアント コンピューターを再起動し、IP アドレスなどに関するローカル情報を「admin」プログラムに返すことです。

しかし、これをどのように達成するのですか?私はWCFについて少し知っていますが、それは正しい方法ですか? WCF を使用する場合、新しいコマンドをチェックするために、クライアント プログラムで毎秒のようにサービス メソッドを実行する必要があります。ソケットを使用して「直接」接続を確立し、クライアントはコマンドが受信されるのを待つだけです-それは正しく理解されていませんか?

私が行く正しい道はどれですか?

約 10 クライアントについて話しているのですが、最大遅延 (コマンドの送信 - 情報の受信) を 1 秒にしたいと考えています。

ヒントもいただければ幸いです。

よろしくお願いします

4

6 に答える 6

5

デュプレックス WCF サーバー。基本的に、クライアントはすべてサーバーに接続し (つまり 1 つのサーバーのみ)、サーバーは必要に応じてその二重チャネルを使用してクライアントにコールバックします。ポーリングなし、適切なスケーリングなど。対処する必要がある最も頭痛の種は、しばらく何も送信しない場合に備えて長いタイムアウトを設定して、チャネルがタイムアウトするようにすることです。

最終的には、WCF の方がはるかに単純になります。

いくつかのリンク:

http://msdn.microsoft.com/en-us/library/ms731064.aspx

http://www.codeproject.com/Articles/491844/A-Beginners-Guide-to-Duplex-WCF

それらが役立つことを願っています。

于 2013-05-17T14:38:33.127 に答える
1

あなたが言及した少数のマシンと適度なパフォーマンス要件では、WCF はソケットよりも簡単になると思います。

Duplex WCF を調べることができます。私はそれを使用したことがありません.WCFは、私が異常なものを必要とするたびに頭痛の種になりましたが、それはあなたが話しているような問題のためです.

すべてのマシンが 1 つのネットワーク上にある場合、メッセージ キューに大まかに着想を得た創造的な代替案が 1 つあります。メッセージが表示され、クライアントが余暇に読む場所としてデータベース テーブルを使用できます。クライアントはそれを照会して、「MessageID > LastReceivedMessageID のすべてのメッセージを取得してください」と言うことができます。

最後のアプローチの欠点は、(a) データベース サーバーはポーリングを処理できるはずなのに、まだポーリングを行っていること、(b) ネットワークの外部でこれが必要になる場合は、VPN または新しい解決。

于 2013-05-17T14:29:53.790 に答える
1

You can make WCF clients act as servers and with command & control program connect to them that is no problem. Go for WCF if you don't want to mess with ugly stuff that sockets can bring. WCF can be configured nicely in app.config, and you can make it really self hosted command line application even so no need for IIS server. Configuration will be then resuable and easier to maintain.

于 2013-05-17T14:26:21.287 に答える
1

サーバーからクライアントへの「プッシュ」バックチャネルを提供できる .NET Remoting を使用できます (「コールバック」を使用)。反対方向の 2 番目の TCP 接続は必要ないため、クライアントのファイアウォールやルーターをいじる必要はありません。

リモーティングは時代遅れのように考えられていますが、その場所があります。

いずれにせよ、私は WCF ポーリング手法を使用しません。これにより、サーバーの遅延が悪化し、DDOS の状況が発生します。

クライアントにポートを開かせることができれば、WCF サービスをホストすることがおそらく最良のアイデアです。

于 2013-05-17T14:28:03.523 に答える
1

長期的には、おそらく柔軟性が向上するため、ソケットの実装をお勧めします。ソケット名前空間を使用して、これを自分でゼロから作成できます。別の方法として、市販のネットワーク ライブラリ ソリューションを使用することもできます。ledgrenNetworkComms.Netをチェックアウトします。

免責事項: 私は NetworkComms.Net の開発者です。

于 2013-05-17T14:43:49.167 に答える
0

MSMQ を使用できます...実装がこれほど簡単ではありません

http://msdn.microsoft.com/en-us/library/windows/desktop/ms711472(v=vs.85).aspx

私は多くの同様のアプリケーションに MSMQ を使用しています。完璧に動作します。

于 2013-05-17T14:31:20.957 に答える