2013-04-17 209 views
2

我今天写了自己的web服务,我想用我的android智能手机联系到这台服务器。 我这样做是按照这个教程:http://javatutorialspoint.blogspot.nl/2012/02/simple-java-web-service-client-using.htmlAndroid ksoap2 http请求失败

而且似乎工作,因为我得到正确的结果,当我把这个页面:本地主机:8080/WebServiceV2 /服务/计算器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

任何人都有一个想法来解决这个问题?

编辑:我添加了premission与互联网连接

回答

0

我收到此错误与从与目标运行CallSoap Java代码的Android应用程序接受两个参数的Web方法写的SQL服务器2008数据库托管在我的本地机器上。

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

此外,发送字符串过长的字符作为Web方法的参数时发生错误。举个例子:“01010101010110101010101010101010101010”会抛出java异常错误,但“0101010”不会。

我的猜测是可以作为参数发送的字节量或数据类型不匹配的限制。

0

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

启动wireshark,筛选http或您的Web服务器响应的tcp端口。

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

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

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

调试这种方式,你会知道你的应用发送和调试的错误。

对于那些使用Linux Web服务器请学习如何使用tcpdump。

0

环绕用的SOAPFault呼叫的try/catch

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

的SOAPFault将包含从服务器返回的错误信息,应该可以帮助你找出什么是错的。