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 += new RunWorkerCompletedEventHandler(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 class WebService1 : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } public UserInfo userinfo;//声明刚创建的类 //标准一下我们这个方法使用哪个SoapHeader进行校验,客户端网站调用该方法时需要指定自己定义的SoapHeader内容 //这样,虽然GetInfo()并没有参数,但在在使用时,要先定义userinfo的SoapHeader的头,放在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); } } } |
最新文章
- iOS代码签名理解
- mozilla firefox 安装flash player
- Bat文件, Services
- C++成员变量的初始化顺序问题
- 如何配置全世界最小的 MySQL 服务器
- Timer类和TimerTask类
- Solr入门之(6)配置文件solrconfig.xml
- Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示
- PHP设计模式之:策略模式
- sql练习总结(一)
- Coco2dx-3.0中怎样调用LUA
- Git使用六:版本对比
- SQL反模式学习笔记7 多态关联
- golang初识2
- 搭建activemq服务
- 452. Minimum Number of Arrows to Burst Balloons
- Java面试总结(集合、spring)
- SPOJ.Visible Lattice Points(莫比乌斯反演)
- python各种模块,迭代器,生成器
- MySQL在x64系统上1067问题解决
热门文章
- Win7 设置、访问共享文件夹
- NHibernate 数据查询之Linto to NHibernate (第八篇)
- Cannot lock storage /tmp/hadoop-root/dfs/name. The directory is already locked.
- PHP性能:序——谈ab(Apache Bench)压力测试工具
- JavaWeb学习总结第五篇--认识Cookie机制
- 计算CPU利用率
- PHP-Manual的学习----【入门指引】
- android shape的用法总结
- CSS改变字体下划线颜色
- 【python】-- 类的实例化过程、特征、共有属性和私有属性