我有以下代码调用.net webservice。代码连接到服务正常,但参数(deviceid)似乎没有通过。该方法只返回传递的deviceid,它始终为null。
这告诉我没有传递deviceid参数。我以为我看到有人推荐一个数据包嗅探器来查看传出的xml,但似乎无法记住它是什么。有人可以建议我可以与eclipse和windows一起使用。
活动代码
String deviceid = tManager.getDeviceId();
SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);
PropertyInfo pi = new PropertyInfo();
pi.setName("deviceid");
pi.type = PropertyInfo.STRING_CLASS;
pi.setValue(deviceid.toString());
request.addProperty(pi);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL);
try{
ht.call(SOAP_ACTION, soapEnvelope);
SoapPrimitive result = (SoapPrimitive ) soapEnvelope.getResponse();
Toast.makeText(ctx, "result = " + result.toString(), Toast.LENGTH_SHORT).show();
}catch(Exception e){
e.printStackTrace();
Toast.makeText(ctx, "error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
网络服务代码
<WebMethod()> _
Public Function CheckTrial(ByVal deviceid As String) As String
Return deviceid
End Function
我,我已经尝试了一切,无法弄清楚如何解决这个问题。有没有其他人有任何建议可以尝试?
xml从铁丝鲨发送为间谍:
POST /android_service_test.asmx HTTP/1.1
Host: ikonicsoft.com
user-agent: kSOAP/2.0
soapaction: http://ikonicsoft.com/CheckTrial
content-type: text/xml
connection: close
content-length: 421
<?xml version="1.0" encoding="UTF-8"?>
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:d="http://www.w3.org/2001/XMLSchema"
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<CheckTrial xmlns="http://ikonicsoft.com" id="o0" c:root="1">
<deviceid i:type="d:string">000000000000000</deviceid>
</CheckTrial>
</v:Body>
</v:Envelope>
HTTP/1.1 200 OK
Connection: close
Date: Mon, 21 Jun 2010 16:35:10 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: PleskWin
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Set-Cookie: .ASPXANONYMOUS=fnyqjfFHywEkAAAAZGVjYjZmNTEtNWNiYi00YTIwLWEzYzktNzUxZDNjMDA0OGY00;
expires=Mon, 30-Aug-2010 03:15:09 GMT; path=/; HttpOnly
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 299
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<CheckTrialResponse xmlns="http://ikonicsoft.com/" />
</soap:Body>
</soap:Envelope>
由于
帕特里克
答案 0 :(得分:1)
如果我没弄错的话,ht.call(...)
会返回一个SoapSerializationEnvelope。我相信你需要从你的信封中取出你的反应,而不是你传递的信息
SoapSerializationEnvelope responseEnvelope = ht.call(SOAP_ACTION, soapEnvelope);
SoapPrimitive result = (SoapPrimitive ) responseEnvelope.getResponse();
如果不起作用:
你在使用ksoap2 for android(有Java版本和Android版本)吗?您的网络服务是否要求您登录?在尝试执行类似的任务时,我发现ksoap没有存储会话cookie,尤其是会话ID。我们不得不extend
ServiceConnection和HttpTransportSE将cookie保存为String以保持登录
就数据包嗅探器而言,请查看wire shark。
答案 1 :(得分:0)
尝试设置PropertyInfo
对象的命名空间。
pi.setNamespace(NAMESPACE);
答案 2 :(得分:0)
尝试从webservice中的命名空间中删除冒号(:),即只需将其设为ikonicsoft.com
而不是http://ikonicsoft.com
- 并更新您的soap引用调用以使用新的命名空间。这很疯狂,但这解决了我的问题(在Blackberry上,但我认为同样的原则适用)。
编辑 - 如果您尝试使用您不拥有的Web服务,这不是理想的,但它至少是一种使用您自己的Web服务的解决方案。我绝对感到困惑的是为什么那里的冒号搞乱了,但我注意到直接在网络服务器上做了一个HTML帖子(通过telnet到网络服务器上的端口80),我得到了同样的错误。