接着上一章的内容,在上一章中我们知道了如何.net平台下去建立一个WebService,以及同步调用、异步调用、开线程异步调用三种客户端从服务端获取数据的方式,在本章了所要讲的,是如何将客户端的数据,传递给服务端,进行客户端和服务端的双相交互

服务端

建立UserManager.cs类,添加using System.Web.Services.Protocols;命名空间,并使它继承自SoapHeader
输入以下代码

  1.  
    public class UserManager:SoapHeader
  2.  
    {
  3.  
    public string Name { get; set; }
  4.  
    public string Pwd { get; set; }
  5.  
     
  6.  
     
  7.  
    private bool CheckUser(string n,string p)
  8.  
    {
  9.  
    if(Name == "aaa" && Pwd == "bbb")
  10.  
    {
  11.  
    return true;
  12.  
    }
  13.  
    else
  14.  
    {
  15.  
    return false;
  16.  
    }
  17.  
    }
  18.  
     
  19.  
     
  20.  
    public bool CheckUser()
  21.  
    {
  22.  
    return CheckUser(Name, Pwd);
  23.  
    }
  24.  
    }

在服务端的WSDemo.asmx文件中输入以下代码

  1.  
    public class WSDemo : System.Web.Services.WebService
  2.  
    {
  3.  
     
  4.  
     
  5.  
    [WebMethod]
  6.  
    public string HelloWorld()
  7.  
    {
  8.  
    return "Hello World";
  9.  
    }
  10.  
     
  11.  
     
  12.  
    //标准一下CheckUser()方法使用哪个SoapHeader进行校验,客户端网站调用该方法时需要指定自己定义的SoapHeader内容
  13.  
    //这样,虽然CheckUser()并没有参数,但在在使用时,要先定义UserManager的SoapHeader的头,放在CheckUser中
  14.  
    public UserManager um;
  15.  
    [SoapHeader("um")]
  16.  
    [WebMethod(Description = "用户验证")]
  17.  
    public bool CheckUser()
  18.  
    {
  19.  
    if (um.CheckUser())
  20.  
    {
  21.  
    return true;
  22.  
    }
  23.  
    else
  24.  
    {
  25.  
    return false;
  26.  
    }
  27.  
    }
  28.  
    }

至此,服务端操作完毕

客户端---同步方式

操作完服务端后,要在ServiceReference1上右击“更新服务引用”

图10
在Index.aspx.cs中输入以下代码:

  1.  
    public partial class Index : System.Web.UI.Page
  2.  
    {
  3.  
    protected string stator = string.Empty;
  4.  
    protected void Page_Load(object sender, EventArgs e)
  5.  
    {
  6.  
    using (ServiceReference1.WSDemoSoapClient wsc = new WSDemoSoapClient())
  7.  
    {
  8.  
    //UserManager服务端中的类名
  9.  
    ServiceReference1.UserManager um = new UserManager();
  10.  
    um.Name = "aaa";
  11.  
    um.Pwd = "bbb";
  12.  
    stator = wsc.CheckUser(um)?"登录成功":"用户名或密码错误";//三目运算符,更据服务端返回值确定向浏览器输出内容
  13.  
    }
  14.  
    Response.Write(stator);
  15.  
    }
  16.  
    }

至此,客户端操作完毕,此时可发现在用户名和密码不对的情况下,浏览器所输入的值

客户端---异步方式

将Index.aspx.cs中的代码修改为以下方式

  1.  
    public partial class Index : System.Web.UI.Page
  2.  
    {
  3.  
    protected string stator = string.Empty;
  4.  
    protected void Page_Load(object sender, EventArgs e)
  5.  
    {
  6.  
    using (ServiceReference1.WSDemoSoapClient client = new WSDemoSoapClient())
  7.  
    {
  8.  
    //要执行的方法
  9.  
    client.CheckUserCompleted += new EventHandler<CheckUserCompletedEventArgs>(client_CheckUserCompleted);
  10.  
    //为传参做准备,因为添加了“服务引用”所以在客户端也能点出服务端中公布的的方法来
  11.  
    ServiceReference1.UserManager um = new UserManager();
  12.  
    um.Name = "aaa";
  13.  
    um.Pwd = "bbb";
  14.  
    //开始执行
  15.  
    client.CheckUserAsync(um);
  16.  
    }
  17.  
    }
  18.  
    //要执行的方法
  19.  
    void client_CheckUserCompleted(object sender, CheckUserCompletedEventArgs e)
  20.  
    {
  21.  
    stator = e.Result ? "登录成功" : "登录失败";
  22.  
    Response.Write(stator);
  23.  
    }
  24.  
    }

客户端---开线程的异步方式

将Index.aspx.cs中代码更改为以下形式

  1.  
    public partial class Index : System.Web.UI.Page
  2.  
    {
  3.  
    protected string stator = string.Empty;
  4.  
    protected void Page_Load(object sender, EventArgs e)
  5.  
    {
  6.  
    BackgroundWorker bw = new BackgroundWorker();
  7.  
    bw.DoWork += new DoWorkEventHandler(bw_DoWork);//指明线程要执行方法
  8.  
    bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);//获取从服务端中的返回值
  9.  
    bw.RunWorkerAsync();//开始执行
  10.  
    }
  11.  
    //获取从服务端中的返回值
  12.  
    void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  13.  
    {
  14.  
    stator = (bool)e.Result ? "登录成功" : "登录失败";
  15.  
    Response.Write(stator);
  16.  
    }
  17.  
    //指明线程要执行方法
  18.  
    void bw_DoWork(object sender, DoWorkEventArgs e)
  19.  
    {
  20.  
    //建立客户端和服务端的链接
  21.  
    using (ServiceReference1.WSDemoSoapClient client = new WSDemoSoapClient())
  22.  
    {
  23.  
    //对服务端公布方法UserManager进行实例化并赋值
  24.  
    UserManager um = new UserManager();
  25.  
    um.Name = "aaa";
  26.  
    um.Pwd = "bbb";
  27.  
    //调用服务端方法,并传入参数
  28.  
    e.Result = client.CheckUser(um);//注意e.Result = ...
  29.  
    }
  30.  
    }
  31.  
    }

至此,开线程异步客户端传参与服务器数据交互操作完毕

出处:https://blog.csdn.net/zhangquanok/article/details/15338697

WebService的web客户端同步、异步、多线程向服务端传入参数的数据交互方式的更多相关文章

  1. 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决

    ksoap2-android-3.0.0-jar 第三方库来调用.net 写的Web Service 如果没有参数,那么调用一切顺利,但是如果服务是带参数的,那么服务端接收的参数都是nul.      ...

  2. c++ 网络编程(九)LINUX/windows-IOCP模型 多线程超详细教程及多线程实现服务端

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9661012.html 先讲Linux下(windows下在后面可以直接跳到后面看): 一.线程 ...

  3. (转)客户端触发Asp.net中服务端控件事件

    第一章. Asp.net中服务端控件事件是如何触发的 Asp.net 中在客户端触发服务端事件分为两种情况: 一. WebControls中的Button 和HtmlControls中的Type为su ...

  4. python并发编程-多线程实现服务端并发-GIL全局解释器锁-验证python多线程是否有用-死锁-递归锁-信号量-Event事件-线程结合队列-03

    目录 结合多线程实现服务端并发(不用socketserver模块) 服务端代码 客户端代码 CIL全局解释器锁****** 可能被问到的两个判断 与普通互斥锁的区别 验证python的多线程是否有用需 ...

  5. WebSocket安卓客户端实现详解(三)–服务端主动通知

    WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...

  6. Android-低功耗蓝牙(BLE)-客户端(主机/中心设备)和服务端(从机/外围设备)

    一.Android 低功耗蓝牙(BLE)的API简介 从Android 4.3(API 18)才支持低功耗蓝牙(Bluetooth Low Energy, BLE)的核心功能, BLE蓝牙协议是GAT ...

  7. (8)Linux(客户端)和Windows(服务端)下socket通信实例

    Linux(客户端)和Windows(服务端)下socket通信实例: (1)首先是Windows做客户端,Linux做服务端的程序 Windows   Client端 #include <st ...

  8. 编写Java程序,使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)

    查看本章节 查看作业目录 需求说明: 小冰是微软公司研发的人工智能机器人,被腾讯公司加入 QQ 群后,立即受到千万网友的喜爱.现在使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的 ...

  9. webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成

    首先到CXF官网及spring官网下载相关jar架包,这个不多说.webservice是干嘛用的也不多说. 入门例子 模拟新增一个用户,并返回新增结果,成功还是失败. 大概的目录如上,很简单. Res ...

随机推荐

  1. robot framework学习笔记1之_环境安装(win7)

    一.简介 Robotframework是基于Python的自动化测试框架.使用关键字驱动的测试方法,自带丰富的库函数可直接引用,可使用Java/Python进行功能库扩展,测试用例使用TSV/HTML ...

  2. C#下实现的K-Means优化[1]-「离群点检测」

    资源下载 #本文PDF版下载 C#下实现的K-Means优化[1]-「离群点检测」 前言 在上一篇博文中,我和大家分享了「C # 下实现的多维基础K-MEANS聚类」的[C#下实现的基础K-MEANS ...

  3. python-day20--collections模块

    1.namedtuple: 生成可以使用名字来访问元素内容的tuple >>> from collections import namedtuple >>> Poi ...

  4. zzuli2130卡时bfs题

    https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2130 2130: hipercijevi Time Limit: 1 Sec  Memory Li ...

  5. Oracle11g温习-第九章:表空间和数据文件管理

    2013年4月27日 星期六 10:37 1.tablespace 功能:从逻辑上简化数据库的管理 2.tablespace 概述 一个database 对应多个tablespace ,一个table ...

  6. Django rest framework(2)----权限

    一 添加权限 (1)API/utils文件夹下新建premission.py文件,代码如下: message是当没有权限时,提示的信息 #!/usr/bin/env python # coding:u ...

  7. VGA

    VGA(Video Graphics Array )视频图形阵列,是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高.显示速率快.颜色丰富等优点,在彩色显示器领域得到了广泛的应用 ...

  8. Myeclipse快键键

    ------------------------------------MyEclipse 快捷键1(CTRL)-------------------------------------Ctrl+1 ...

  9. Mysql 分区表-分区操作

    一.查看MySQL是否支持分区 1.MySQL5.6以及之前版本 show variables like '%partition%'; 2.MySQL5.7 show plugins; 二.分区表的分 ...

  10. (转载)Java 自动装箱与拆箱、equals和==的比较

    什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象实例的时候,我们会这样: Class a = ...