当前位置: 首页 > 面试题库 >

使用javax.xml.soap.SOAPConnection设置套接字读取超时

严瀚昂
2023-03-14
问题内容

我正在使用javax.xml.soapAPI(javax.xml.soap.SOAPConnectionFactoryjavax.xml.soap.SOAPConnection和,和朋友)对远程服务器进行Web服务调用,这在很大程度上取得了很大的成功。

但是,有时会出现问题,并且程序永远卡住。

为了解决这个问题,我想添加一个读取超时。

我发现有几种方法可以实现这一目标,但它们似乎都非常糟糕。

所以我对社区的问题是:使用javax.xml.soap API进行调用时,实现读取超时行为的最佳方法是什么?


问题答案:

您必须创建自己的URLStreamHandler,以便可以设置URLConnection参数,例如连接超时和读取超时。

SOAPConnection connection = SOAPConnectionFactory.newInstance().createConnection();
URL endpoint =
  new URL(new URL("http://yourserver.yourdomain.com/"),
          "/path/to/webservice",
          new URLStreamHandler() {
            @Override
            protected URLConnection openConnection(URL url) throws IOException {
              URL target = new URL(url.toString());
              URLConnection connection = target.openConnection();
              // Connection settings
              connection.setConnectTimeout(10000); // 10 sec
              connection.setReadTimeout(60000); // 1 min
              return(connection);
            }
          });

SOAPMessage result = connection.call(soapMessage, endpoint);

为了清楚起见,我删除了一些try / catch。



 类似资料:
  • 这是来自.properties得my DB配置: 这是config.xml: 实际上,我可以很容易地访问我们的本地web应用程序,并且可以在日志中看到到DB的连接跟踪,但对于批处理来说,情况并非如此。 在我有了这个之后: 有人帮忙吗?

  • 问题内容: 我想将数据发送到服务器,然后等待一分钟,然后关闭套接字。 怎么做? 问题答案: 你可以试试看 根据您的情况更改套接字的超时!此代码将发送一条消息,然后等待接收消息,直到达到超时!

  • 问题内容: 我试图呼吁一个非常繁重的过程。平均工作时间估计为9-10分钟。 当我执行该过程时,我为一个巨大的数字设置了超时时间:99999999。 2分钟后,出现以下错误: java.net.SocketTimeoutException:读取超时 我尝试对其进行更多处理,并将超时设置为3000,并且在预期的3秒钟后出现了相同的错误。 您对为什么将其设置为最大120000 有任何想法吗? 问题答案:

  • Hi想知道是否有办法设置套接字的超时,以及在连接握手之前重试的次数。我在非常糟糕的连接模式下测试了我的应用程序,我为我在Volley中的请求设置了重试策略为10秒,但SSL握手似乎是个问题,因为它有一个默认的超时设置为60秒,而Volley超时只被触发当套接字由于尝试次数或超时而失败时。 下面是我的方法: 我正在使用截击来提出我的请求,我实现这一点的方法是: 我还尝试设置了这样的超时:

  • 在我的应用程序中,我希望有一个轮询循环,它阻塞套接字接收操作,但在100毫秒后超时。这将允许我在需要时退出循环(例如,用户单击UI中的某些内容),同时避免使用busy循环或Thread.Sleep。

  • socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!