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

WebService在.NET 平台下的应用

发布时间:2020-12-17 00:06:38 所属栏目:安全 来源:网络整理
导读:? WebService 一句话理解:提供可供外部访问的方法,实现跨平台访问 注意: 在客户端是添加“服务引用”,而不是引用 当服务端更新了服务之后,在客户端,一定也要“更新服务” 当要执行异常调用时,要在前台 .aspx 的头部中加上 Async ="true" ? 一:服务端

?

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);

??????????? }

??????? }

??? }

(编辑:李大同)

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

    推荐文章
      热点阅读