zoukankan      html  css  js  c++  java
  • 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);

    }

    }

    }

  • 相关阅读:
    九度OJ 1010 A+B
    九度OJ 1052 找x
    oracle数据库创建备份与恢复 脚本
    在select标签中添加a标签
    如何在select标签中使用a标签跳转页面
    网站访问不了
    js实现input的赋值
    PHP如何实现百万级数据导出
    互联网产品需求管理杂思2需求收集,互联网营销 狼人:
    做网站用UTF8还是GB2312?,互联网营销 狼人:
  • 原文地址:https://www.cnblogs.com/chenmfly/p/4452464.html
Copyright © 2011-2022 走看看