リモートサーバーの自動検出。放送するのかしないのか?
-
09-06-2019 - |
質問
.Net リモーティングと通信するクライアント/サーバー アプリケーションがあります。クライアント側の構成を必要とせずに、クライアントがネットワーク上のサーバーを見つけられるようにする必要があります。
私の知る限り、リモート処理では検出はサポートされていません。私は、クライアントがブロードキャスト メッセージを通じてサーバーを見つけられる UDP ソリューションを実装する準備ができています。
次に進む前に、集合的な知恵を聞きたいと思います。これが最善の方法でしょうか?他に何か提案はありますか?
解決
このタイプの機能については SSDP と UPnP の両方を検討しましたが、カスタム UDP を使用することをお勧めします マルチキャスト 解決。基本的に、マルチキャストはブロードキャストと非常に似ていますが、マルチキャスト グループに参加しているマシンのみが対象となります (つまり、マルチキャスト グループに参加しているマシンのみが対象となります)。放送をリクエストしました)に連絡します。
私見ですが、SSDP、UPnP は肥大化しており、リソース検出が過度に複雑です...でもまあ、それは標準です。;)
他のヒント
あなたが必要としているのは、 シンプルなサービス検出プロトコル またはSSDP。これは、Microsoft のサポートの一環として Windows に実装されています。 ユニバーサルプラグアンドプレイ. 。これは業界標準のプロトコルなので、良い選択だと思われます。たとえば、ファイアウォールやその他の問題に対処したい場合、独自のソリューションを導入する必要はなく、他の人が解決してくれるでしょう。
.NET について話しているので、Windows を使用していると仮定します。Windows 用の C スタイル API と COM API について説明した少し古いドキュメント (2001 年) があります。 ユニバーサル プラグ アンド プレイ (UPnP) クライアントのサポート. 。COM API は UPNP.DLL によって公開され、SSDP 用の C スタイル API は SSDPAPI.DLL によって公開されます。
の UPNP 用の COM スタイル API おそらく最善の策です。C# は COM オブジェクトをラップして相互運用を処理できるためです。この API が C# または .NET Framework にネイティブに移植されている場所は見つかりませんでした。
私がリモート処理の仕事で見つけた最良の解決策は、クライアント システム上の構成ファイルにサーバー リストを保持し、更新可能にすることでした。メンテナンスはそれほど簡単ではありませんが、高速でブロードキャストはありませんでした。
最近の MS アップデートのため、マルチキャスト UDP ソリューションの信頼性が低いようです。