2013-09-11 2 views
0

. Моя программа Android должна сканировать 255 адресов LAN, чтобы найти, доступна ли служба OData (служба данных WCF).Каков самый быстрый способ определить, доступна ли услуга на определенном IP-адресе

Служба работает на 1 или 2 компьютерах, в локальной сети имеется около 20 устройств, но когда мой код «сканирует» IP-адрес, который используется, но не размещает службу, он не бросает исключение немедленно, а не ждет в течение долгого времени, так что поиск 2 адресов занял 10 минут.

Вот код:

try 
       { 
       String url = String.format("http://%s/InformationService/InformationService.svc/", ip); 
       ODataConsumer consumer = ODataJerseyConsumer.create(url); 
       Enumerable<OObject> result= consumer.callFunction("CheckInformation") 
        .execute(); 

       Log.i("DEBUG", "Service available: " + ip); 

} 

    catch (Throwable e) 
       { 
       //e.printStackTrace(); 
       Log.i("DEBUG", "No service: " + ip); 
       } 

Почему ждать на зарезервированных IP-адресов, если служба не принимала там?

Как я могу обнаружить сразу, если там нет службы?

+0

http://stackoverflow.com/questions/565062/check-the-availability-of-the-wcf-web-service?rq=1 – user1940676

+0

@ user1940676: это не имеет отношения к проблеме. Мой «доступный» означает, что служба запущена, а основной проблемой является тайм-аут. – Nestor

+0

Вы пытались ограничить таймаут запроса? – user1940676

ответ

1

Первое, что я бы сказал, это просто проверить доступность url, вам не нужно звонить методу обслуживания.

А потом из вашего поста не ясно, что,

  1. ли вы ТОЛЬКО хотите проверить SVC (ФОС) существует по данному URL (по конкретному IP)

    OR

  2. Вы также хотите проверить, что если wcf выходит из него, доступно ли его для звонков?

В любом случае, если вы ссылаетесь на эти 2 ссылки на СА, я чувствую, что вы обязательно получите то, что ищете.

Примечание: Я не делал такого рода проверки на андроид в любое время, но вообще, когда вы хотите, чтобы проверить, ФОС (или любой URL-адрес сети действителен, например, проверьте, что svc выходит на URL-адрес), тогда вы можете просто сделать запрос в Интернете веб-url (а не только wcf svc), и если вы получите ответ с действующим http-статусом, то действительный адрес.

+1

Я выбрал общий путь и использовал DefaultHttpClient: я установил его тайм-аут на 500 мс, и если код состояния правильный (на самом деле это 405, если служба найдена), я использую свой Потребитель. – Nestor