2

我今天写了我自己的网络服务,我想用我的安卓智能手机访问这个服务器。我按照本教程做到了这一点: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

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

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

4

3 回答 3

0

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

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

现在将您的 android 应用程序运行到 Web 服务。

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

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

以这种方式进行调试,您将知道您的应用程序正在发送哪些错误并据此进行调试。

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

于 2013-10-22T16:24:50.600 回答
0

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

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

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

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

于 2013-06-06T17:37:56.100 回答
0

用 SoapFault try/catch 包围通话

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

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

于 2016-12-23T09:58:21.703 回答