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

来源:互联网 发布:js 新窗口打开链接 编辑:程序博客网 时间:2024/06/04 00:45

这里只讲操作过程,及操作过程中的说明,纯理论的东西不讲,但需注意一点: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”

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

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

原创粉丝点击