Metro 应用程序的限制之一是它们无法连接到 localhost。我们正在创建一个应用程序,它允许用户通过输入 IP 或主机名来连接到服务器,我们的一些用户可能会想使用 localhost(他们连接到的我们的其他软件可能与x86 机器的桌面应用程序)。如果您尝试连接到 localhost,则会出现一般连接错误,就好像它无法访问一样,但这是操作系统告诉应用程序阻止它执行不应执行的操作的谎言。
我们希望为这种情况提供更好的错误消息。为此,我试图将用户输入的内容与本地机器的各种名称进行比较,我们通过 NetworkInformation.GetHostNames() 获得这些名称。这在某些情况下可以正常工作,但并非在所有情况下都有效。考虑这种情况:用户的机器名为“foo”,它的完全限定名称是“foo.bar.com”,网络搜索路径(ipconfig 输出中的“DNS 后缀搜索路径”)是“bar.com”。用户输入“foo.bar.com”。当我们浏览主机名列表时,我们得到“foo”,而不是“foo.bar.com”。因此测试无法捕捉到这种情况,并且用户得到的是一般错误而不是我们的自定义错误。
我正在寻找一种方法来以编程方式确定搜索域列表是什么,以便我可以将这些变体添加到列表中进行比较。但是,我在 WinRT(使用 C#)中找不到提供该信息的 API。