NET 平台下的WebService
来源:互联网 发布:linux 局域网上网设置 编辑:程序博客网 时间:2024/05/20 23:06
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 += newEventHandler<ServiceReference1.HelloWorldCompletedEventArgs>(client_HelloWorldCompleted);
//执行
client.HelloWorldAsync();
}
}
void client_HelloWorldCompleted(object sender, ServiceReference1.HelloWorldCompletedEventArgs e)
{
//加载完数据后就接收服务端返回的数据
string s = e.Result;
Response.Write(s);
}
异步调用法二:
BackgroundWorker
public partialclass 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 classUserInfo: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 classWebService1 : 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 partialclass 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
- WebService在.NET 平台下的应用
- JAVA 平台下的webservice
- .net跨平台调用Java的WebService
- 一个SoapExcept异常的处理以及.NET平台下WebService应用的一点注意事项
- .net 平台下的webservice利用soapheader自定义信息做验证
- 记录一个.net平台下动态调用webservice的处理类(动态编辑请求soap信息)
- axis平台下webService的创建
- .Net平台下的SqlHelper
- .net 下webservice 的WebMethod的属性
- .NET平台下基于webservice,通过获取硬件cpu序列号和随机字符串序列号实现软件加密的一种方法。
- .net 的 webservice 由其他平台调用存在兼容问题
- Spring下搭建以Xfire实现的Webservice平台
- 在android平台下WebService的操作步骤
- .NET 平台下的OutLook 开发技术
- .NET 平台下的OutLook 开发技术
- .NET 平台下的OutLook 开发技术
- .NET平台下WEB应用程序的部署
- 无边框窗口
- Windows7自带的Media Player不能正常播放
- Java Observable 模式
- 数据结构与程序设计作业4
- asp将数据库数据转换成JSON格式
- NET 平台下的WebService
- PhoneGap2.X及3.X项目工程创建方法(IOS)
- viewflipper控件ontouch事件和onclick事件问题
- 关于chown: Non-super user cannot change owner
- [IETF] Congestion Exposure
- LDA学习心得
- python 日志模块
- WITH+HInt MATERIALIZE 不见得有效
- qt固定窗口大小