次のシナリオで WCF を使用することをお勧めします。
基本的な説明
WCF サービスを提供するいくつかのモジュール (プログラム) があります。各アプリケーションは複数回起動できます。通常、このアプリケーションは一種の管理コンソールから開始されますが、手動で開始することもできます。
WCF セットアップ
現在 NetNamedPipeBinding を使用しています。アドレス "net.pipe://localhost" を持つ ServiceHost と、相対アドレスとしてプログラム名を持つエンドポイント。したがって、サービスにアクセスするには、たとえば「net.pipe://localhost/module1」を使用します。
私の質問
- 同じモジュールの別のインスタンスを開始するときに AddressAlreadyInUseException が発生しないようにするにはどうすればよいですか? 私の考えは、各インスタンスにIDを使用することでした。しかし、その後、私はそれらを追跡することはできません. (最初のインスタンスが既に閉じられている場合、module2 は module1 のどのインスタンスが使用可能かをどのように知るのでしょうか)。別のアイデアは、インスタンスを処理するある種のグローバル モジュールを使用することです。1 つのインスタンスだけにサービスを登録させ、他のすべてのインスタンスが失敗するように決定した場合、同じ問題が発生します。
- モジュールは、すべての初期化が完了したことを管理アプリケーションにどのように報告できますか? 私が理解している限り、CallbackContract は、ServiceContract のメソッド呼び出し中にコールバックを呼び出すためにのみ使用できます。管理アプリケーション自体でサービスを開始する必要がありますか? 管理アプリケーションは常に利用できるわけではないため、サーバーではなくクライアントと考えました。