使用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上的其它系统中传递过来的请求, ...
随机推荐
- Ubuntu桌面版与服务器版有什么不同?
提到安装Linux,Ubuntu可谓是最受欢迎的.为了满足每个人的需求,出现了不少版本或风格的Ubuntu;其中两项便是桌面版与服务器版.只要发布版本号一致,这两者从核心来说也就是相同的,唯 ...
- Mybatis的学习总结(一)——使用配置文件实现增删改查
在使用Mybatis作为持久层来进行操作数据库,有很多的操作都是一样的,基本上都是先得到session,然后调用session提供的相关方法进行操作,接着提交session,最后关闭session.那 ...
- QT5在VS2013中找不到QtNetwork或QTcpSocket或QTcpSocket等头文件
一.首先是要有相关的库文件 方法一:手动添加库文件Qt5Networkd.lib 对项目进行右键,找到相关的属性,然后查看Linker中input部分的红色选项中是否含有Qt5Networkd.lib ...
- Axure矩形边框重合边框变成双倍宽度解决办法
选中两个矩形,菜单栏选择项目——项目设置——边界对齐(选择中心边界沿形状的边缘或者内边界对齐.将外边界对齐改为内边界对齐),即可去掉重合效果
- eclipse下编译openfire3.9.1源码
[一].下载源码 打开网址:http://www.igniterealtime.org/downloads/source.jsp 选择目前最新版本 openfire_src_3_9_1.zip 下载. ...
- innerHTML的运用
<!doctype html> <html> <style> li{float:left;margin:0 100px;color:red;} </style ...
- c# windows 服务学习
用C#做windows服务变得简单对了===按照下面步骤来就行了 用C#创建Windows服务(Windows Services)例子服务功能:这个服务在启动和停止时,向一个文本文件中写入一些文字信息 ...
- jdk8永久代从方法区移除的验证
/*** 测试使用jdk8中是否仍然可以使用永久代* jvm options * -Xms20m -Xmx20m -Xmn10m -XX:PermSize=10m -XX:MaxPermSize=10 ...
- Linux下使用QQ的几种方式
Linux下没有官方的QQ聊天应用,对于经常使用QQ与朋友同事沟通交流的小伙伴们来说肯定很不方便,在Linux下可以使用以下几种方法使用QQ: 1.wine qq for linux Ubuntu ...
- POSTGRESQL小玩
因为CDH上需要用它来建HIVE的元库... 参考: http://www.cnblogs.com/mchina/archive/2012/06/06/2539003.html 一.简介 Postgr ...