使用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了,能够接收到服务端回发的用户数据

时间: 2024-12-28 00:26:13

使用Ksoap2调用Web Service加入SoapHeader的相关文章

C#使用SOAP调用Web Service

程序代码 using System;using System.IO;using System.Net;using System.Text; namespace ConsoleApplication1{ class Program    { static void Main(string[] args)        {            //构造soap请求信息            StringBuilder soap = new StringBuilder();            s

php5调用web service

工作中需要用php调用web service接口,对php不熟,上网搜搜,发现关于用php调用web service的文章也不多,不少还是php4里用nusoap这个模块调用的方法,其实php5里已经包含了处理soap的模块,但是资料太少了,上php官网上查帮助,写的不是很容易理解,经过多次实践,终于搞清楚了,php调用web service还是非常简单的.下面用一个例子说明: extension=php_openssl.dll extension=php_soap.dll php.ini 这2

Android调用web Service

---恢复内容开始--- 继总结过web service后,再总结一下android中使用web service. 在android中使用web service需要使用到一个第三方开源的类库——ksoap2.他是一个SOAP Web Service客户端开发包.是android平台上高效.轻量级的SOAP开发包. 使用SOAP需要引入第三方的jar包:ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar.如何加入jar包就不在赘述.下面讲

通过ksoap2-android来调用Web Service操作的实例

import java.io.IOException; import org.ksoap2.SoapEnvelope;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import org.xmlpull.v1.XmlPullParserException;

Java实现与调用Web Service

一. Web Service 1. web service 就是应用程序之间跨语言的调用 例如,天气预报Web Service:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 2. wsdl: web service description language(web服务描述语言) 通过xml格式说明调用的地址方法如何调用,可以看作webservice的说明书 例如,天气预报的:http://www.webxml.com.cn

php5调用web service (笔者测试成功)

转自:http://www.cnblogs.com/smallmuda/archive/2010/10/12/1848700.html 感谢作者分享 工作中需要用php调用web service接口,对php不熟,上网搜搜,发现关于用php调用web service的文章也不多,不少还是php4里用nusoap这个模块调用的方法,其实php5里已经包含了处理soap的模块,但是资料太少了,上php官网上查帮助,写的不是很容易理解,经过多次实践,终于搞清楚了,php调用web service还是非

C#调用Web Service时的身份验证

在项目开发,我们经常会使用WebService,但在使用WebService时我们经常会考虑以下问题:怎么防止别人访问我的WebService?从哪里引用我的WebService?对于第一个问题,就涉及到了WebService是安全问题,因为我们提供的WebService不是允许所有人能引用 的,可能只允许本公司或者是通过授权的人才能使用的.那怎么防止非法用户访问呢?很容易想到通过一组用户名与密码来防止非法用户的调用 .       在System.Net中提供了一个NetworkCredent

VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法

在VB.NET调用Web Service提供的服务 技术qq交流群:JavaDream:251572072 下面是一篇文章比较详细,其实具体操作很简单,把Web Service服务地址,利用工具(VS2010),通过添加引用的形式,添加到项目中来就可以应用了. 大家如果这个地方不会操场的话,可以问问我QQ:1606841559 当Web Service已经处于对外提供服务状态,VB.NET就可以通过HTTP"调用"来使用这些服务了.当然前提是要了解Web Service对外提供服务所对

SPServices介绍之三:使用SPSerivces对象调用Web Service

SPServices介绍之三:使用SPSerivces对象调用Web Service 分类: SPSerivces2014-09-21 04:23 304人阅读 评论(0) 收藏 举报 在上一篇文章SPServices介绍之二中,介绍了一些SPServices的基本方法,除了这些方法,SPServices的主要用处是使用Ajax方法调用SharePoint提供的Web Service. 先看一下语法: [javascript] view plaincopy $().SPServices({ op