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); } } } |
NET 平台下的WebService 简单使用的更多相关文章
- [转]Windows平台下Makefile学习笔记
Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...
- Android平台下OpenCV移植与使用---基于C/C++
在<Android Studio增加NDK代码编译支持--Mac环境>和<Mac平台下Opencv开发环境搭建>两篇文章中,介绍了如何使用NDK环境和Opencv环境搭建与测试 ...
- win7平台下React-Native Android:Unable to upload some APKs
一.问题描述 根据网络上的Win7平台下React-native配置教程配置好开发环境的过程中,在艰难进行到react-native run-android这一步时,发现一直出现错误,截图如下: 错误 ...
- .net平台下C#socket通信(中)
上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...
- Linux平台下Lotus Domino服务器部署案例
Linux平台下Lotus Domino服务器部署案例 几年前我写了篇<RHAS2.1下安装中文LotusDominoR6.5图解>这篇文档被多个大型网站转载,曾帮助过很多公司系统管理员部 ...
- .NET平台下,关于数据持久层框架
在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...
- .net平台下C#socket通信(转)
上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...
- windows平台下VLC2.0.5编译
windows平台下VLC2.0.5编译说明 时隔一年多,又要搞流媒体了,不过这次是要做流媒体服务器. 暂时决定使用vlc+ffmpeg+live555,虽然听有些前辈说这个组合的性能较差,只能作为学 ...
- .Net平台下的B/S开发框架
一.前言 本文主要是对.Net平台下的几种B/S开发框架进行比较.只对比前端展现和界面业务逻辑的部分,对于后台的数据层.业务层.持久层等则不作讨论,因为这些部分是完全可以共用的. 主要从如下几个维度 ...
随机推荐
- Mybatis-There is no getter for property named 'id' in 'class java.lang.String'
<mapper namespace="cn.telchina.standard.mapper.SysOrgnMapper"> <!-- <![CDATA[s ...
- 03 Memcached内存分布机制
一:Memcached 内存分布机制 (1)把内存分配成slab 和不同大小的chunk.在跟据键值的大小在选择对应的chunk.这样可以减少最小的内存浪费,内存浪费是不可避免的.[把内存划分成若干个 ...
- [转]基于fiddler的APP抓包及服务端模拟
在HTTP接口的测试过程中,一般我们会按照如下的步骤进行: 1)测试环境的准备 2)HTTP消息体的构造 3)HTTP消息的发送及断言 如果我们可以拿到项目组的接口文档,并且HTTP后台服务是可以工作 ...
- python接口自动化(四十二)- 项目结构设计之大结局(超详解)
简介 这一篇主要是将前边的所有知识做一个整合,把各种各样的砖块---模块(post请求,get请求,logging,参数关联,接口封装等等)垒起来,搭建一个房子.并且有很多小伙伴对于接口项目测试的框架 ...
- 深入解读DevOps 开发-运维
历史回顾 为了能够更好的理解什么是DevOps,我们很有必要对当时还只有程序员(此前还没有派生出开发者,前台工程师,后台工程师之类)这个称号存在的历史进行一下回顾. 如编程之道中所言: 老一辈的程序员 ...
- [T-SQL] 获取拼音
)) ) as begin ) ) declare @i int declare @words_len int declare @unicode int set @words = ltrim(rtri ...
- Card Collector
In your childhood, do you crazy for collecting the beautiful cards in the snacks? They said that, fo ...
- H - Funny Car Racing
H - Funny Car Racing Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Desc ...
- EasyNVR、EasyDSS二次开发之:RTMP、HLS流在web页面进行无插件播放示例Demo代码
不管是基于EasyNVR还是EasyDSS,都是支持无插件直播,这也是未来视频直播的一个趋势.对于传统的浏览器插件播放谁用谁知道: 以上是软件自带播放展示 背景需求 对于EasyNVR和EasyDSS ...
- gIt 常用 操作
git提交代码流程git status -- 查看当前仓库状态git add -- 添加到临时仓库git commit -m '注释' -- 添加到临时仓库git status -- 查看当前仓库 ...