使用Ksoap2调用Web Service加入SoapHeader
关于这个问题,如果使用百度都是前篇一律的代码,好不容易上了google才找到完整的方法,这里讲所有的代码都贴出来与大家分享。
首先是.NET写的后台代码

/// <summary>
/// SoapHeader
/// </summary>
public class OwnSoapHeader:SoapHeader
{
public string UserName { get; set; }
public string Password { get; set; }
} /// <summary>
/// WebService1 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
// [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService
{
public OwnSoapHeader OwnSoapHeader;
[WebMethod]
[SoapHeader("OwnSoapHeader")]
public string Login()
{
if (OwnSoapHeader != null)
{
return OwnSoapHeader.UserName + "," + OwnSoapHeader.Password;
}
return "尚未登录";
}
}

接下来是在浏览器中浏览查看我的接口,这里面有很重要的信息,包含了SoapHeader的名字以及参数

随后就是使用Ksoap2调用我的接口了

private void DoLogin() {
new Thread() {
@Override
public void run() {
Looper.prepare();
// TODO Auto-generated method stub
String sNameSpace = "http://tempuri.org/";
String sMethodName = "Login";
String sActionString = "http://tempuri.org/Login";
String sURL = "http://192.168.1.101:8088/WebService1.asmx";
SoapObject rpc = new SoapObject(sNameSpace, sMethodName);
//在这里加入了SoapHeader
Element[] header = new Element[1];
//OwnSoapHeader与上图红色标记处名字一致
header[0] = new Element().createElement(sNameSpace, "OwnSoapHeader ");
//UserName上图红色标记处名字一致
Element username = new Element().createElement(sNameSpace,
"UserName");
username.addChild(Node.TEXT, "admin");
header[0].addChild(Node.ELEMENT, username);
//Password上图红色标记处名字一致
Element pass = new Element().createElement(sNameSpace,
"Password");
pass.addChild(Node.TEXT, "123");
header[0].addChild(Node.ELEMENT, pass);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER12);
envelope.headerOut = header;
envelope.bodyOut = rpc;
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
HttpTransportSE ht = new HttpTransportSE(sURL);
SoapObject soapObject = null;
try {
ht.call(sActionString, envelope);
soapObject = (SoapObject) envelope.bodyIn;
} catch (IOException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
} catch (XmlPullParserException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
}
Bundle result = new Bundle();
if (soapObject != null) {
result.putString("result", soapObject.toString());
} else {
result.putString("result", sURL);
}
Message msg = new Message();
msg.setData(result);
msg.what = 1;
handler.handleMessage(msg);
Looper.loop();
}
}.start();
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
if (msg.what == 1) {
Bundle result = msg.getData();
String text = result.getString("result");
Toast.makeText(MainActivity.this, text, Toast.LENGTH_LONG)
.show();
}
}
};

至此已经全部OK了,能够接收到服务端回发的用户数据
使用Ksoap2调用Web Service加入SoapHeader的更多相关文章
- php5调用web service
工作中需要用php调用web service接口,对php不熟,上网搜搜,发现关于用php调用web service的文章也不多,不少还是php4里用nusoap这个模块调用的方法,其实php5里已经 ...
- 通过ksoap2-android来调用Web Service操作的实例
import java.io.IOException; import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObjec ...
- php5调用web service (笔者测试成功)
转自:http://www.cnblogs.com/smallmuda/archive/2010/10/12/1848700.html 感谢作者分享 工作中需要用php调用web service接口, ...
- C#使用SOAP调用Web Service
程序代码 using System;using System.IO;using System.Net;using System.Text; namespace ConsoleApplication1{ ...
- ORACLE存储过程调用Web Service
1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...
- C#开发和调用Web Service
http://blog.csdn.net/h0322/article/details/4776819 1.1.Web Service基本概念 Web Service也叫XML Web Service ...
- 使用Android应用调用Web Service
Java本身提供了丰富的Web Service支持,比如Sun公司指定的JAX-WS 2规范,还有Apache开源组织所提供的Axis1.Axis2.CXF等,这些技术不仅可以用于非常方便地对外提 ...
- Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能
前面介绍过如何克隆一条当前的记录: Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 主要是通过界面上加一个字段,单击form上的clone 按钮时,改变这个字段的值以触发插件来实现 ...
- ASP.NET调用Web Service
1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...
随机推荐
- starting Intent from ProcessRecord with revoked permission android.permission.CALL_PHONE 的错误
昨天写个电话拨号器,很简单就一个Edittext和一个button,用来输入号码并且点击按钮拨打电话,但是写好以后报的是安全错误,我上网查了下,原来是缺少授权,于是我在AndroidManifest. ...
- Domino 8.5 WebService开发一例
原文地址:Domino 8.5 WebService开发一例作者:bj木棉 需求是要调用一个Domino上的WebService/JAVA来实现与人事管理系统里的人员同步,就是在人事管理系统中增加用户 ...
- 使用SOCKET TCP
刚刚接触SOCKET编程,网上看了一些资料,发现做些简单的应用还是不难.但是要深入了解SOCKET编程还需要系统的看一些书.一般在进程间通信TCP是一种不错的方式. ---XXX TCP链接是面向流的 ...
- 【转载】Express、Koa、Hapi框架对比
中文翻译:http://ourjs.com/detail/5490db1c8a34fa320400000e 英文原文:https://www.airpair.com/node.js/posts/nod ...
- 机器学习之python: kNN
################################################## # kNN : k Nearest Neighbour # Author : Monne # Da ...
- MarkdownPad 使用 MathJax
一直想要在MarkdownPad中支持数学公式,终于找到了一个方法: 在MarkdownPad中,点击"Tools > Options > Advanced > HTML ...
- PYTHON文件多线程下载
其实,在一般的文件编程中,这有两个概念要说明: 第一是,下载一个大文件,将这个大文件多为多线程. 第二是,下载N多小文件,将每个线程指定下载多个小文件. 现在实现的是多线程下载一个大文件. 今天完成了 ...
- Bug解决过程复盘
反思了下,解决问题无外乎3w1h when where who how 就是查询出来的事情多了,现在不知道哪个地方出问题,应该根据日志一步一步梳理,查看每一步的输出结果是否与预期一致 顺藤摸瓜 觉得不 ...
- BZOJ3315: [Usaco2013 Nov]Pogo-Cow
3315: [Usaco2013 Nov]Pogo-Cow Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 143 Solved: 79[Submit] ...
- MongoVUE简单操作手册
本文转自网络,对疑问的地方做了修改 官方参考文献:http://www.mongovue.com/tutorials/ MongoVUE 是个比较好用的MongoDB客户端,需要注册,但是可以变成永久 ...