【问题标题】:Make A Web Service In Eclipse And Access It Remotely VIA WAMP在 Eclipse 中创建 Web 服务并通过 WAMP 远程访问它
【发布时间】:2015-02-13 04:58:59
【问题描述】:

我正在尝试在我的 WAMP 服务器上放置一个用 Eclipse 制作的 Web 服务。我在 Eclipse 中获取生成的 WSDL 文件,并将 WSDL 文件放在我的 WAMP 服务器上的 www 文件夹中。我需要远程访问此 Web 服务,但是当我从远程计算机创建客户端时(从我网站上的 WSDL 导入生成的文件后),当我尝试运行它时,它说连接被拒绝。

这是错误代码:

Exception in thread "main" AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: java.net.ConnectException: Connection refused
 faultActor: 
 faultNode: 
 faultDetail: 
    {http://xml.apache.org/axis/}stackTrace:java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSocketFactory.java:153)
    at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSocketFactory.java:120)
    at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
    at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
    at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at DefaultNamespace.WebserviceSoapBindingStub.echo(WebserviceSoapBindingStub.java:106)
    at DefaultNamespace.message.main(message.java:18)

    {http://xml.apache.org/axis/}hostname:Shadow.local

java.net.ConnectException: Connection refused
    at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
    at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at DefaultNamespace.WebserviceSoapBindingStub.echo(WebserviceSoapBindingStub.java:106)
    at DefaultNamespace.message.main(message.java:18)
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSocketFactory.java:153)
    at org.apache.axis.components.net.DefaultSocketFactory.create(DefaultSocketFactory.java:120)
    at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
    at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
    at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
    ... 11 more

它在 Eclipse 中使用 Apache Tomcat 8.0(我的 WAMP 服务器运行的是 Apache 2.4.9),但我不知道为什么连接被拒绝。我打开了80端口和8080端口

这也是我做的客户: *注意:Echo 只是应该返回您放入其中的内容。

package DefaultNamespace;
import java.util.*;
import java.io.*;

import javax.xml.rpc.ServiceException;
public class message {
    public static void main(String[] args) throws IOException
    {
        Scanner in = new Scanner(System.in);

        System.out.println("Enter a word: ");
        String a = in.next();

        WebserviceServiceLocator locator = new WebserviceServiceLocator();
        WebserviceSoapBindingStub stub;
        try {
            stub = (WebserviceSoapBindingStub)locator.getwebservice();
            System.out.println(stub.echo(a));
        } catch (ServiceException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
    }
}

如果我无法通过我的 WAMP 服务器远程访问我的网络服务,那我该怎么办? 谢谢

【问题讨论】:

    标签: java eclipse web-services wsdl wampserver


    【解决方案1】:

    WAMPServer 被配置为开发人员工具,因此为了初学者的安全,以及那些认为他们知道的比实际更多的人,Apache 被配置为仅接受来自运行 WAMPSever(Apache) 的 PC 的连接,即localhost

    如果您想允许从其他任何地方访问,您必须更改 httpd.conf 以允许从其他地方访问。

    wampmanager 菜单上有一个名为Put Online 的菜单选项,这将为您更改为httpd.conf,更改

    Require local
    

    Require all granted
    

    并允许从 Internet 访问,前提是您已正确转发路由器的端口。

    然而这在 WAMPServer 的香草安装中是危险的,因为它将允许访问 EVERYTHING,包括 phpMyAdmin 基本上 放弃皇冠上的珠宝

    更安全的解决方案是手动更改httpd.conf 文件并只允许您希望允许的 IP 地址,如下所示:-

    <Directory "c:/wamp/www/"> 开始,找到关于httpd.conf 的部分

    Require local
    Require ip w.x.y.z
    

    或者在您的情况下可能更好的是指定允许连接的主机。

    Require local
    Require host example.org
    

    当然,更好的解决方案是为您的站点创建一个虚拟主机,这样您就可以将一般访问权限限制为localhost,但允许访问此测试站点的特定 IP 或域。看到这个帖子help creating Virtual Hosts

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多