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

注意:

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

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

当要执行异常调用时,要在前台.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);

}

}

}

最新文章

  1. iOS代码签名理解
  2. mozilla firefox 安装flash player
  3. Bat文件, Services
  4. C++成员变量的初始化顺序问题
  5. 如何配置全世界最小的 MySQL 服务器
  6. Timer类和TimerTask类
  7. Solr入门之(6)配置文件solrconfig.xml
  8. Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示
  9. PHP设计模式之:策略模式
  10. sql练习总结(一)
  11. Coco2dx-3.0中怎样调用LUA
  12. Git使用六:版本对比
  13. SQL反模式学习笔记7 多态关联
  14. golang初识2
  15. 搭建activemq服务
  16. 452. Minimum Number of Arrows to Burst Balloons
  17. Java面试总结(集合、spring)
  18. SPOJ.Visible Lattice Points(莫比乌斯反演)
  19. python各种模块,迭代器,生成器
  20. MySQL在x64系统上1067问题解决

热门文章

  1. Win7 设置、访问共享文件夹
  2. NHibernate 数据查询之Linto to NHibernate (第八篇)
  3. Cannot lock storage /tmp/hadoop-root/dfs/name. The directory is already locked.
  4. PHP性能:序——谈ab(Apache Bench)压力测试工具
  5. JavaWeb学习总结第五篇--认识Cookie机制
  6. 计算CPU利用率
  7. PHP-Manual的学习----【入门指引】
  8. android shape的用法总结
  9. CSS改变字体下划线颜色
  10. 【python】-- 类的实例化过程、特征、共有属性和私有属性