HttpGet возвращает UnknownHostException - PullRequest
       1

HttpGet возвращает UnknownHostException

0 голосов
/ 20 февраля 2012

У меня проблема с использованием службы WCF REST в моем приложении для Android.Клиент продолжает выдавать UnknownHostException.

HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet("http://windows");
ResponseHandler<String> handler = new BasicResponseHandler();
String result = httpclient.execute(request, handler);

Служба WCF размещается на IISExpress (http://windows:80) и работает локально в браузере, а также в удаленном окне в той же локальной сети (где я разрабатываю клиент ANDROID).

Разрешения Android в манифесте в порядке, и я попробовал HttpGet на google.com, и он работает нормально.

Может кто-нибудь объяснить, почему Android не может открыть соединение с (http://windows:80) вот такразмещены на удаленном компьютере в локальной сети через IISExpress, а браузер без проблем открывает его (на обоих компьютерах)?

Спасибо.

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Если вы работаете в Windows, скорее всего, ваш рабочий стол может получить доступ к http://windows, потому что у него есть область постфикса / поиска домена по умолчанию, которая возвращает полное доменное имя «windows.xx», где xx = ваш внутренний домен. В качестве альтернативы это может быть разрешение хоста с использованием WINS.

Скорее всего, Android или Android-эмулятор не имеют одинаковую область поиска / постфикс для DNS, поэтому вам необходимо указать полное доменное имя (полное доменное имя, т.е. windows.yourdomain.com).

Используйте инструмент DNS-запроса, такой как "nslookup" (windows) или "dig" / "host" (linux), чтобы проверить, что DNS-сервер пытается использовать эмулятор android или android:

Пример для Windows

Используйте "ipconfig / all", чтобы найти DNS-сервер и постфикс DNS-домена ...

c:\> ipconfig /all

Windows IP Configuration

Host Name . . . . . . . . . . . . : MYLAPTOP
Primary Dns Suffix  . . . . . . . : mydomain.com <<<<
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . : mydomain.com <<<<

Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix  . : mydomain.com
Description . . . . . . . . . . . : Intel(R) 82577LM Gigabit Network Connection
Physical Address. . . . . . . . . : xx-xx-xx-xx-xx-xx
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IPv4 Address. . . . . . . . . . . : 192.168.42.101 (Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Lease Obtained. . . . . . . . . . : Wednesday, February 29, 2012 9:28:23 AM
Lease Expires . . . . . . . . . . : Thursday, March 08, 2012 9:28:22 AM   
Default Gateway . . . . . . . . . : 192.168.42.1
DHCP Server . . . . . . . . . . . : 192.168.42.5
DNS Servers . . . . . . . . . . . : 192.168.42.6  <<<<
                                    192.168.42.7
Primary WINS Server . . . . . . . : 192.168.42.6
Secondary WINS Server . . . . . . : 192.168.42.7
NetBIOS over Tcpip. . . . . . . . : Enabled ...

Сверху видно, что наш DNS-домен - "mydomain.com", а наш основной DNS-сервер - "192.168.42.6". DNS-сервер должен иметь возможность разрешать «windows.mydomain.com» (или любой другой домен в этом случае).

Убедитесь, что ваш сервер может разрешить полное имя хоста:

c:\> nslookup windows.mydomain.com 192.168.42.6

(замените 192.168.42.6 вашим DNS-сервером)

Вы должны получить что-то вроде этого (при условии, что в моем случае окна, зарегистрированные на DHCP и DNS-серверах как 192.168.42.106:

C:\>nslookup windows.mydomain.com 192.168.42.6
Server:   dns01.mydomain.com
Address:  192.168.42.6
Name:     windows.mydomain.com
Address:  192.168.42.106

Если вы получили неправильный ответ, например ...

*** dns01.mydomain.com can't find windows: Non-existent domain

Тогда нужный вам хост находится не в указанном вами домене DNS, поэтому может быть несоответствие между доменом DNS по умолчанию и DHCP для вашего Android / эмулятора.

В качестве альтернативы вы можете просто использовать IP-адрес напрямую, как указано выше.

1 голос
/ 20 февраля 2012

Вы пытались просто заменить имя хоста "windows" на IP?

...