【问题标题】:Consuming web service from a remote computer从远程计算机使用 Web 服务
【发布时间】:2011-10-29 14:13:42
【问题描述】:

我有一个使用 jdk 6 构建的桌面应用程序,它发布 Web 服务以供 Web 应用程序使用。到目前为止,当两个应用程序都在同一台物理计算机上运行时,我没有任何问题,我可以毫无问题地访问 wsdl,并且 Web 应用程序与桌面应用程序一起工作得很好。问题是我无法从同一网络中的远程计算机访问服务。两台 PC 已连接并可交互。如果我在 PC1 中运行这两个应用程序,我可以从 PC2 使用 webapp 通过

http://PC1:8080

我目前是这样发布的:

public Publicador(){
 servicios= new Servicios();
Endpoint endpoint = Endpoint.publish("http://PC1:8686/servicios", servicios);
}

其中 PC1 是电脑的名称。在 PC1 上,我可以从以下地址看到生成的 wsdl,这是我用于 wsimport 命令的那个:

http://PC1:8686/servicios?wsdl

但我不能从 PC2。

任何想法为什么从 PC1 外部看不到它?

【问题讨论】:

  • 防火墙?如果您在网络浏览器中从 PC 2 浏览到该 URL,会发生什么情况?
  • 两台计算机的防火墙均已关闭。认为这可能是一个问题。奇怪的是我可以访问在 PC1 中运行的 webapp,但不能访问 wsdl 在 pc1 之外运行它。如果我尝试从 pc2 访问 wsdl,我会收到 firefox“无法连接错误”
  • 发布 WSDL 的实现是什么?雄猫?
  • wsdl 是从桌面应用程序发布的,wsdl 是通过 apt 命令生成的。为此,我主要有两个类,一个 Publicador(发布者),它是上面代码的 sn-p,它在应用程序启动时运行,并使 wsdl 在本地可用,以及一个服务类,它具有 @WebServices 标志和 @WebMethod在每种方法中。它由使用 tomcat 的 webapp 使用。
  • 但是您使用的是哪个 jax-ws 实现?抱歉之前不清楚。如果您有一个简短但完整的示例来演示该问题,那将有所帮助。

标签: java web-services web-applications wsdl jax-ws


【解决方案1】:

虽然看起来很不可思议,但我找到了最简单的答案...而不是发布为

Endpoint endpoint = Endpoint.publish("http://PC1:8686/servicios", servicios);

我发布为

Endpoint endpoint = Endpoint.publish("http://0.0.0.0:8686/servicios", servicios);

这样就解决了……

另一个解决方案是从文件中获取要发布的地址,这也很有效。我不知道为什么它没有硬编码......我最终这样做了:

Properties prop = new Properties();
InputStream is = null;
String currenDir = System.getProperty("user.dir");
String nombreArchivo = currenDir + File.separator + "ubicacion.PROPERTIES";
try {
is=new FileInputStream(nombreArchivo);
prop.load(is);
} catch(IOException ioe) {}

String pc = prop.getProperty("ServiciosWeb");      
Endpoint endpoint = Endpoint.publish( pc, servicios);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多