我的Android程序必须扫描255个LAN地址,以查找OData服务(WCF数据服务)是否可用。
该服务在1台或2台计算机上运行,局域网上大约有20台设备但是当我的代码“扫描”正在使用的IP地址但未托管该服务时,它不会抛出异常immediatley而是等待它很长一段时间,所以找到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 :(得分:1)
我要说的第一件事就是只检查网址的可用性,你不需要调用服务方法。
然后从你的帖子中就不清楚了,
您仅是否要检查给定网址(特定IP)上的svc(wcf)是否存在
或强>
您还想检查一下,如果wcf退出,是否可以接听电话?
在任何情况下,如果你在SO本身上引用这两个链接,我觉得你肯定会得到你想要的东西。
注意:我没有在任何时候对Android进行过这种检查,但是当你想要检查wcf(或任何网址是否有效)时,一般比如检查svc是否在网址上退出),那么你可以简单地制作网络获取网址的请求(不仅仅是wcf svc)以及获得有效http状态的响应,然后这是有效的网址。