2012-11-30 47 views
4

Metro應用程序的一個限制是它們無法連接到本地主機。我們正在創建一個應用程序,允許用戶通過輸入IP或主機名稱連接到服務器,並且我們的一些用戶可能會嘗試使用本地主機(我們與其連接的其他軟件可能在同一臺機器上運行, x86機器的桌面應用程序)。如果你嘗試連接到本地主機,你會得到一個普通的連接錯誤,就好像它不可達一樣,但這是操作系統告訴應用程序阻止它做它不應該做的事情的謊言。獲取Metro應用程序中的DNS後綴搜索列表

我們希望爲這種情況提供更好的錯誤消息。要做到這一點,我試圖比較用戶輸入到本地機器的各種名稱,我們通過NetworkInformation.GetHostNames()獲取。這在某些情況下可以正常工作,但在任何情況下都不起作用。考慮這種情況:用戶機器名爲「foo」,其完全限定名稱爲「foo.bar.com」,網絡搜索路徑(ipconfig輸出中的「DNS後綴搜索路徑」)爲「bar.com」。用戶輸入「foo.bar.com」。當我們瀏覽主機名稱列表時,我們會得到「foo」,而不是「foo.bar.com」。因此,測試無法捕捉到這種情況,並且用戶得到的是通用錯誤,而不是我們的自定義錯誤。

我正在尋找一種方法,以編程方式確定搜索域列表是什麼,以便我可以將這些變體添加到列表進行比較。但是,我無法在WinRT中找到一個API(使用C#)向我提供這些信息。

回答

2

您是否在加入域的計算機上測試了這個功能?如果它是一個域加入的機器,GetHostNames()應該返回一個'DomainName'類型與本地機器的完全限定的DNS。因此,如果該機器已加入域名'bar.com',則應將'foo.bar.com'列爲「DomainName」類型之一。另一個'DomainName'類型是foo.local。

+0

好問題。不,這臺機器不在域上。我已經擁有的代碼適用於屬於域的機器,但不適用於不屬於域的機器。如果非域名機名爲「foo」,那麼我們的DNS服務器顯然仍然會解析「foo.domain.suffix.com」以指向該機器,但該機器的網絡設置將僅顯示其名稱爲「foo」。但是網絡設置也有一個包含「domain.suffix.com」的DNS搜索列表。 這可能只是我們DNS配置的一個問題,但我擔心它也可能與客戶共同使用。 –