0

我的 Android 程序必须扫描 255 个 LAN 地址以查找 OData 服务(WCF 数据服务)是否可用。

该服务在 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 处等待?

如果那里没有服务,我怎样才能立即检测到?

4

1 回答 1

1

我要说的第一件事是,只需检查 url 的可用性,您无需调用服务方法。

然后从你的帖子中不清楚,

  1. 您是否只想检查给定 url 上是否存在svc(wcf) (在特定 IP 上)

    或者

  2. 您还想检查如果 wcf 在那里退出,是否可以接听电话?

无论如何,如果您在 SO 本身上引用这两个链接,我觉得您肯定会得到您正在寻找的东西。

注意:我没有在任何时候对 android 进行过这种检查,但一般来说,当你想检查 wcf(或任何 web url 是否有效,比如检查 svc 是否在 url 上退出)时,你可以简单地做一个web get 对 web url 的请求(不仅仅是 wcf svc 的请求),如果你得到有效 http status 的响应,那么它是有效的 url

于 2013-09-11T10:22:54.340 回答