gwt-syncproxy无法连接到该地址

时间:2013-11-21 09:39:34

标签: gwt rpc gwt-rpc gwt-syncproxy

我正在汽车租赁公司的eclipse中写一个GWT项目。 我需要在两个代理商(服务器)之间交换信息,比如可租车的列表,我建议使用 gwt-syncproxy 。 网站描述:

  

GWT SyncProxy在Java客户端和RemoteService servlet之间提供同步RPC。通过使用SyncProxy,我们可以从纯Java(无JSNI)代码调用GWT RemoteService方法。

我遵循了官方指南(也是网上唯一的指南) https://code.google.com/p/gwt-syncproxy/ 但它不起作用:浏览器中的消息显示:

插件无法连接到开发模式服务器127.0.0.1:9997遵循基本的故障排除说明

(我在java客户端代码中指定的地址) project.java

  //create new proxy instance for the service interface:
  private static GreetingService rpcService =
       SyncProxy.newProxyInstance(GreetingService.class,
         "http://127.0.0.1:9997", "greet");

  //invoke the RPC method:
   String result = rpcService.greetServer("SyncProxy");

这是 GreetingService.java

  @RemoteServiceRelativePath("greet")
      public interface GreetingService extends RemoteService {
        String greetServer(String name);
   }

和服务实现 GreetingServiceImpl.java

  public class GreetingServiceImpl extends RemoteServiceServlet
  implements GreetingService {
    public String greetServer(String name) {
     return "Hello, " + name;
    }
  }

我做错了什么?有没有更好的方法在不同的服务器之间进行局域网RPC? (我在日志文件和eclipse控制台中没有错误)

1 个答案:

答案 0 :(得分:2)

免责声明:我是Sync-Proxy Android库的开发人员。

您收到的错误实际上并非来自gwt-syncproxy库。它来自GWT开发系统,表明浏览器无法联系开发模式系统(由Eclipse托管)。要验证的几件事情:

  1. 开发模式主机是否在eclipse中运行(在Eclipse中检查开发模式视图)没有错误?
  2. 编译前端是否有任何错误(请查看“控制台”视图)
  3. 尝试清除浏览器缓存(对该错误进行简短的谷歌搜索会产生一些随机发生的事件,导致开发模式系统无法正常锁定)
  4. 尝试浏览托管网址而不支持开发模式(IE浏览器无需导航到127.0.0.1:8888或eclipse说它托管您的应用程序)并验证您的网页是否正确加载。如果没有,我建议创建一个干净的启动GWT项目,并验证是否正在确保您的计算机上没有其他服务阻止)
  5. 作为后续行动,我对您的设置感到有些困惑。您是在开发GWT前端客户端还是Java桌面客户端?开发了Sync-proxy,以便常规客户端(GWT框架之外)可以使用GWT设计的后端RPC。具体来说,基于服务器的RemoteService servlet需要使用GWT RPC系统,而不仅仅是常规的RemoteService servlet。如果您正在开发GWT前端客户端,则不需要syncproxy,因为常规GWT框架可以与RPC后端通信。现在,如果我理解您的多服务器通信的目的,那么问题就变成了您是否尝试从Web前端(GWT客户端)进行此通信,或者这是通过后端的Java servlet完成的?

    如果在前端进行此操作,我恐怕没有可供您使用的说明,因为您必须通过跨站点脚本问题并且syncproxy不能在内部工作一个GWT前端客户端(我已经测试过了)。如果这是你的意图,那么首先,你需要使用异步方法调用newProxyInstance:

    private static GreetingServiceAsync rpcServiceAsync =
      SyncProxy.newProxyInstance(GreetingServiceAsync.class,
            "127.0.0.1:8888", "greet");
    

    具体而言,您最终会调用此方法两次以获取目标,其中每个网址代表不同的租赁代理服务器。现在,在您的开发机器上托管它以使其正常工作有点超出了这个答案的范围,但您还需要考虑到这一点

    如果您在后端执行此操作,syncproxy可能(未经测试)可以执行您的需求,但您需要管理超时方案,因为您正在进行的调用不会是异步的。最重要的是,您将再次在开发环境中设置不同的托管服务器,以测试可能的情况。如果这是一个很大的需求,请提交gwt-syncproxy项目的问题请求,我或许可以测试该方案并提供相关的说明。