如何测试 JAX-WS 连接超时

Posted

技术标签:

【中文标题】如何测试 JAX-WS 连接超时【英文标题】:How to test JAX-WS connection timeout 【发布时间】:2015-09-07 22:47:19 【问题描述】:

我正在尝试测试部署在 IBM Websphere Application Server 8.5 上的 jaxws 客户端的连接超时属性。我通过以下方式设置超时属性:

((BindingProvider) port).getRequestContext().
           put(com.ibm.wsspi.webservices.Constants.RESPONSE_TIMEOUT_PROPERTY, "30");
((BindingProvider) port).getRequestContext().
           put(com.ibm.wsspi.webservices.Constants.CONNECTION_TIMEOUT_PROPERTY, "15";

RESPONSE_TIMEOUT_PROPERTY 工作正常。

但我不知道如何测试 CONNECTION_TIMEOUT_PROPERTY。如果在创建服务实例期间 web 服务不可用,我会收到以下异常:

javax.xml.ws.WebServiceException: The following WSDL exception occurred: 
            WSDLException: faultCode=WSDL4JWrapper : : javax.wsdl.WSDLException: 
            WSDLException: faultCode=WSDL4JWrapper : :
            java.net.ConnectException: Connection refused: connect

如果在创建端口期间 web 服务不可用(调用 getPort(...) 方法)我得到以下异常:

javax.xml.ws.WebServiceException: 
            java.net.ConnectException: HTTP ( 404 ) Not Found address :
            http://myhost:myport/WsServer/helloService

立即抛出异常。我想我做错了什么。任何指针都会有所帮助。

【问题讨论】:

【参考方案1】:

需要在服务器上打开一个套接字才能接受连接。

试试下面的方法

public static void main(String[] args) 
    int port = Integer.parseInt(args[0]);
    try (ServerSocket serviceStub = new ServerSocket(port)) 
            while (true) 
                serviceStub.accept();
                System.out.println("Something connected");
            
         catch (IOException e) 
            e.printStackTrace();
         finally 

        

在服务器上运行它(使用您需要的任何端口)。它会接受一个连接,但永远不会做任何应该模拟你超时的事情。

一般来说,任何在端口上侦听并且什么都不做的东西都应该符合要求。

【讨论】:

莎拉,谢谢你的回答。我测试你的解决方案。请求已通过响应超时完成。我做了线程转储。 Web 容器的线程正在运行执行方法java/net/SocketInputStream.socketRead0(Native Method) 啊,好的。也许你需要的就在这里。 ***.com/questions/100841/…

以上是关于如何测试 JAX-WS 连接超时的主要内容,如果未能解决你的问题,请参考以下文章

golang中mysql建立连接超时时间timeout 测试

如何减少 unix telnet 连接超时

如何防止大型 MySQL 导入的连接超时

如何设置数据库的连接数和连接超时时间

如何解决SSH连接Linux超时自动断开

总是显示连接超时的原因是啥?