1

目标:从虚拟机请求 Web 服务

麻烦:别急httpClient.execute(request)

环境:

  • 主机: Window Server 2008 R2 x64
    • 虚拟盒子 4.2.16
    • IIS 6.1
  • 2x VM: Kubuntu 12.04.2 amd64
    网络设置:NAT + 端口转发
    • Apache Tomcat 7.0.26
    • JVM 1.6

因此,Web 服务来自M-Files,一个文档管理系统,并在 IIS 上运行。显然,我的 Web 应用程序在 tomcat 上运行。有两个虚拟机

我如何初始化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.2or从虚拟机访问主机ping 192.168.56.102并请求 web 服务 on http://10.0.2.2/RESTorhttp://192.168.56.102/REST但某些请求冻结,我不明白为什么。此外,如果我在主机上部署我的网络应用程序,一切都很好!
我怀疑我的 VM 网络配置存在错误,但在这种情况下,它应该永远不会成功运行,不是吗?

任何帮助表示赞赏:)

4

0 回答 0