当前位置: 首页 > 知识库问答 >
问题:

WebService超时,但客户端没有收到任何例外

能修谨
2023-03-14

我有一个应用程序正在尝试调用一个服务,而另一个服务似乎正在超时。问题是我的应用程序没有收到任何超时异常,尽管我确实看到控制台上打印出一个错误:

[7/8/13 12:39:32:360 EDT] 00000005 TimeoutManage I   WTRN0006W: Transaction 0000013FBF252E43000000010000000CE81CB4935851D5C13DECD3DBB2D463F0DBECAEE60000013FBF252E43000000010000000CE81CB4935851D5C13DECD3DBB2D463F0DBECAEE600000001 has timed out after 120 seconds.
[7/8/13 12:39:32:360 EDT] 00000005 TimeoutManage I   WTRN0124I: When the timeout occurred the thread with which the transaction is, or was most recently, associated was Thread[WebContainer : 1,5,main]. The stack trace of this thread when the timeout occurred was: 
    java.lang.Object.wait(Native Method)
    java.lang.Object.wait(Object.java:196)
    com.ibm.io.async.AbstractAsyncFuture.waitForCompletion(AbstractAsyncFuture.java:334)
    com.ibm.io.async.AsyncFuture.getByteCount(AsyncFuture.java:218)
    com.ibm.ws.tcp.channel.impl.AioSocketIOChannel.readAIOSync(AioSocketIOChannel.java:215)
    com.ibm.ws.tcp.channel.impl.AioTCPReadRequestContextImpl.processSyncReadRequest(AioTCPReadRequestContextImpl.java:182)
    com.ibm.ws.tcp.channel.impl.TCPReadRequestContextImpl.read(TCPReadRequestContextImpl.java:111)
    com.ibm.ws.http.channel.outbound.impl.HttpOutboundServiceContextImpl.parseResponseMessageSync(HttpOutboundServiceContextImpl.java:1657)
    com.ibm.ws.http.channel.outbound.impl.HttpOutboundServiceContextImpl.readSyncResponse(HttpOutboundServiceContextImpl.java:725)
    com.ibm.ws.http.channel.outbound.impl.HttpOutboundServiceContextImpl.startResponseReadSync(HttpOutboundServiceContextImpl.java:1775)
    com.ibm.ws.http.channel.outbound.impl.HttpOutboundServiceContextImpl.finishRequestMessage(HttpOutboundServiceContextImpl.java:1195)
    com.ibm.ws.websvcs.transport.http.out.HttpOutSyncWriter.finishBufferRequest(HttpOutSyncWriter.java:94)
    com.ibm.ws.websvcs.transport.http.out.HttpOutWriter.writeBuffer(HttpOutWriter.java:136)
    com.ibm.ws.websvcs.transport.http.out.HttpOutByteBufferOutputStream.finish(HttpOutByteBufferOutputStream.java:468)
    com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.sendChunkedRequest(SOAPOverHTTPSender.java:890)
    com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.sendSOAPRequest(SOAPOverHTTPSender.java:807)
    com.ibm.ws.websvcs.transport.http.SOAPOverHTTPSender.send(SOAPOverHTTPSender.java:611)
    com.ibm.ws.websvcs.transport.http.HTTPTransportSender.invoke(HTTPTransportSender.java:364)
    org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:531)
    org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:401)
    org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
    org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
    org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:581)
    org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:130)
    org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:93)
    org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:364)
    org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:185)

客户端是使用以下设置创建的:

bindProvider.getRequestContext().put(com.ibm.wsspi.webservices.Constants.RESPONSE_TIMEOUT_PROPERTY , connectionProperties.getProperty(MyService.TIME_OUT));
bindProvider.getRequestContext().put(com.ibm.wsspi.webservices.Constants.CONNECTION_TIMEOUT_PROPERTY , connectionProperties.getProperty(MyService.TIME_OUT));
bindProvider.getRequestContext().put(com.ibm.wsspi.webservices.Constants.READ_TIMEOUT_PROPERTY , connectionProperties.getProperty(MyService.TIME_OUT));

MyService.TIME_OUT的值为20000,我已经验证了它的设置是否正确。

捕捉服务调用的代码如下所示:

try
{
    response = ((MyServicePortType) myService).doWebServiceOperation(request);
}
catch (Throwable e) //I know, catch Throwable is not very good but right now I'd be happy to catch ANYthing here!
{

    log.error("Webservice reported error",e);
}

即使我更改了我的catch块来捕获任何内容,我仍然没有捕获任何异常。WebSphere检测到事务超时,但我不知道为什么应用程序在web服务调用中没有检测到超时。是否有我遗漏的东西会导致抛出一个正确的超时异常,这样我就可以捕获它并将消息发送到应用程序框架?

共有1个答案

呼延子安
2023-03-14

现在我觉得自己很傻。

似乎对于WebSphere,这些属性(RESPONSE_TIMEOUT_PROPERTYCONNECTION_TIMEOUT_PROPERTY,等等)应该以秒为单位设置它们的值,我使用的毫秒是基于我在在线示例中看到的(显然不是针对WebSphere的)。

20000更改为20已解决此问题。

建议我假设秒而不是毫秒的页面是这样的:http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rwbs_httptransportprop.html

 类似资料:
  • IBM MobileFirst Server版本:7.0.0.0020150312-0731 我有一个WLClientLogReceiver适配器,它带有一个过程“log”,可以通过WL接收客户端日志。记录器。send()方法。 在设备客户端日志中,我看到消息“客户端日志成功发送到服务器” 在此期间,我确实在服务器中看到以下消息。 [2015年6月17日12:12:40:768 CDT]00000

  • 我正在使用Apache HTTP客户端联系外部服务。这项服务可能需要几个小时(如果不是更长的话)才能产生响应。我尝试了一些不同的方法,但要么以套接字结束,要么以读取超时结束。我刚刚尝试使用RequestConfig将套接字和连接超时设置为0,根据文档,这应该是无限的,但请求总是在1小时后返回。有什么想法吗?

  • 在我们的Spring应用程序中,我们依赖外部系统。我们希望为该系统的请求设置超时,但无法确定如何配置。 我们使用这个: 我已经尝试过这个:如何使用泽西2. x设置连接和读取超时?和许多其他建议,但无法让它工作。任何建议都将不胜感激。 不工作的更新: 也

  • 问题内容: 有人知道我的代码有什么问题吗? 当我用client1写东西时,我只能在服务器和client1上看到它,而在client2上看不到它。 Client.java中的run(): 如果您需要服务器代码或其他任何内容,请询问。 提前致谢!! 另外,服务器: 和处理程序: 问题答案: 这是一个示例- 尚不完整,但应使您了解如何将输出多播到许多侦听客户端。有更好的方法来执行此操作,但是我写的类似于

  • 下面是关于如何设置messenger机器人的Facebook教程-使用ngrok设置我的webhook。本地测试一切顺利,但在向bot发送消息时仍然没有收到任何响应。 韩国https://ngrok.com/ facebook教程https://developers.facebook.com/docs/messenger-platform/getting-started/quick-start/

  • 问题内容: 我在ElastiCache上运行Redis集群。 多个进程连接到Redis集群。每个进程都位于Docker容器中。流程不尽相同-我有一个流程,一个流程等。 正常运行几天后,连接到Redis时,我的某些进程开始超时。当我进入受影响的容器并尝试通过到达群集时,与群集的连接超时。这告诉我,问题不仅影响过程,而且影响整个容器。 当我从任何其他容器中使用时,连接都不会出现问题。 我的进程会根据需