c# – 在Metro应用程序中获取DNS后缀搜索列表

Metro应用程序的一个限制是它们无法连接到localhost.我们正在创建一个应用程序,允许用户通过输入IP或主机名连接到服务器,我们的一些用户可能想要使用localhost(我们连接的其他软件可能在同一台机器上运行适用于x86机器的桌面应用程序).如果您尝试连接到localhost,则会出现一般连接错误,就好像它无法访问一样,但这是一个骗局,操作系统会告诉应用程序阻止它执行它不应该执行的操作.

我们希望为此案例提供更好的错误消息.为此,我试图将用户输入的内容与本地机器的各种名称进行比较,我们通过NetworkInformation.GetHostNames()获得这些名称.在某些情况下,这种方法很好,但并不适用于所有情况.考虑这种情况:用户的机器名为“foo”,其完全限定名称为“foo.bar.com”,网络搜索路径(ipconfig输出中的“DNS后缀搜索路径”)为“bar.com”.用户输入“foo.bar.com”.当我们浏览主机名列表时,我们得到“foo”,但不是“foo.bar.com”.因此,测试无法捕获此情况,并且用户获取通用错误而不是我们的自定义错误.

我正在寻找一种方法来以编程方式确定搜索域列表是什么,以便我可以将这些变量添加到列表中进行比较.但是,我在WinRT中找不到一个API(使用C#)来提供这些信息.

最佳答案 您是否在加入域的计算机上进行测试?如果它是一个加入域的机器,GetHostNames()应该返回一个具有本地机器的完全限定DNS的“DomainName”类型.因此,如果计算机已加入“bar.com”域,则应将“foo.bar.com”列为“DomainName”类型之一.另一个’DomainName’类型是foo.local.

点赞