【问题标题】:webservice cannot open connection external servidorwebservice 无法打开连接外部服务器
【发布时间】:2013-06-06 20:28:13
【问题描述】:

我在尝试使用自己的网络服务时遇到问题,我只是上传到 AWS 服务器(来自我正在开发的 android 终端应用程序)。 我用tomcat7和msql配置了servidor,数据库正在工作,我在其中部署了我的webservice之战。

当我在我的 tomcat localhost 中使用 web 服务时工作正常......但如果我尝试将 url 从 localhost 更改为我来自 AWS 的新弹性 IP,它会崩溃

我不知道为什么不起作用...也许是我在迁移中忘记的一些小问题。

这是跟踪问题

06-06 22:06:02.350: W/System.err(9623): SoapFault - faultcode: 'soapenv:Server' faultstring: 'Cannot open connection' faultactor: 'null' detail: org.kxml2.kdom.Node@40572d80
06-06 22:06:02.360: W/System.err(9623):     at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:136) 
06-06 22:06:02.360: W/System.err(9623):     at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:137)
06-06 22:06:02.360: W/System.err(9623):     at org.ksoap2.transport.Transport.parseResponse(Transport.java:96)
06-06 22:06:02.360: W/System.err(9623):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:189)
06-06 22:06:02.360: W/System.err(9623):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
06-06 22:06:02.360: W/System.err(9623):     at es.proyecto.gestorincidencias.util.Conexiones.comprobar_usuario(Conexiones.java:55)
06-06 22:06:02.360: W/System.err(9623):     at es.proyecto.gestorincidencias.MainActivity$1.run(MainActivity.java:51)

这是我的网络服务 wsdl 网址

http://50.16.208.44:8080/Service_Incidencia/services/Ejemplo?wsdl

这是我的代码

public class Conexiones {
private static final String NAMESPACE = "http://ws.apache.org/axis2";
private static String URL="http://50.16.208.44:8080/Service_Incidencia/services/Ejemplo?wsdl";  
private static final String METHOD_NAME3 = "comprobar_usuario";
private static final String SOAP_ACTION3 = "http://ws.apache.org/axis2/comprobar_usuario";

public static String comprobar_usuario(String email, String password) {
    String result = null;

    try {
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME3); 
        request.addPropertyIfValue("email", email);
        request.addPropertyIfValue("password", password);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(request);

        HttpTransportSE ht = new HttpTransportSE(URL);
        ht.call(SOAP_ACTION3, envelope);
        final  SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
        result = response.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }

    return result;
}
}

也许重要的是要知道我在 java 1.6 中编译了战争以部署在服务器中,而在我自己的 localhost 中,战争是在 java 1.7 中编译的,希望这不是问题。

感谢您的宝贵时间,我希望有人有解决方案

【问题讨论】:

  • 也许这很明显,但你的安卓应用程序有Internet 权限吗?另外,Conexiones 的哪一行是Conexiones.java:55
  • 是的,它有互联网权限,因为如果它部署在我的本地主机 tomcat7 中,我可以使用网络服务。谢谢你的建议。
  • Conexiones.java:55 是 ht.call(SOAP_ACTION3, 信封);有什么想法吗?
  • 您使用的是哪个版本的 ksoap2-android?
  • 在 WEB-INF/lib 中有 ksoap2-android-assembly-2.5.8-jar-with-dependencies.jar

标签: android web-services wsdl tomcat7 ksoap2


【解决方案1】:

我不知道这是否有帮助,但通过查看您的堆栈跟踪和ksoap2-android 2.5.8 的源代码,以下代码会引发异常:

public void parseBody(XmlPullParser parser) throws IOException, XmlPullParserException
{
    bodyIn = null;
    parser.nextTag();
    if (parser.getEventType() == XmlPullParser.START_TAG && parser.getNamespace().equals(env)
            && parser.getName().equals("Fault"))
    {
        SoapFault fault;
        if (this.version < SoapEnvelope.VER12) {
            fault = new SoapFault(this.version);

在我看来,您在 AWS 上的 Web 服务正在返回一个 Fault 响应,说它是 Cannot open connection。您可以直接在 AWS 上测试您的 Web 服务吗?

您的网络服务是否必须打开与其他服务的连接?

【讨论】:

  • 我的网络服务不需要调用其他服务...它只访问我的数据库并比较用户和密码。我不知道如何在 AWS 中测试它。
  • 但是我的 SoapEnvelope.VER11 为什么?我使用了一个教程来制作这个网络服务,因为它在我的本地主机上工作,所以我没有更深入......也许如果我换成其他 VERXX
  • 我用 SOAPUI 程序测试了 web 服务(本地和 AWS),但 AWS web 服务都失败了。所以问题是我认为的迁移......
  • 已解决,从数据库获取数据是一个内部问题...没有从新 IP 获取信息的权限,我授予权限并且工作正常
猜你喜欢
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多