GlassFish Java Web服务超时

问题描述 投票:0回答:1

我正在建立一个新的GlassFish Server 4.1.1,其上部署了一个Java Web服务。 Web服务有一个Web方法,它接收JSON作为输入参数,因此它还返回一个JSON。要将Java对象序列化/反序列化为JSON,我使用的是Gson库。 Web方法正在调用其他Web服务,并且一次运行正在执行大约2-3分钟。我在循环中将此Web服务称为例如6-10次,因此Web方法等待大约16-30分钟以返回值。问题是超时,但我不知道在哪里以及如何为我的问题设置它。

我尝试从Visual Studio C#项目调用此Java Web服务,在那里我添加了一个Web引用,我在其中定义了Web服务的Web引用URL。我还设置了XML Web服务客户端等待对同步XML Web服务请求的回复应该到达多长时间的时间。我把它设置为10小时,如下所示。

static string CallEARSjDE(string json)
{
    EARSWebReference.EARSWebService EARSWS = new EARSWebReference.EARSWebService();
    EARSWS.Timeout = 36000000;    // 10 hours

    return EARSWS.EARSjDE(json);
}

我还为我在Java Web方法中创建的Web服务请求设置了超时。我把它设置为1小时。

Gson gson = new Gson();
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(1 * 3600000).build();   // timeout set to 1 hour
HttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();
HttpPost post = new HttpPost(this.ServiceURL);
StringEntity postingString = new StringEntity(gson.toJson(problemLCSRequest));
post.setEntity(postingString);
post.setHeader("Content-type", "application/json");
HttpResponse response = httpClient.execute(post);
HttpEntity entity = response.getEntity();
String responseString = EntityUtils.toString(entity, "UTF-8");

ProblemLCSResponse responseJson = gson.fromJson(responseString, ProblemLCSResponse.class);

除了这两个超时,我还在GlassFish管理控制台中设置了超时。我在Configurations→server-config→Web Container部分中完成了这一步,我将会话超时设置为36.000秒(10小时)。

例如,当我在Web方法中调用Web服务6次时,我得到了所需的响应。但是,当我调用Web服务超过6次时,它会抛出一个如下所示的异常。我认为这个例外的原因是在超时,但我不知道是哪一个导致它,我在哪里可以更改它。

警告:StandardWrapperValve [EARSWebService]:Servlet.service()进行的servlet EARSWebService抛出异常java.nio.channels.ClosedByInterruptException在java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:202)在sun.nio.ch. SocketChannelImpl.write(SocketChannelImpl.java:478)在org.glassfish.grizzly.nio.transport.TCPNIOUtils.flushByteBuffer(TCPNIOUtils.java:149)在org.glassfish.grizzly.nio.transport.TCPNIOUtils.writeCompositeBuffer(TCPNIOUtils.java: 87)在org.glassfish.grizzly.nio.transport.TCPNIOAsyncQueueWriter.write0(TCPNIOAsyncQueueWriter.java:129)在org.glassfish.grizzly.nio.transport.TCPNIOAsyncQueueWriter.write0(TCPNIOAsyncQueueWriter.java:106)在org.glassfish.grizzly .nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:260)org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:169)org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java: 71)在org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleWrite(TCPNIOTransportFilter.java:126)在org.glassfish.grizzly.filterchain.TransportFilter.handleWrite(TransportFilter.java:191)在org.glassfish.grizzly.filterchain .ExecutorResolver $ 8.execute(ExecutorResolver.java:111)在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)在org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor .java:77)org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:890)org.glassfish.grizzly.filterchain.FilterChainContext.write(FilterChainContext.java:858)org.glassfish.grizzly。 http.io.OutputBuffer.flushBuffer(OUTP utBuffer.java:1029)org.glassfish.grizzly.http.io.OutputBuffer.flushBinaryBuffers(OutputBuffer.java:1016)org.glassfish.grizzly.http.io.OutputBuffer.flushAllBuffers(outputBuffer.java:987)at org位于org.apache.catalina.connector.OutputBuffer.flush的org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:291)的.glassfish.grizzly.http.io.OutputBuffer.flush(OutputBuffer.java:738) (OutputBuffer.java:275)位于com.ctc.wstx.io的java.io.FilterOutputStream.flush(FilterOutputStream.java:140)的org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:175)。位于com.ctc.wstx.sw.BaseStreamWriter.flush(BaseStreamWriter.java:259)的com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:225)上的UTF8Writer.flush(UTF8Writer.java:103) com.sun.xml.ws上的com.sun.xml.ws.streaming.XMLStreamWriterUtil.getOutputStream(XMLStreamWriterUtil.java:103)中的.sun.xml.ws.util.xml.XMLStreamWriterFilter.flush(XMLStreamWriterFilter.java:71) .message.jaxb.JAXBMe​​ssage.write PayloadTo(JAXBMe​​ssage.java:403)位于com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:192)的com.sun.xml.ws.api.message.MessageWrapper.writeTo(MessageWrapper.java: 226)com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:144)at com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:242)at com.sun.xml .ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:636)at com.sun.xml.ws.transport.http.HttpAdapter.access $ 100(HttpAdapter.java:108)at com.sun.xml.ws. transport.http.HttpAdapter $ HttpToolkit.handle(HttpAdapter.java:878)位于com.sun.xml.ws.transport的com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:422)。位于javax的javax.servlet.http.HttpServlet.service(HttpServlet.java:707)的org.glassfish.webservices.JAXWSServlet.doPost(JAXWSServlet.java:169)中的http.servlet.ServletAdapter.handle(ServletAdapter.java:169) org.apache.catalina.core.StandardWrapper.se上的.servlet.http.HttpServlet.service(HttpServlet.java:790)起动转矩(StandardWrapper.java:1682)在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)在org.apache .catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)位于org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)的com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java) :99)在org.apache.catalina.connevice(org.apache。 CoyoteAdapter.service(CoyoteAdapter.java:283)位于com.sun.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerCallable.call(ContainerMapper.java:459)的com.sun.enterprise.v3.services.impl.ContainerMapper。服务(ContainerMapper.java:167)位于org.glassfish.grizzly.http.server.HttpHandler的org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)。 doHandle(HttpHandler.java:180)在org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute(ExecutorResolver.java:119)在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)org.glassfish.grizzly.filterchain.DefaultFilterChain.execute( DefaultFilterChain.java:132)org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)org.glassfish.grizzly.nio .transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) )org.glassfish.grizzly.strategies .WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:56)org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool。 java:591)at org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:571)at java.lang.Thread.run(Thread.java:748)

java c# web-services web-applications glassfish
1个回答
0
投票

最后,我找到了正确的超时设置。我不得不去管理面板和Configurations → server-config → Network Config内部我必须设置http-listener-1的HTTP请求超时。

© www.soinside.com 2019 - 2024. All rights reserved.