使用SOAP版本11的ksoap2库(v2.6.4),我正在通过2.3.3模拟器设备执行Web服务。服务器识别出请求的操作并提供预期的答案。 HTTP / 1.1标头(在服务器端调试)包含以下内容:
User-Agent: ksoap2-android/2.6.0+
SOAPAction: myAction
Content-Type: text/xml;charset=utf-8
Connection: close
Content-Length: 1481
Host: xxx.xxx.xxx.xxx
Accept-Encoding: gzip
尝试启动相同的应用程序-一切都相同(如果在IT世界中有这样的事情),相同的源,库,soap config,请求,服务器等-但这一次是在2.2仿真器设备上。服务器拒绝该请求,声称该请求中缺少SOAPAction。日志显示此请求带有以下HTTP标头:
user-agent: ksoap2-android/2.6.0+
soapaction: myAction
content-type: text/xml;charset=utf-8
connection: close
content-length: 1481
Host: xxx.xxx.xxx.xxx
因此,SOAPAction(在标头的其他部分中)作为小写参数到达。服务器无法识别小写的“ soapaction”,并拒绝了我的请求。我需要此应用程序才能在Android 2.2+上运行
任何想法从哪里开始?
编辑:这就是我发送SOAP请求的方式。如果有什么帮助。
public Object executeMyFunction(SoapObject request) throws Exception {
SoapSerializationEnvelope envelope = new
SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.implicitTypes = false;
envelope.dotNet = true;
envelope.setAddAdornments(false);
HttpTransportSE _ht = new HttpTransportSE(Configuration.getWsUrl());
_ht.call("myFunction", envelope);
return envelope.getResponse();
}
最佳答案
我对ksoap2有类似的问题。应用程序在android 2.2上运行,但在2.3.3上不运行。导致问题的原因是大小写,因此我正在寻找响应标头参数:
set-cookie
装的
Set-Cookie
IgnoreCase
解决了我的问题。您应该始终尝试使用Wireshark捕获来自仿真器的HTTP消息,然后进行比较。