从.Net使用CXF web服务时超时问题

从.Net使用CXF web服务时超时问题,.net,wcf,timeout,cxf,.net,Wcf,Timeout,Cxf,我正在使用一个.net应用程序,它使用来自基于CXF的web服务的数据,我遇到了一个奇怪的断开连接问题。虽然我已经设置了双方都能想到的所有适当的超时,但是如果请求花费的时间超过30秒左右,那么连接就会中断,我会出现以下错误 关于cxf at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:212) at org.eclipse.jetty.server.HttpConnection.handle(H

我正在使用一个.net应用程序,它使用来自基于CXF的web服务的数据,我遇到了一个奇怪的断开连接问题。虽然我已经设置了双方都能想到的所有适当的超时,但是如果请求花费的时间超过30秒左右,那么连接就会中断,我会出现以下错误

关于cxf

    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:212)
    at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:426)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:510)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.access$000(SelectChannelEndPoint.java:34)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:450)
    at java.lang.Thread.run(Thread.java:662)
Caused by: com.ctc.wstx.exc.WstxIOException: null
    at com.ctc.wstx.sw.BaseStreamWriter._finishDocument(BaseStreamWriter.java:1431)
    at com.ctc.wstx.sw.BaseStreamWriter.writeEndDocument(BaseStreamWriter.java:553)
    at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor.handleMessage(SoapOutInterceptor.java:282)
    ... 39 more
Caused by: org.eclipse.jetty.io.EofException
    at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:148)
    at org.eclipse.jetty.server.HttpOutput.write(HttpOutput.java:92)
    at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:46)
    at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:55)
    at java.util.zip.GZIPOutputStream.writeHeader(GZIPOutputStream.java:123)
    at java.util.zip.GZIPOutputStream.<init>(GZIPOutputStream.java:48)
    at java.util.zip.GZIPOutputStream.<init>(GZIPOutputStream.java:58)
    at org.apache.cxf.transport.common.gzip.GZIPOutInterceptor$GZipThresholdOutputStream.thresholdReached(GZIPOutInterceptor.java:284)
    at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:62)
    at org.apache.cxf.io.CacheAndWriteOutputStream.write(CacheAndWriteOutputStream.java:68)
    at com.ctc.wstx.io.UTF8Writer.flush(UTF8Writer.java:100)
    at com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:225)
    at com.ctc.wstx.sw.BufferingXmlWriter.close(BufferingXmlWriter.java:198)
    at com.ctc.wstx.sw.BaseStreamWriter._finishDocument(BaseStreamWriter.java:1429)
    ... 41 more
这似乎是WCF的默认错误,也是许多不同问题的根源

如果我使用SoapUi连接到CXF服务,并在其中一个操作中设置一个断点,我可以将响应延迟远超过30秒的超时时间,并且一旦允许恢复,响应将顺利通过,这使我相信是.net端在断开连接

net客户端配置了所有适当的超时,它们比我遇到的30秒超时要大得多

<binding name="serviceBinding" sendTimeout="20:00:00" receiveTimeout="20:00:00" openTimeout="20:00:00" closeTimeout="20:00:00">
    <gzipMessageEncoding />
    <httpTransport manualAddressing="false" decompressionEnabled="False" maxBufferPoolSize="2147483647"     
            maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
            bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" keepAliveEnabled="true"      
            maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
            realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="true" />
</binding>

是否有任何其他原因可能会在此处中断并导致连接中断?GZIPMessageEncode是非标准的,但在请求时间低于30秒的所有情况下都能正常工作。我非常愿意接受任何建议

谢谢


Steve。

错误消息不匹配,但您可能需要查看一下。异步操作上有一个单独的超时,您只能通过代码进行配置,这可能就是您遇到的超时(尽管如我所说,错误消息似乎不匹配)。实际的文档是


您可能还想查看WireShark,看看是否能够捕获实际的底层TCP断开连接消息,并查看哪一方实际发起了断开连接。

错误消息不匹配,但您可能想看一看。异步操作上有一个单独的超时,您只能通过代码进行配置,这可能就是您遇到的超时(尽管如我所说,错误消息似乎不匹配)。实际的文档是


您可能还想查看WireShark,看看是否能够捕获实际的底层TCP断开连接消息,并查看哪一方实际发起了断开连接。

谢谢您的指针肯,唉,这已经尝试过了。干杯!谢谢你的指点,肯,唉,这已经试过了。干杯!
<binding name="serviceBinding" sendTimeout="20:00:00" receiveTimeout="20:00:00" openTimeout="20:00:00" closeTimeout="20:00:00">
    <gzipMessageEncoding />
    <httpTransport manualAddressing="false" decompressionEnabled="False" maxBufferPoolSize="2147483647"     
            maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
            bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" keepAliveEnabled="true"      
            maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
            realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="true" />
</binding>