私はいくつかのことを理解しようとして頭を叩いてきました。そこで、アドバイスや調査資料を (リンク経由で) 探しています。シナリオは次のとおりです。
他のいくつかのアプリケーション (AppA、AppB、AppC など) が必要とするリソースを含むライブラリ (CommonLib など) があります。これが現在機能している方法は AppA インスタンスで、特定のポートが使用可能かどうかを確認します。そうでない場合は、CommonLib をキックし ("Hey, wake up")、サービスを開始します。その後、AppA は満足して出発します。
現在、Remoting.Channels について多くの調査を行った結果、「レガシー」と見なされるテクノロジに基づいて構築されたアプリケーションを開始しようとしているという結論に達しました。うーん...私はそれが好きではありません。正直なところ、WCF は必要以上にオーバーヘッドが大きく、Mono では完全に実装されていません。マルチプラットフォームの互換性 (Windows、Mono、Linux) をターゲットにしているため、すべてのオプションを調査しています。
そもそも、リモーティングのアイデアが始まったのは、CommonLib を単一のインスタンスとして保証したかったからです (私が理解しているように、シングルトンは特定の AppDomain 内のシングルトンであることがほとんど保証されているだけです。間違っています)。とにかく、私はリモート処理の威力を実感し、実験的な実装を開始することにしました。MarshalByRefObject の最初の使用に成功しました。しかし、私は、このレガシー テクノロジーの継続的な実装について懸念しています。
それで、これらすべてで... CommonLib を(ホストアプリケーションとして)実装し、リモート処理なしで、ストリーム、標準の TCP ソケット、またはその他の方法で MarshalByRefObject を実装する方法を検討しています。私が考えているのは、AppA をインスタンス化して CommonLib を実行する代わりに、CommonLib をベース アプリとして実装することです。次に、CommonLib 内でインスタンス化するアプリ (実際には単に「ホストされている」.dll) を選択します。次に、CommonLib は、その .dll を、ホストされているアプリが使用するカスタム コントロールと共に CommonLib フレームワークに読み込みます。この考えに加えて、CommonLib が本物のシングルトンでなければならないという要件 (今のところ) は差し控えたいと思います。
これがシナリオの詳細です。繰り返しますが、私の質問は実際には 2 つの部分です: (a) どのテクノロジを調査する必要があるか、および (b) リモート処理テクノロジのレガシー ステータスに関心を持つ必要がありますか?
その他のアドバイス、コメント、または質問は大歓迎です。
更新 1:このスニペットから始めます。これにより、インストールされているアプリ (またはプラグイン) のリストを含むファイル (またはスクリプト) を読み込むことができます。このファイルを Xml またはバイナリ形式で作成できます。新しいアプリをインストールすると、ファイルとパスを追加できます。うーん...必ずしも MarshalByRefObject を使用する必要はありません。