目標:仮想マシンから Web サービスをリクエストする
トラブル:フィーズオンhttpClient.execute(request)
環境:
- ホスト:ウィンドウ サーバー 2008 R2 x64
- バーチャルボックス 4.2.16
- IIS 6.1
- 2x VM: Kubuntu 12.04.2 amd64
ネットワーク設定: NAT + ポート転送- アパッチ トムキャット 7.0.26
- JVM1.6
そのため、この Web サービスはドキュメント管理システムであるM-Filesから提供され、IIS 上で実行されます。明らかに、私の Web アプリケーションは tomcat で実行されます。2 つの仮想マシンがあります。
を初期化する方法HttpClient
:
httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter("http.socket.timeout", new Integer(1000));
フリーズ時にアプリケーションがフリーズしないように、タイムアウト パラメータを設定しましたexecute
。
リクエストの作成方法:
private HttpGet createHttpGet(String url, boolean isAuthenticate) throws IOException {
HttpGet get = new HttpGet(url);
if (isAuthenticate)
get.addHeader("X-Authentication", getAuthenticationToken());
return get;
}
リクエストの実行方法:
private String executeAndReturn(HttpRequestBase request) throws IOException {
logger.info("[MFiles: request] " + request.getURI());
HttpResponse response = httpClient.execute(request);
logger.info("[MFiles] request sent, waiting response");
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String tmp;
StringBuilder builder = new StringBuilder();
while ((tmp = reader.readLine()) != null) {
logger.info("[MFiles] reading response");
builder.append(tmp);
}
tmp = builder.toString();
reader.close();
logger.info("[MFiles: response] " + tmp);
return tmp;
}
または を使用して仮想マシンからホストにアクセスし、ping 10.0.2.2
またはping 192.168.56.102
で Web サービスを要求できますhttp://10.0.2.2/REST
がhttp://192.168.56.102/REST
、一部の要求がフリーズします。その理由がわかりません。さらに、ホストに Web アプリをデプロイすれば、すべて問題ありません。
VM のネットワーク構成に誤りがあるのではないかと疑っていますが、この場合、正常に実行されることはありません。
どんな助けでも感謝します:)