java - java.io.IOException 疑难解答:服务器返回 HTTP 响应代码:503
问题描述
在排除 java.io.IOException 时需要帮助:服务器返回 HTTP 响应代码:503
部署在 JBoss EAP 6.3(客户端应用程序)上的 Web 应用程序创建到另一个部署在 GlassFish 服务器(服务器应用程序)上的应用程序的 HttpURLConnection。这两个服务器之间有防火墙。客户端应用程序在成功运行近一两天后突然开始抛出 java.io.IOException: Server returned HTTP response code: 503 for all requests 。
1.) 根据 GlassFish 服务器管理员的说法,没有进一步的请求进入服务器进行处理。虽然,我要求提供 HTTP 访问日志,但不确定 GlassFish 是否在访问日志中记录了 503 响应。2.) 防火墙日志表明这两台服务器之间没有阻止流量。3.) 网络管理员建议wireshark 无法捕获任何给出503 响应的出站流量。
我的查询是:
每个创建的连接都使用 connection.disconnect() 方法,并且连接的创建非常频繁。很少有链接表明 disconnect() 方法不允许相同的 TCP 套接字被其他请求重用,在这种情况下,每次都会创建一个新的套接字。所以最好关闭 InputStream。底层Windows操作系统动态端口分配失败会导致HTTP Response 503吗?
try {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);
if (connection.getResponseCode()!= 200) {
serviceStatus = code;
serviceMsg = "Error occurred while getting data";
}
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String outStr = "";
while ((outStr = br.readLine()) != null) {
System.out.println("OutS " + outStr);
sessionKey += outStr;
}
connection.disconnect();
} catch (Exception ex) {
serviceStatus = -1;
serviceMsg = "Error: " + ex.getMessage();
ex.printStackTrace();
}
return sessionKey;
}