2013-07-08 74 views
1

我有一個應用程序試圖調用服務,而另一個服務似乎超時。問題是我的應用程序不會收到任何超時異常,但我確實看到打印到控制檯的錯誤:WebService超時,但客戶端沒有收到異常

 
[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

現在我覺得很傻。

似乎爲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

相關問題