0

私は現在、相互に通信する必要のある2つの.NETアプリに取り組んでいます。シンプルなWindowsメッセージングが選択されましたが、これは現時点ではうまく機能します。メッセージで送信されるデータは単純な文字列ですが、コマンド(列挙型)とデータ(文字列)のメンバー、および後で可能な他のメンバーを含むメッセージクラスを作成しました。

このようなメッセージクラスのインスタンスを送信すると、バイトにシリアル化されてから、base64文字列に変換されます。これは、WindowsのSendMessage()を使用して送信されます。反対側では、私は反対のことをします。最終的に、元のオブジェクトが復元され、他のアプリで利用できるようになります。

このメカニズムは機能しているように見えますが、これで安全かどうか疑問に思いました。確かに、いくらかのオーバーヘッドがあり、base64文字列は元の文字列ソリューションよりもはるかに長いです(ただし、コマンドとデータの部分を取得するには、この文字列を手動で解析する必要があります)SendMessageで送信できるメッセージの最大サイズはありますか?

また、このプロジェクトの.NET Remotingから離れて、SendMessageソリューションを使い続けたいと思います。

何か案は ?オーバーヘッドを制限するために、代わりにJSONを使用するのではないでしょうか。

ありがとう。

ピカ

4

3 に答える 3

1

WM_COPYDATA、名前付きパイプ、および IOStream メッセージングをサポートする XDMessaging ( http://xdmessaging.codeplex.com/ ) を使用して、自分で何かをロールする代わりに、非常に柔軟で堅牢なテスト済みのソリューションを提供します。

XDMessagingを使用してクラス ( http://msdn.microsoft.com/en-us/library/4abbf6k0(v=VS.71).aspx ) で Binary Serialization を使用するのはどうですか? それは非常にコンパクトで、実装が非常に簡単です。

于 2010-07-29T06:47:42.757 に答える
0

メッセージを送信するだけの場合は、Rhino Service BusNServiceBusなどのメッセージ バス アーキテクチャを参照してください。それらは、比較的単純で、はるかに堅牢なメッセージングの実装を提供します。

于 2010-07-29T00:56:43.850 に答える
0

よりモダンでスケーラブルなアプローチを使用することを強くお勧めします。たとえば、名前付きパイプを使用して簡単に通信でき、エンコードが必要なメッセージを送信する代わりに標準のストリーム機能を使用できます。

(個人的には、おそらくWCFを使用します。これには、さまざまなマシン間で無料で動作させるなど、多くの利点があるためです...)

于 2010-07-29T00:57:12.220 に答える