2009-03-19 23 views
1

私たちのアプリケーション(ドキュメント管理システム)では、2つのアプリケーションを同じに見えるようにするために、画面の変更を通知する(または画面変更の他のプログラムに通知する)データは、注文履行アプリケーションであり、もう1つは元のファックスの文書ビューアです。フルフィルメントアプリはvb6で書かれ、ドキュメントマネージャは.net 3.5(c#)にあります。それはターミナルサーバー上で動作するので、セッションも認識しなければなりません。ドキュメントビューアまたはフルフィルメントアプリは、最初に開いておいても、両方を他のものなしで使用することもできます。 IPCの最良の方法は何ですか?VB6と.netアプリケーションのベストIPC

答えて

2

VistaまたはWindows 7で実行できるようにするには、IPCのベストフォームはTCP(Winsockコントロールを使用してVB6から非常に簡単に実行される)になります。

これは、同じユーザーとして実行していなくても通信できる(つまり、Vista +ではSendMessageまたはNamed Pipesで通信できない)という利点があります。あなたが覚えておかなければならない唯一のことは、ブロックされないようにファイアウォールのルールを設定することです。これは、とあなたのインストーラで行うことができます

netsh.exe firewall set allowedprogram "{PROGRAM PATH}" "{PROGRAM NAME}" enable 
+0

それの問題もまた利点です。私は、単一のユーザーの複数の可能なセッションのように、ターミナルサーバー上の各アプリケーションの多くのインスタンスを使用しています。したがって、私はセッション認識ではないものを使用することはできません。 –

0

クリスの答えはおそらくまだ最善の策ですが、あなたはおそらくターミナルサーバーとの健全性を維持するために、その場しのぎが必要になります。

「サーバー」アプリケーションとして機能させたいアプリケーションでは、未使用のポートを開いて「クライアント」アプリケーションに入力することができます。おそらく環境変数を使用しています。あなたのニーズに応じて、このアプローチはすべて間違っている可能性があります。

他の変更があったとき(実際に変更されたことを通知されていない)通知を受ける必要があるアプリを2つだけ持っている場合は、ウィンドウメッセージを送信して接続することができます。

1

名前付きパイプとメールスロットは、依然として利用可能な最良の選択肢であり、クロスユーザーとクロスプロセスで動作します。もちろん、Vista +ではさまざまな整合性レベルで動作するプロセスに問題があり、セキュリティは以前のOSにも適用されます。これはファイルセキュリティによく似ています。

TCPは、同じマシン内で常に非常に遅く、おそらくはプロセス間でWM_COPYDATAより悪いです。

パイプまたはメールスロットを使用すると、セッションIDを名前の一部にすることによって、ターミナルサービスを処理できます。 TCPは、ポート番号の限られた "名前空間"(常に0から65535までのファイルを持つことができるハードドライブを想像し、各接続には2つのポート番号が必要です)によって常に挑戦されます。

関連する問題