4

Metro アプリの制限の 1 つは、localhost に接続できないことです。ユーザーが IP またはホスト名を入力してサーバーに接続できるようにするアプリを作成していますが、一部のユーザーは localhost を使用するように誘惑される可能性があります (接続先の他のソフトウェアは、同じマシンで実行される場合があります)。 x86 マシン用のデスクトップ アプリ)。localhost に接続しようとすると、あたかも到達できないかのように一般的な接続エラーが発生しますが、これは、OS がアプリに、すべきでないことを実行しないように指示する嘘です。

この場合、より適切なエラー メッセージを提供したいと考えています。そのために、ユーザーが入力した内容を、NetworkInformation.GetHostNames() を通じて取得したローカル マシンのさまざまな名前と比較しようとしています。場合によってはうまく機能しますが、すべての場合に機能するとは限りません。ユーザーのマシンの名前は「foo」、完全修飾名は「foo.bar.com」、ネットワーク検索パス (ipconfig の出力の「DNS Suffix Search Path」) は「bar.com」です。ユーザーは「foo.bar.com」と入力します。ホスト名のリストを調べると、「foo」が表示されますが、「foo.bar.com」は表示されません。したがって、テストはこのケースをキャッチできず、ユーザーはカスタム エラーではなく一般的なエラーを受け取ります。

検索ドメイン リストが何であるかをプログラムで判断して、これらのバリアントをリストに追加して比較する方法を探しています。ただし、その情報を提供する API が WinRT (C# を使用) で見つかりません。

4

1 に答える 1

2

ドメインに参加しているマシンでこれをテストしていますか? ドメインに参加しているマシンの場合、GetHostNames() は、ローカル マシンの完全修飾 DNS を含む「DomainName」タイプの 1 つを返す必要があります。したがって、マシンが「bar.com」に参加しているドメインである場合、「DomainName」タイプの 1 つとして「foo.bar.com」がリストされているはずです。もう 1 つの「DomainName」タイプは foo.local です。

于 2012-12-04T15:20:33.057 に答える