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

注意:

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

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

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

}

}

}

NET 平台下的WebService 简单使用的更多相关文章

  1. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  2. Android平台下OpenCV移植与使用---基于C/C++

    在<Android Studio增加NDK代码编译支持--Mac环境>和<Mac平台下Opencv开发环境搭建>两篇文章中,介绍了如何使用NDK环境和Opencv环境搭建与测试 ...

  3. win7平台下React-Native Android:Unable to upload some APKs

    一.问题描述 根据网络上的Win7平台下React-native配置教程配置好开发环境的过程中,在艰难进行到react-native run-android这一步时,发现一直出现错误,截图如下: 错误 ...

  4. .net平台下C#socket通信(中)

    上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...

  5. Linux平台下Lotus Domino服务器部署案例

    Linux平台下Lotus Domino服务器部署案例 几年前我写了篇<RHAS2.1下安装中文LotusDominoR6.5图解>这篇文档被多个大型网站转载,曾帮助过很多公司系统管理员部 ...

  6. .NET平台下,关于数据持久层框架

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  7. .net平台下C#socket通信(转)

    上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...

  8. windows平台下VLC2.0.5编译

    windows平台下VLC2.0.5编译说明 时隔一年多,又要搞流媒体了,不过这次是要做流媒体服务器. 暂时决定使用vlc+ffmpeg+live555,虽然听有些前辈说这个组合的性能较差,只能作为学 ...

  9. .Net平台下的B/S开发框架

    一.前言 本文主要是对.Net平台下的几种B/S开发框架进行比较.只对比前端展现和界面业务逻辑的部分,对于后台的数据层.业务层.持久层等则不作讨论,因为这些部分是完全可以共用的.  主要从如下几个维度 ...

随机推荐

  1. vmware workstation(mac版)查看vmnet8的网关地址

    想为虚拟机配置固定ip,需要设置网关,但是mac版的vmware workstation没有Virtual Network Editor,所以不能直接查看到. 因此执行如下命令进行查找 find / ...

  2. 解决Tomcat下连接Oracle报错"Error while registering Oracle JDBC Diagnosability MBean."

    Tomcat不失为一个好的开发学习容器,但使用Oracle 11g自带的JDBC驱动ojdbc6.jar和JDK6一起运行的时候,特别是和spring框架一起使用会报错:SEVERE: Error w ...

  3. 【Mac系统】之破解Navicat Premium for Mac(中文版)

    前期准备工作: 下载Mac中文版本: 下载地址:链接:https://pan.baidu.com/s/1wShOFK9odsSWBSphgqTdEQ  密码:ipsa 下载完成后进行安装,安装步骤省略 ...

  4. 利用socket.io实现消息实时推送

    最近在写的项目中存在着社交模块,需要实现这样的一个功能:当发生了用户被点赞.评论.关注等操作时,需要由服务器向用户实时地推送一条消息.最终完成的项目地址为:socket-message-push,这里 ...

  5. RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter的解决方案(转)

    转自:RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter的解 ...

  6. HDOJ 4923 Room and Moor

    用一个栈维护b的值,每次把一个数放到栈顶. 看栈首的值是不是大于这个数,假设大于的话将栈顶2个元素合并.b的值就是这两个栈顶元素的平均值. .. Room and Moor Time Limit: 1 ...

  7. cxf 创建动态webService

    D:\developTools\apache-cxf-2.5.2\samples\wsdl_first_dynamic_client CXF 方法 cxf方法 serviceInfo.getBindi ...

  8. 【Atheros】Ath9k速率调整算法源码走读

    上一篇文章介绍了驱动中minstrel_ht速率调整算法,atheros中提供了可选的的两种速率调整算法,分别是ath9k和minstrel,这两个算法分别位于: drivers\net\wirele ...

  9. 写出完美的snprintf

    平时公司的代码安全扫描会给出不安全代码的告警,其中会检查代码中间的strcpy和sprintf函数,而要求使用strncpy和snprintf.今天我们讨论一下怎样写出完美的snprintf. snp ...

  10. python 文字识别 之 pytesseract

    pytesseract资源 链接:https://pan.baidu.com/s/1eTsqhsY 密码:j0yo 安装时前面一直next就可以了,直到这一步,勾选Math和Chinese,支持计算和 ...