1

目標:仮想マシンから 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/RESThttp://192.168.56.102/REST、一部の要求がフリーズします。その理由がわかりません。さらに、ホストに Web アプリをデプロイすれば、すべて問題ありません。
VM のネットワーク構成に誤りがあるのではないかと疑っていますが、この場合、正常に実行されることはありません。

どんな助けでも感謝します:)

4

0 に答える 0