【问题标题】:Android ksoap2 http request failedAndroid ksoap2 http请求失败
【发布时间】:2013-04-17 15:41:59
【问题描述】:

我今天写了自己的网络服务,我想用我的安卓智能手机访问这个服务器。 我按照本教程做到了这一点:http://javatutorialspoint.blogspot.nl/2012/02/simple-java-web-service-client-using.html

它似乎有效,因为当我调用此页面时我得到了正确的结果:localhost:8080/WebServiceV2/services/Calculator?wsdl

但是当我尝试与我的智能手机连接时,应用程序会抛出异常(HTTP 请求失败,HTTP 状态:500)

private static String SOAP_ACTION = "http://apptomap.de/add";
private static String NAMESPACE = "http://apptomap.de";
private static String METHOD_NAME = "add";
private static String URL = "http://192.168.1.34:8080/WebServiceV2/services/Calculator?wsdl";


SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);          
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);

HttpTransportSE ht = new HttpTransportSE(URL);
ht.call(SOAP_ACTION, envelope);
final  SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
final String str = response.toString();

这是我连接 Web 服务的代码,我在这一行得到了异常 -> ht.call(SOAP_ACTION, envelope);

同样的问题是这样的: Soap Throws java.io.IOException: HTTP request failed, HTTP status: 500

有没有人想办法解决这个问题?

编辑:我添加了连接互联网的权限

【问题讨论】:

    标签: java android web-services soap ksoap


    【解决方案1】:

    我收到此错误的 Web 方法接受来自运行 CallSoap Java 代码的 Android 应用程序的两个参数,目标是写入本地计算机上托管的 SQL Server 2008 数据库。

    这可能不适用于您正在测试的教程;但是,向数据库添加新的用户登录(即安全权限 - NT AUTHORITY\Network Service)会有所帮助。

    此外,将包含太多字符的字符串作为参数发送到 Web 方法时发生错误。例如:“01010101010110101010101010101010101010”会抛出java异常错误,而“0101010”不会。

    我猜是对能够作为参数发送的字节数的限制或数据类型不匹配。

    【讨论】:

      【解决方案2】:

      在您的网络服务器上从 www.wireshark.org/download.html 下载并安装协议分析器 wireshark。

      启动wireshark,过滤http或者你的web服务器响应的tcp端口。

      现在运行你的安卓应用到网络服务。

      由于在wireshark 上正在进行探听,您将能够看到ksoap 的故障字符串并进行相应的调试。

      我遇到了日期问题。没有报告故障代码,但从故障字符串中我可以看到“服务器无法读取请求;XML 文档中有错误。字符串 12-10-2013' 不是有效的 Allxsd 值”

      通过这种方式调试,您将知道您的应用发送了哪些错误并根据这些错误进行调试。

      对于那些使用 linux 网络服务器的人,请学习如何使用 tcpdump。

      【讨论】:

        【解决方案3】:

        用 SoapFault try/catch 包围调用

        try {
            ht.call(SOAP_ACTION, envelope);
        } catch (SoapFault soapFault) {
        

        soapFault 将包含从服务器返回的错误消息,应该可以帮助您找出问题所在。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-10
          • 1970-01-01
          • 2015-06-11
          • 1970-01-01
          • 2016-09-07
          • 2014-11-19
          • 1970-01-01
          • 2016-12-17
          相关资源
          最近更新 更多