在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决
ksoap2-android-3.0.0-jar 第三方库来调用.net 写的Web Service 如果没有参数,那么调用一切顺利,但是如果服务是带参数的,那么服务端接收的参数都是nul。
而Web Service单独测试,都是正确的。这个问题困扰我了很久,现在终于解决了,相当简单。百度查了很久,很多解决方法,如:
1、只需要在 WebService的类属性中加入SoapRpcServiceAttribute属性就可以了。
[SoapRpcService(RoutingStyle=SoapServiceRoutingStyle.SoapAction)]
2、参数名必须跟webservice方法中的参数名一致,因为ws将参数名自动改为了arg0、arg1,所有调用时参数也需要修改。
3、NAMESPACE 后面没有加“/”
经过逐一测试,发现按照1修改调用直接异常出错,服务器端都直接拒绝了,按照2改没有任何用处,至于3,我是加了“/”,但依然没有用。但3对我有了个启发,我仔细对比了下命名空间发现我的 WebService类属性命名空间是这么命名的:http://tempuri.org。看到什么问题没?和android端的命名空间对比发现少了“/”。
好吧,我承认我开始以为这个“/”说是加在android客户端的,因为里面的actonSoap = NAMESPACE + Method,这样命名空间空间后面“/”是必须可少的,不然就要写成actonSoap = NAMESPACE + “/” + Method。
虽然加了“/”是成功了,但是原因呢?我们看下下面这位仁兄的代码,他的问题依旧。
这位仁兄的帖子在http://bbs.csdn.net/topics/390554653,也不知道3年过去了他解决了没,我们看具体的报文:
WebServiceStudio 调用的报文(服务端)
<?xml version="1.0" encoding="utf-16"?>
<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>
<GetNewsListByColId xmlns="http://tempuri.org/">
<colId>29</colId>
</GetNewsListByColId>
</soap:Body>
</soap:Envelope> 用Android调用报文(客户端) <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>
<GetNewsListByColId xmlns=" http://tempuri.org/" id="o0" c:root="1">
<colId i:type="d:string">29</colId>
</GetNewsListByColId>14:55:50
</v:Body>
</v:Envelope> 可以看到,具体格式不太一致,但其实本身不影响服务端解析的,这里真正影响的是命名空间,我红色标出的,看到什么问题了吗?都有“/”啊,为什么还出错?!在仔细看看,原来客户端命名空间http前面多了个空格!好吧,原来大家知道了吧,命名空间不一致!原因终于找到了,微软C#端Webservice服务对命名空间要求是要完全一致。
网上很多查资料问问题的时候,常常直接给解决方法,但不说原因,往往大家按照提供的解决方法按部就班去做,但环境各不相同,有些人照着做了成功了,但总有人照着做了就是不行,比如网上提供的第三个解决方法,多说一句命名空间必须保证一致,这样就大家不用纠结添加“/”的这个细节问题了。
在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决的更多相关文章
- 在Android中调用KSOAP2库访问webservice服务出现的服务端返回AnyType{}
最近在做毕业设计的时候,涉及到了安卓端访问web service服务端数据库,并返回一个值,当我把web service测试通过后,想写一个简单的安卓测试程序,来实现服务端数据库访问,通过web se ...
- 在Android中调用C#写的WebService(附源代码)
由于项目中要使用Android调用C#写的WebService,于是便有了这篇文章.在学习的过程中,发现在C#中直接调用WebService方便得多,直接添加一个引用,便可以直接使用将WebServi ...
- 在Android 中使用KSOAP2调用WebService
WebService 是一种基于SOAP协议的远程调用标准.通过WebService可以将不同操作系统平台,不同语言.不同技术整合到一起.在Android SDK中并没有提供调用WebService的 ...
- 在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数 ...
- Android客户端调用Asp.net的WebService
Android客户端调用Asp.net的WebService 我来说两句 |2011-11-23 13:39:15 在Android端为了与服务器端进行通信有几种方法:1.Socket通信2.WCF通 ...
- Android 中调用本地命令
Android 中调用本地命令 通常来说,在 Android 中调用本地的命令的话,一般有以下 3 种情况: 调用下也就得了,不管输出的信息,比如:echo Hello World.通常来说,这种命令 ...
- 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...
- Android中调用C++函数的一个简单Demo
这里我不想多解释什么,对于什么JNI和NDK的相关内容大家自己去百度或谷歌.我对Android的学习也只是个新手.废话少说直接进入正题. 一.在Eclipse中创建一个Android Applicat ...
- Java乔晓松-android中调用系统拍照功能并显示拍照的图片
android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...
随机推荐
- RSA加密解密总结
简单的控制台程序 #include"stdafx.h" #include <math.h> #include<string.h> /*/求解密密钥d的函数( ...
- Linux 基础教程 31-tcpdump命令-3
经过前面的学习,tcpdump的用法相信应该都掌握了,今天我们来学习对tcpdump输出内容的学习和了解.我们以第一个示例进行讲解如下所示: IP协议包分析 [root@localhost ~ ...
- Appium之uiautomator定位元素
元素定位方式有多种,Android也有自身独有的定位方式.下面就单独介绍其基于uiautomator定位元素的方法: 基本语法: driver.find_element_by_android_uiau ...
- Vivado&ISE&Quartus II调用Modelsim级联仿真
博主一直致力寻找高效的工作方式,所以一直喜欢折腾软件,从刚开始只用软件IDE自带的编辑器,到Notepad++,再到后来的Vim,从用ISE14.7自带的Isim仿真,到发现更好的Modelsim,再 ...
- 二道Const,readonly 和 override, new的面试题
1. Const 和 readonly ; ; ; ; static void Main(string[] args) { Console.WriteLine("aa:{0},bb:{1}, ...
- Linux tomcat 添加开机启动
准备工作:将 jdk-7u80-linux-x64.tar.gz 解压到到 /usr/local/目录下将 apache-tomcat-7.0.82.zip 解压到/opt/etcoud目录下,并切换 ...
- SQL 从数据库中随机取n条数据
用NEWID()方法. * ,NEWID() AS random from [toblename] order by random 其中的1可以换成其他任意整数,表示取的数据条数
- 开源日志收集Exceptionless简单使用
这两天在研究一个开源的日志收集工具Exceptionless 官网地址:https://exceptionless.com/GitHub地址:https://github.com/exceptionl ...
- 关于类属性值校验的一点记录 【知识点Attribute】
好久没有进来了,之前励志坚持写博客,记录自己在做代码搬运工这段历程中点滴,可是仅仅只坚持了几天,就放弃了!果然是,世上无难事,只要肯放弃!哈哈……闲话不多说,开始进入正题,给自己留点笔记,避免将来老了 ...
- 面向对象SOLID设计原则之Open-Closed原则
首先,我们看下开放-封闭原则(Open-Closed Principle,简称OCP)的概念: 是指软件实体(类.模块.函数等)应该可以扩展,但是不可修改. 任何新功能(functionality)应 ...