Web Services Axis客户端存根超时问题

zz2j4svz  于 2023-10-24  发布在  其他
关注(0)|答案(3)|浏览(163)

我正在写一个应用程序,它使用Web服务连接远程服务器。我已经写了一个ping函数的方法来确定服务器是否在线(即它提供的Web服务可以使用host:port访问)。我正在执行一个简单的Web服务,超时时间为2秒(在我进行调用之前,可以作为存根类中的一个选项)。理想情况下,调用应该在2秒内返回,以便我确定服务器是否启动或关闭。然而,在某些情况下,它需要的时间远远超过2秒。
谁能帮我弄清楚为什么会发生这种情况?有没有一种方法可以确保超时值得到尊重?
谢谢,费尔

2ekbmq32

2ekbmq321#

在Axis客户端存根中,有一个用于设置超时的选项。您也可以使用它。请注意,超时以毫秒为单位。请在此处查看
如果是Axis2,可以这样使用:

Stub s = new Stub();
ServiceClient sc = s.getServiceClient();
Options o = sc.getOptions();
o.setTimeOutInMilliSeconds(2000); //2 seconds
sc.setOptions(o);
s.setServiceClient(sc);

你可以在设置好上述内容后拨打电话。

rta7y2nd

rta7y2nd2#

不要使用默认的http发送器,切换到基于普通http客户端的发送器。详细信息在这里-http://wiki.apache.org/ws/FrontPage/Axis/AxisCommonsHTTP-同一页也有关于如何设置各种超时的详细信息。

b91juud3

b91juud33#

在axis 1.4中,发现Stub::setFactory中的实际超时设置出现在SocketFactoryFactory::getFactory中,但如果在缓存中找到协议的工厂,则忽略新的超时值。
清除该高速缓存似乎可以解决此问题

stub.setTimeout(10000);
Map factories = (Map) FieldUtils.readDeclaredStaticField(SocketFactoryFactory.class, "factories", true);
factories.clear();

相关问题