2

私はIPCを知っており、いくつかのプロジェクトで使用しています。私の新しい要件には、「これを行う」「これを行う」などの短いメッセージを交換する必要がある2つの単純なC#アプリケーションが含まれます。これは双方向である必要があります。

これは、古いシステム(Win Xp .Net 3.5)で構成できずに実行されます。エンドユーザーはアプリケーションを実行するだけです。

  • WCFはこのタスクには複雑すぎます
  • TCPを介したソケットにはファイアウォール構成が必要であり、アンチウイルスからブロックされる可能性があります
  • Microsoft Message Queuingは完全に適合しますが、すべてのクライアントにMSMQをインストールする必要があります
  • 名前付きパイプも使用できますが、もっと高いレベルのものが欲しいです(アセンブリを使ってみたいと思います)

C#アプリケーション間でデータを交換する簡単な方法はありますか?

4

2 に答える 2

1

いくつかのオプションがあります。

  • wcf、これはあなたが検討して拒否したとあなたは言います。なぜそれを拒否したのか聞いてもいいですか?

  • あなたが言ったように、名前付きパイプ。2つの名前付きパイプを双方向メッセージングシステムにラップすることは実際にはかなり簡単です(プロのヒント:パイプを使い捨てにして、パイプをロックしないように廃棄するときにクリーンアップします)

  • キューイングシステムですが、通常、これらは多対多または1対多のチャネルで見られます

  • メッセージキュー(単純なキュー構造)をシリアル化し、メモリマップトファイルに入れてから、いずれかの側から読み取り/書き込みを行います

  • 難解:Windowsメッセージングを使用します。つまり、メッセージの送信/投稿をピンボークします。

于 2013-01-10T18:45:32.903 に答える
0

TCPが出ていると言ったけど...

私はZeroMQを使用することに非常に熱心でしたが、機会がありませんでした。これはac#ラッパーを備えたマルチプラットフォームであり、この種のアプリケーションメッセージング用に正確に設計されています。http://www.zeromq.org/でZeroMQをチェックしてください。

彼らのサイトの1つからのいくつかのサンプルコード:

// Set up a publisher.

var publisher = new ZmqPublishSocket {
    Identity = Guid.NewGuid().ToByteArray(),
    RecoverySeconds = 10
};

publisher.Bind( address: "tcp://127.0.0.1:9292" );

// Set up a subscriber.

var subscriber = new ZmqSubscribeSocket();

subscriber.Connect( address: "tcp://127.0.0.1:9292" );

subscriber.Subscribe( prefix: "" ); // subscribe to all messages

// Add a handler to the subscriber's OnReceive event

subscriber.OnReceive += () => {

    String message;
    subscriber.Receive( out message, nonblocking: true );

    Console.WriteLine( message );
};

// Publish a message to all subscribers.

publisher.Send( "Hello world!" );
于 2013-01-10T18:51:57.237 に答える