zoukankan      html  css  js  c++  java
  • WebService的web客户端同步、异步、多线程向服务端传入参数的数据交互方式

    接着上一章的内容,在上一章中我们知道了如何.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

  • 相关阅读:
    .net发送邮件
    关于innerhtml的解释
    ASP.NET如何进行性能优化的问题,看一老兄的建议!【转】
    深入理解xLua热更新原理
    VS2010中的ListView的BUG
    asp,jsp,php等web开发必懂技术什么时候使用静态页,什么时候必须使用动态页
    IIS7虚拟目录出现HTTP错误500.19(由于权限不足而无法读取配置文件)的解决方案
    IIS错误信息另一个程序正在使用此文件,进程无法访问!
    CSS3图片展示效果
    一个简单的返回顶部效果
  • 原文地址:https://www.cnblogs.com/mq0036/p/9323972.html
Copyright © 2011-2022 走看看