WebService在.NET 平台下的应用

 

WebService

一句话理解:提供可供外部访问的方法,实现跨平台访问

注意:

在客户端是添加“服务引用”,而不是引用

当服务端更新了服务之后,在客户端,一定也要“更新服务”

当要执行异常调用时,要在前台.aspx的头部中加上Async="true"

 

一:服务端定义

右击---->添加---->新建项---->web服务---->

打开新建的WebService1.asmx可以看到

        [WebMethod]     ---要被外部访问,这个就不能省常用[WebMethod(Description="描述信息")]

        public  string  HelloWorld()   ---提供给外部访问的方法

        {

            Return "Hello World";

        }

其中方法HelloWorld()就是提供给外部进行访问,但要实现外部访问,上面的[WebMethod]必须加上,否则就不能被外部访问。

二、客户端调用:添加引用:右击“引用”---->添加服务引用

同步调用:

            using (ServiceReference1.WebService1SoapClient client =new ServiceReference1.WebService1SoapClient())

            {

                Response.Write(client.HelloWorld());

                //List<User> dt = client.GetList();

            }

说明:ServiceReference1为命名空间

异步调用法一:

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

B:在页面前台添加:Async="true"

如:<%@Page Language="C#"AutoEventWireup="true" Async="true"CodeBehind="异步调用一.aspx.cs"Inherits="WebApplication2.异步调用一"%>

C

在页面.aspx.cs

        protected void Page_Load(object sender, EventArgs e)

        {

            using (ServiceReference1.WebService1SoapClient client =new ServiceReference1.WebService1SoapClient())

            {

                //异步加载完数据库执行这个事件,因为是异步的,所以不知道是什么时候加载完数据

                client.HelloWorldCompleted += new EventHandler<ServiceReference1.HelloWorldCompletedEventArgs>(client_HelloWorldCompleted);

                //执行

                client.HelloWorldAsync();

            }

        }

 

        void client_HelloWorldCompleted(object sender, ServiceReference1.HelloWorldCompletedEventArgs e)

        {

            //加载完数据后就接收服务端返回的数据

            string s = e.Result;

            Response.Write(s);

        }

异步调用法二:

BackgroundWorker

    public partial class SOAP : System.Web.UI.Page

    {

        protected string loginInfo = string.Empty;

        protected void Page_Load(object sender, EventArgs e)

        {

            BackgroundWorker bw =new BackgroundWorker();//开启单独线程执行操作

            bw.DoWork += new DoWorkEventHandler(bw_DoWork);//指定要作什么

            //当后台操作完之后

            bw.RunWorkerCompleted += newRunWorkerCompletedEventHandler(bw_RunWorkerCompleted);

            //开始后台操作

            bw.RunWorkerAsync();

        }

 

        void bw_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)

        {

            loginInfo = e.Result.ToString();//得到值,如果是可以是DataSet,List<userinfo>等类型

        }

 

        void bw_DoWork(object sender,DoWorkEventArgs e)

        {

            using (ServiceReference1.WebService1SoapClient client =new ServiceReference1.WebService1SoapClient())

            {

                ServiceReference1.UserInfo info =new ServiceReference1.UserInfo();

                info.Name = "admin";

                info.Pwd = "admin";

                e.Result = client.GetInfo(info);

            }

        }

    }

 

 

验证访问:输入用户名和密码才能访问

方式一:

直接在方法中操作

 

在服务端:

        [WebMethod(Description ="验证使用")]

        public string Check(string name,string pwd)

        {

            if (name == "admin" && pwd == "admin")

            {

                return "验证成功";

            }

            else

            {

                return "验证失败";

            }

        }

在客户端:

A:引用命名空间:using System.ComponentModel;

B:在.aspx.cs中

        protected void Page_Load(object sender, EventArgs e)

        {

            using (ServiceReference1.WebService1SoapClient client =new ServiceReference1.WebService1SoapClient())

            {

                Response.Write(client.Check("admin","adman"));

            }

        }

方式二:

通过SOAP简单对象访问协议

 

 

过程,在方法的前面加上,通过SOAP在调用方法前先调用 SOAP中的方法

 

服务端新建类UserInfo.cs

继承SoapHeader

    public class UserInfo:SoapHeader

    {

        private string name;

        public string Name

        {

            get { return name; }

            set { name = value; }

        }

        private string pwd;

        public string Pwd

        {

            get { return pwd; }

            set { pwd = value; }

        }

        private  bool CheckUser(string name,string pwd)

        {

            if (name == "amdin" && pwd == "admin")

            {

                return true;

            }

            else

            {

                return false;

            }

        }

        public bool CheckUser()

        {

            return CheckUser(name, pwd);

        }

    }

服务端.asmx.cs中

public classWebService1 : System.Web.Services.WebService

    {

        [WebMethod]

        public string HelloWorld()

        {

            return "Hello World";

        }

 

        public UserInfo userinfo;//声明刚创建的类

        //标准一下我们这个方法使用哪个SoapHeader进行校验,客户端网站调用该方法时需要指定自己定义的SoapHeader内容

        //这样,虽然GetInfo()并没有参数,但在在使用时,要先定义userinfoSoapHeader的头,放在GetInfo

        [SoapHeader("userinfo")]//声明刚创建的类的实例

        [WebMethod(Description="登录")]

        public string GetInfo()

        {

           if(userinfo.CheckUser())

           {

             return "登录成功";

           }

           else

           {

               return "登录失败";

           }

        }

    }

 

在客户端更新服务引用

在客户端页面

.aspx.cs中

    public partial class SOAP : System.Web.UI.Page

    {

        protected string loginInfo = string.Empty;

        protected void Page_Load(object sender, EventArgs e)

        {

            using (ServiceReference1.WebService1SoapClient client =new ServiceReference1.WebService1SoapClient())

            {

                ServiceReference1.UserInfo header =new ServiceReference1.UserInfo();

                header.Name = "admin";

                header.Pwd = "admin";

                loginInfo = client.GetInfo(header);

            }

        }

    }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值