加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

.net WebService(一) 无传入参数WebService

发布时间:2020-12-17 00:00:45 所属栏目:安全 来源:网络整理
导读:这里只讲操作过程,及操作过程中的说明,纯理论的东西不讲,但需注意一点:WebService是为面向服务编程所提供的技术,服务器在一定范围内公开对外“接口”,客户端不论是是asp.net还是java等都可调用这个“接口”以进行数据交互(注意:当服务端代码更改后,

这里只讲操作过程,及操作过程中的说明,纯理论的东西不讲,但需注意一点:WebService是为面向服务编程所提供的技术,服务器在一定范围内公开对外“接口”,客户端不论是是asp.net还是java等都可调用这个“接口”以进行数据交互(注意:当服务端代码更改后,客户端一定要“更新服务引用”)

方式一:同步WebService

方式二:异步调用

方式三:开启新线程执行异步操作

同步WebService

服务端

新建空项目WebServiceDemo


图01
删除原有WebServiceDemo建立WService项目


图02
在Wservice项目中新建WSDemo.asmx文件


图03
到此,服务端操作完毕

客户端

在WebServiceDemo上右击新建Wclient项目,并新建Index.aspx页


图04
按F5让网站运行起来,此时,在电脑“任务栏”中应该有两个ASP.NET Development Server,注意区分哪个是服务端的,哪个是客户端的
停止调试,在Wclient项目中添加“服务引用”,注意不是“引用”


图05、06
在Index.aspx.cs中输入以下代码

        protected void Page_Load(object sender,EventArgs e)
        {
            //释放托管资源,所以加 using
            //ServiceReference1在新得到的Service References 下
            //WSDemoSoapClient是服务端的WSDemo.asmx在客户端的接口,和类一样,要先创建实例
            using (ServiceReference1.WSDemoSoapClient wsc = new WSDemoSoapClient())
            {
                string result = wsc.HelloWorld();//HelloWorld为wsc实例下的方法,返回的是字符串"Hello World"
                Response.Write(result);//得到值后输出到页面
            }
        }
将Wclient和Index.aspx分设启动项和启动页,运行网站,此时就能从客户端得到服务端提供的方法的返回值”Hello World”


图07
此时,客户端操作完毕,服务端、客户端均操作完毕

异步调用

接着上面的操作
在ServiceReference1(Service References下面)上右击---->配置服务引用---->使”异步操作”处于选中状态,并确定


图08、09
在前台Index.aspx头部中加下Async="true",如:

<%@ Page Language="C#" Async="true" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="Wclient.Index" %>
在Index.aspx.cs中输入以下代码

    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender,EventArgs e)
        {
            //释放托管资源,所以加 using
            //ServiceReference1在新得到的Service References 下
            //WSDemoSoapClient是服务端的WSDemo.asmx在客户端的接口,和类一样,要先创建实例
            using (ServiceReference1.WSDemoSoapClient wsc = new WSDemoSoapClient())
            {
                //由于是异步执行,不知道什么时候执行完毕,因此采用事件驱动机制
                wsc.HelloWorldCompleted += new EventHandler<HelloWorldCompletedEventArgs>(wsc_HelloWorldCompleted);
                //当事件驱动机制启动并完成后,就立即执行
                wsc.HelloWorldAsync();
            }
        }
        //事件中执行的方法
        void wsc_HelloWorldCompleted(object sender,HelloWorldCompletedEventArgs e)
        {
            string result = e.Result;
            Response.Write(result);
        }
}
此时,异步操作的客户端操作完毕
在WSDemo.asmx.cs中输入以下代码
    public class WSDemo : System.Web.Services.WebService
    {
        [WebMethod]
        public string HelloWorld()
        {
            System.Threading.Thread.Sleep(3000);//停3000ms(即3m),好让异步看出效果
            return "Hello World";
        }
    }
此时,异步操作的服务端操作完毕,服务端、客户端均操作完毕,运行即可看到过三秒后客户端页面显示出服务端提供方法的返回值”Hello World”

开启新线程执行异步操作

接着上面的操作完成内容,删除Index.aspx.cs中的一部分代码,使之恢复到新建立时模样
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender,EventArgs e)
        {

        }
    }
之后添加using System.ComponentModel;命名空间并输入以下代码
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender,EventArgs e)
        {
            BackgroundWorker backgroundWorker = new BackgroundWorker();
            //指名开启一个线程后要执行的方法
            backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
            //当后台操作完成之后要执行的方法
            backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
            //正式执行
            backgroundWorker.RunWorkerAsync();
        }


        //当后台操作完成之后要执行的方法
        void backgroundWorker_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
        {
            Response.Write(e.Result);//得到服务端返回的值后,输出到客户端页面,注意此时还没有输出
        }


        //开启一个线程后要执行的方法
        void backgroundWorker_DoWork(object sender,DoWorkEventArgs e)
        {
            //在开启线程后执行的方法中建立服务端和客户端的链接
            using (ServiceReference1.WSDemoSoapClient wsd = new WSDemoSoapClient())
            {
                e.Result = wsd.HelloWorld();//调用服务端的方法,并将返回值赋给 e.Result
            }
        }
    }
此时,开启线程并异步操作的客户端操作完毕,服务端不变,服务端、客户端均操作完毕,运行即可看到过三秒后客户端页面显示出服务端提供方法的返回值”Hello World”

在这一章中,服务端方式返回的是字符串,在实际的项目中,可更据需要返回任意类型,数据集等

再下一章中,将介绍客户端向服务端传入参数的数据交互方式

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读