ksoap2-3.0.0调用.net WebService 服务端参数为空

billandterry 2013-08-19 05:26:13
各位大侠好:
小弟这几天刚学Android开发,遇到一个问题,困恼好几天,希望大家帮忙。
我使用 ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar 第三方库来调用.net 写的Web Service 如果没有参数,那么调用一切顺利,但是如果服务是带参数的,那么服务端接收的参数都是NULL。
而Web Service单独测试,都是正确的。

private static final String NAMESPACE = " http://tempuri.org/";
private static final String METHOD_NAME = "GetNewsListByColId";
private static String SOAP_ACTION = NAMESPACE + METHOD_NAME;
private static String URL = "http://XXXX/WebService1.asmx";
// 返回的查询结果
String result = null;


// 获得返回请求对象
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
// 设置需要返回请求对象的参数
System.out.println("request.addProperty(colId," + colId);


// 设置soap的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// 设置是否调用的是dotNet开发的
envelope.dotNet = true;
envelope.bodyOut = request;

HttpTransportSE ht = new HttpTransportSE(URL,10000);//第二个参数是超时时间 10秒
request.addProperty("colId","29");
//request = request.addProperty("arg0","29");

ht.debug = true;

// web service请求
try {
ht.call(SOAP_ACTION, envelope);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 得到返回结果
Object o =null;

try {
o = envelope.getResponse();
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
result = o.toString();
return result;

服务端代码
 /// <summary>
/// 获取信息信息列表,可以根据新闻类型ID
/// </summary>
/// <param name="colId">新闻类型</param>
/// <returns>新闻标题列表</returns>
[WebMethod]
public string GetNewsListByColId(string colId)
{
}



网络上也有人提出问题,但是解决办法都是没有,
例如,NAMESPACE 没有加“/”
参数名为 arg0,in0

我截获了报文,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>
</v:Body>
</v:Envelope>


发现根本不一样
...全文
431 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyaqiy 2014-07-24
  • 打赏
  • 举报
回复
不错,有帮助
xkyue23 2013-09-16
  • 打赏
  • 举报
回复
public JSONArray GetJSONArray(SoapObject soapObject, String method) { SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(soapObject); HttpTransportSE httpTranstation = new HttpTransportSE(webUrl, getTimeout);// 获取数据超时2分钟 try { httpTranstation.call(getTargetNameSpace() + method, envelope); JSONObject jsonobject = new JSONObject("{list:" + envelope.getResponse().toString() + "}"); return jsonobject.getJSONArray("list"); } catch (Exception e) { Log.e("180", "接口获取数据异常" + e.getMessage()); } return null; } public JSONArray GetLoginPersonInfo(String userName, String userpwd) { SoapObject soapObject = new SoapObject(getTargetNameSpace(), GetUser); soapObject.addProperty("userName", userName); soapObject.addProperty("userpwd", userpwd); try { return GetJSONArray(soapObject, GetUser); } catch (Exception e) { Log.e("180", e.getMessage()); } return null; }正式项目使用 没有问题
有只坏龙猫 2013-09-16
  • 打赏
  • 举报
回复
引用 4 楼 u011745431 的回复:
[quote=引用 2 楼 waverq2001 的回复:] 我也碰到同样的问题,怎么都解决不了。后来没用ksoap,自己构造报文了。
如何自己构造报文呢? 求代码,谢谢~~~~~ 36673319@qq.com[/quote]http://bbs.csdn.net/topics/390591966麻烦帮我看看这个问题,我的版本是2.5.2.
阿鹏兄 2013-08-22
  • 打赏
  • 举报
回复
换版本试试吧。
tcmakebest 2013-08-21
  • 打赏
  • 举报
回复
用 ksoap 2.5.4 呢,我一直用的这个,会不会有 BUG
billandterry 2013-08-21
  • 打赏
  • 举报
回复
引用 2 楼 waverq2001 的回复:
我也碰到同样的问题,怎么都解决不了。后来没用ksoap,自己构造报文了。
如何自己构造报文呢? 求代码,谢谢~~~~~ 36673319@qq.com
billandterry 2013-08-21
  • 打赏
  • 举报
回复
引用 1 楼 tcmakebest 的回复:
有点奇怪,能不能把 addProperty 写靠前点,就放在 request 定义后面。
把addProperty 放到前面 也是一样的结果 我就是因为看了网络上的某篇文章 才把位置移下来的。 没人解决吗? 大家是不是觉得用Android来调用.net平台的服务很奇怪啊
billandterry 2013-08-21
  • 打赏
  • 举报
回复
引用 5 楼 tcmakebest 的回复:
用 ksoap 2.5.4 呢,我一直用的这个,会不会有 BUG
谢谢,如果实在是没人能够解答,那我只好用低版本的试试了,或者目前还没人使用这个最新的版本
waverq2001 2013-08-20
  • 打赏
  • 举报
回复
我也碰到同样的问题,怎么都解决不了。后来没用ksoap,自己构造报文了。
tcmakebest 2013-08-20
  • 打赏
  • 举报
回复
有点奇怪,能不能把 addProperty 写靠前点,就放在 request 定义后面。
源码链接: https://pan.quark.cn/s/a4b39357ea24 在本研究中,我们将详细研究如何借助Python执行数据可视化,旨在剖析2018年期间中国四个主要城市——北京、上海、广州以及深圳的空气质量状况。通过绘制反映空气质量指数(AQI)与细颗粒物(PM2.5)变化趋势的图表,我们能够深入理解这些大都市全年的空气环境质量,并明确评估其优良天气所占的比重。 我们必须首先进行数据准备工作。在当前提供的压缩文件内,名为"2018天气"的文件极有可能是数据来源,其中可能收录了涉及四个城市每日空气质量监测的详细信息。这些数据通常涵盖日期、城市名称、AQI数值、PM2.5含量等核心参数。在Python编程环境中,我们惯常运用pandas库来对这类结构化数据进行高效的处理和分析。 1. **数据导入与初步处理**: - 利用`pandas.read_csv()`方法来导入存储为CSV格式的数据资料。 - 数据整理:对数据中的空白项、非正常数值进行修正,保证数据的精确性。 - 调整日期字段的格式,确保其能够适用于时间序列分析的需求。 2. **数据深度分析**: - 针对每个城市的AQI和PM2.5数据执行统计性描述,例如计算平均值、中位数、标准偏差等指标。 - 确定空气质量良好天气的天数,即那些AQI值低于75(依据中国的空气质量评估标准)的日数。 3. **数据呈现**: - 运用matplotlib或seaborn工具绘制折线图,直观展示四个城市在2018年全年的AQI和PM2.5变化动态。 - 可通过采用不同的颜色方案和线条类型来区分不同城市的数据系列。 - 添加必要的图示元素,如日期坐标轴、城市名称标注、图表标题及图例说明,以提升图表的可读...

80,488

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧