Создайте веб-сервис в Eclipse и получите к нему удаленный доступ через WAMP

Я пытаюсь разместить веб-службу, созданную в Eclipse, на моем сервере WAMP. Я получаю сгенерированный файл WSDL в Eclipse и помещаю файл WSDL в папку www на своем сервере WAMP. Мне нужно получить доступ к этой веб-службе удаленно, но когда я создаю клиент с удаленного компьютера (после импорта сгенерированных файлов из 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-сервер, то как я могу? Спасибо


person ghost1349    schedule 15.12.2014    source источник


Ответы (1)


WAMPServer настроен как инструмент разработчика, поэтому для безопасности новичков и тех, кто думает, что знает больше, чем на самом деле, Apache настроен на прием соединений только с ПК, на котором работает WAMPSever (Apache), т. е. localhost

Если вы хотите разрешить доступ из любого места, вам придется изменить httpd.conf, чтобы разрешить доступ из любого места.

В меню wampmanager есть пункт меню под названием Put Online, это сделает для вас изменение на httpd.conf, изменив

Require local

to

Require all granted

И разрешите доступ из Интернета, если вы правильно переадресовали порты своего маршрутизатора.

Однако это опасно при стандартной установке WAMPServer, так как это позволит получить доступ ко ВСЕМ, включая phpMyAdmin, который в основном отдает драгоценности короны .

Более безопасным решением было бы вручную изменить файл httpd.conf и разрешить только те IP-адреса, которые вы хотите разрешить, например:

Найдите раздел о httpd.conf начиная с <Directory "c:/wamp/www/">

Require local
Require ip w.x.y.z

Или, может быть, даже лучше в вашем случае было бы указать хост, с которого разрешены подключения.

Require local
Require host example.org

Конечно, лучшим решением было бы создать виртуальный хост для вашего сайта, таким образом, вы оставляете общий доступ ограниченным до localhost, но разрешаете доступ к этому тестовому сайту для определенных IP-адресов или доменов. См. этот пост для получения помощи по созданию виртуальных хостов

person RiggsFolly    schedule 15.12.2014