您的位置:首页 > 其它

基于SOAP与服务器进行数据交互

2013-05-23 21:14 225 查看
近日,在做一个android项目的时候,有用到和.net服务器进行数据交互的功能,但是自己不太会做,所以就问了一些同事,然后参见了些网上的基于SOAP与数据库进行数据交互的例子,然后就写出了下面的代码:

public static int getTaskCount(int orgId, int state) {
String str = null;
int taskCount = 0;

// 实例化SoapObject对象,Common.SERVICE_NAMESPACE = "http://tempuri.org/" :命名空间
// Common.TASK_COUNT_METHOD_NAME是方法名
SoapObject request = new SoapObject(Common.SERVICE_NAMESPACE,
Common.TASK_COUNT_METHOD_NAME);

// 传入SoapObject对象中的参数,如果没有参数的话也可以不要
request.addProperty("orgid", orgId);
request.addProperty("state", state);

// 设置SOAP请求信息,把构造好的soapObject封装进去,设置好属性后,再发出请求
// (参数部分为SOAP协议版本号,与webservice版本号一致)
/*
* 常量SoapEnvelope.VER10:对应于SOAP1.0规范 常量SoapEnvelope.VER11:对应于SOAP1.1规范
* 常量SoapEnvelope.VER12:对应于SOAP1.2规范
*/
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.dotNet = true;
envelope.setOutputSoapObject(request);

/*
* 在kSOAP中,我们用Base64把二进制流编码为ASCII字符串, 这样就可以通过XML/SOAP传输二进制数据了。
* org.ksoap2.serialization.MarshalBase64的目的就是, 把SOAP
* XML中的xsd:based64Binary元素序列化为Java字节数组(byete array)类型。
* 类似的,kSOAP2还提供了MarshalDate、MarshalHashtable类
* 来把相应的元素序列化为Java的Date、Hashtable类型。 (该步可省 据需要决定) (new
* MarshalBase64()).register(envelope);
*/
// 注册envelope
(new MarshalBase64()).register(envelope);

// 构建传输对象,开启调试信息
//Common.SERVICE_URL = "http://222.188.91.150:8010/APP_WebServices/FMOA_WebService.asmx?wsdl"
AndroidHttpTransport transport = new AndroidHttpTransport(
Common.SERVICE_URL);
transport.debug = true;

try {
// 调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象)
transport.call(Common.SERVICE_NAMESPACE
+ Common.TASK_COUNT_METHOD_NAME, envelope);

// 取得返回数据
if (envelope.getResponse() != null) {
str = ((SoapObject) envelope.bodyIn).getProperty(0).toString();
}

if (str != null && !"".equals(str)) {
taskCount = Integer.parseInt(str);
}
} catch (Exception e) {
e.printStackTrace();
}

return taskCount;
}


当然在编写这些代码之前需要引入一个jar文件:ksoap的jar包。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐