WebService的web客户端同步、异步、多线程向服务端传入参数的数据交互方式
服务端
建立UserManager.cs类,添加using System.Web.Services.Protocols;命名空间,并使它继承自SoapHeader
输入以下代码
- public class UserManager:SoapHeader
- {
- public string Name { get; set; }
- public string Pwd { get; set; }
- private bool CheckUser(string n,string p)
- {
- if(Name == "aaa" && Pwd == "bbb")
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- public bool CheckUser()
- {
- return CheckUser(Name, Pwd);
- }
- }
在服务端的WSDemo.asmx文件中输入以下代码
- public class WSDemo : System.Web.Services.WebService
- {
- [WebMethod]
- public string HelloWorld()
- {
- return "Hello World";
- }
- //标准一下CheckUser()方法使用哪个SoapHeader进行校验,客户端网站调用该方法时需要指定自己定义的SoapHeader内容
- //这样,虽然CheckUser()并没有参数,但在在使用时,要先定义UserManager的SoapHeader的头,放在CheckUser中
- public UserManager um;
- [SoapHeader("um")]
- [WebMethod(Description = "用户验证")]
- public bool CheckUser()
- {
- if (um.CheckUser())
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
至此,服务端操作完毕
客户端---同步方式
操作完服务端后,要在ServiceReference1上右击“更新服务引用”
图10
在Index.aspx.cs中输入以下代码:
- public partial class Index : System.Web.UI.Page
- {
- protected string stator = string.Empty;
- protected void Page_Load(object sender, EventArgs e)
- {
- using (ServiceReference1.WSDemoSoapClient wsc = new WSDemoSoapClient())
- {
- //UserManager服务端中的类名
- ServiceReference1.UserManager um = new UserManager();
- um.Name = "aaa";
- um.Pwd = "bbb";
- stator = wsc.CheckUser(um)?"登录成功":"用户名或密码错误";//三目运算符,更据服务端返回值确定向浏览器输出内容
- }
- Response.Write(stator);
- }
- }
至此,客户端操作完毕,此时可发现在用户名和密码不对的情况下,浏览器所输入的值
客户端---异步方式
将Index.aspx.cs中的代码修改为以下方式
- public partial class Index : System.Web.UI.Page
- {
- protected string stator = string.Empty;
- protected void Page_Load(object sender, EventArgs e)
- {
- using (ServiceReference1.WSDemoSoapClient client = new WSDemoSoapClient())
- {
- //要执行的方法
- client.CheckUserCompleted += new EventHandler<CheckUserCompletedEventArgs>(client_CheckUserCompleted);
- //为传参做准备,因为添加了“服务引用”所以在客户端也能点出服务端中公布的的方法来
- ServiceReference1.UserManager um = new UserManager();
- um.Name = "aaa";
- um.Pwd = "bbb";
- //开始执行
- client.CheckUserAsync(um);
- }
- }
- //要执行的方法
- void client_CheckUserCompleted(object sender, CheckUserCompletedEventArgs e)
- {
- stator = e.Result ? "登录成功" : "登录失败";
- Response.Write(stator);
- }
- }
客户端---开线程的异步方式
将Index.aspx.cs中代码更改为以下形式
- public partial class Index : System.Web.UI.Page
- {
- protected string stator = string.Empty;
- protected void Page_Load(object sender, EventArgs e)
- {
- BackgroundWorker bw = new BackgroundWorker();
- bw.DoWork += new DoWorkEventHandler(bw_DoWork);//指明线程要执行方法
- bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);//获取从服务端中的返回值
- bw.RunWorkerAsync();//开始执行
- }
- //获取从服务端中的返回值
- void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- stator = (bool)e.Result ? "登录成功" : "登录失败";
- Response.Write(stator);
- }
- //指明线程要执行方法
- void bw_DoWork(object sender, DoWorkEventArgs e)
- {
- //建立客户端和服务端的链接
- using (ServiceReference1.WSDemoSoapClient client = new WSDemoSoapClient())
- {
- //对服务端公布方法UserManager进行实例化并赋值
- UserManager um = new UserManager();
- um.Name = "aaa";
- um.Pwd = "bbb";
- //调用服务端方法,并传入参数
- e.Result = client.CheckUser(um);//注意e.Result = ...
- }
- }
- }
至此,开线程异步客户端传参与服务器数据交互操作完毕
出处:https://blog.csdn.net/zhangquanok/article/details/15338697
WebService的web客户端同步、异步、多线程向服务端传入参数的数据交互方式的更多相关文章
- 在Android中调用KSOAP2库访问webservice服务出现的服务端传入参数为null的问题解决
ksoap2-android-3.0.0-jar 第三方库来调用.net 写的Web Service 如果没有参数,那么调用一切顺利,但是如果服务是带参数的,那么服务端接收的参数都是nul. ...
- c++ 网络编程(九)LINUX/windows-IOCP模型 多线程超详细教程及多线程实现服务端
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9661012.html 先讲Linux下(windows下在后面可以直接跳到后面看): 一.线程 ...
- (转)客户端触发Asp.net中服务端控件事件
第一章. Asp.net中服务端控件事件是如何触发的 Asp.net 中在客户端触发服务端事件分为两种情况: 一. WebControls中的Button 和HtmlControls中的Type为su ...
- python并发编程-多线程实现服务端并发-GIL全局解释器锁-验证python多线程是否有用-死锁-递归锁-信号量-Event事件-线程结合队列-03
目录 结合多线程实现服务端并发(不用socketserver模块) 服务端代码 客户端代码 CIL全局解释器锁****** 可能被问到的两个判断 与普通互斥锁的区别 验证python的多线程是否有用需 ...
- WebSocket安卓客户端实现详解(三)–服务端主动通知
WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...
- Android-低功耗蓝牙(BLE)-客户端(主机/中心设备)和服务端(从机/外围设备)
一.Android 低功耗蓝牙(BLE)的API简介 从Android 4.3(API 18)才支持低功耗蓝牙(Bluetooth Low Energy, BLE)的核心功能, BLE蓝牙协议是GAT ...
- (8)Linux(客户端)和Windows(服务端)下socket通信实例
Linux(客户端)和Windows(服务端)下socket通信实例: (1)首先是Windows做客户端,Linux做服务端的程序 Windows Client端 #include <st ...
- 编写Java程序,使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的场景(用户充当客户端,QQ 小冰充当服务端)
查看本章节 查看作业目录 需求说明: 小冰是微软公司研发的人工智能机器人,被腾讯公司加入 QQ 群后,立即受到千万网友的喜爱.现在使用 Socket类模拟用户加入 QQ 群时,QQ 小冰发送欢迎消息的 ...
- webservice 服务端例子+客户端例子+CXF整合spring服务端测试+生成wsdl文件 +cxf客户端代码自动生成
首先到CXF官网及spring官网下载相关jar架包,这个不多说.webservice是干嘛用的也不多说. 入门例子 模拟新增一个用户,并返回新增结果,成功还是失败. 大概的目录如上,很简单. Res ...
随机推荐
- array_unshift
<!DOCTYPE html> <html> <body> <?php $a=array(0=>"red",1=>" ...
- thinkphp查询缓存
S()函数的使用: ThinkPHP把各种缓存方式都抽象成统一的缓存类来调用,而且ThinkPHP把所有的缓存机制统一成一个S方法来进行操作,所以在使用 不同的缓存方式的时候并不需要关注具体的缓存 ...
- CoderForce 141C-Queue (贪心+构造)
题目大意:一个队伍,每个人只记得前面比他高的人的个数x.现在将队伍散开,问能否构造出一支满足条件的队伍,如果能,再给每个人一个满足题意的身高. 题目分析:一个一个排,x越少越先排,如果x比已经排好的人 ...
- CSS——标准盒子模型
在写网页的时候一般都先用Div把网页的框架搭好(用不同的背景颜色来区分不同的Div块),然后填充每一个Div,最后把每个Div的背景颜色去掉 <html> <head> < ...
- Java多线程的同步控制记录
Java多线程的同步控制记录 一.重入锁 重入锁完全可以代替 synchronized 关键字.在JDK 1.5 早期版本,重入锁的性能优于 synchronized.JDK 1.6 开始,对于 sy ...
- 安装完DevExpress14.2.5,如何破解它呢?
DevExpress是一个界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.DevExpress开发的控件有很强的实力,不仅功能丰富,应用简单,而且界面华丽,更可方便订制,方便开发人员开 ...
- sql语句:查询、排序、不区分大小写查询,及联合使用
1.不排序时的查找语句: offset message 为表名,talker 为列名. 此语句的意思是:从message 表中查找 talker 等于wxid_0930479303212的数据,从第 ...
- python3 win10_x64 安装pcapy
稀里糊涂就装上了 大概记录一下都有什么. visual studio build tools 2015 下载地址: http://landinghub.visualstudio.com/visual- ...
- HP-UNIX操作系统root账号被锁定的两种解决方法
方法一:到单用户取消trusted system, 重新激活账户 a.重起机器,自检完成后,会出现这一行"To discontinue, press any key in 10 second ...
- DevExpress v18.1新版亮点——Windows 10 UWP篇
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress Windows 10 UWP v18.1 的新功能,快来下载 ...