您的位置:首页 > 编程语言 > ASP

[ASP.NET学习笔记之二十八]ASP.NET中的Web服务

2006-09-02 09:01 429 查看
ASP.NETWeb服务

Web服务概述
1、Web服务的演变
– PC机的出现:第一次计算机革命
– Web的问世:进入了全球网络和信息时代。当网络只是一个提供信息、交流信息、使用信息的平台。没有成为计算平台。
• 主机/终端-客户端/服务器-中间件-分布式组件
• Java技术的出现:跨平台
• XML:不同系统之间的数据交换
–Web服务:提供了一种软件组件生产和流通的技术和标准。“软件就是服务”的真正实现

web服务的三基石
• 简单对象访问协议-SOAP。是一种基于XML的通信协议。包括三个部分:
– SOAP封装结构:定义消息的XML格式,包括整体框架、消息内容、谁处理这些内容等。
– SOAP编程规则:定义如何将程序数据表示为XML。
– SOAP RPC表示:定义如何使用SOAP进行远程过程调用。
此外,SOAP规范还定义了包含SOAP消息的HTTP消息样式。

• Web服务描述语言-WSDL
– 是一个XML文档,用于说明一组SOAP消息以及如何交换这些消息
– 还定义了服务的位置以及使用服务的通信协议
– 可以提供更高层次的消息,如web服务的业务类型和关联关键字等

• 统一描述、发现和集成-UDDI
–Web服务的黄页
– 其核心组件是UDDI商业注册,它使用一个XML文档来描述Web服务。包括三个部分
• 白页:介绍提供服务的公司,包括名称、地址、联系方式
• 黄页:包括按照标准分类进行分类的行业类别
• 绿页:细则介绍、访问服务接口等技术信息

Web服务的创建和使用
• Web服务的创建
– 把类放在带有.asmx扩展名的文件中
– 添加名称空间System.Web.Services
– 把页面的顶部添加WebService指示符:
<%@WebService Language="c#" Codebehind="LoginService.asmx.cs"
Class="LoginService.LoginService" %>
– 向需要用于web服务的方法添加WebMethod属性

Web服务的使用
– 直接创建代理类
– 使用VS.NET创建代理类

代理类
• 代理类:可以引用远程的Web服务,在用户的应用程序中使用其功能,就象返回的
数据是本地生产的一样。
• 步骤
– 使用WSDL.EXE创建代理类
– 使用CSC编译生成的CS文件为DLL文件
方法一:
在VS2003/2005中的项目中,添加Web引用,这样就直接生成代理类了
方法二:
// IBookSale.cs要生成的代理类,http://localhost/IBookSale.asmx是web服务文件
wsdl /out:IBookSale.cs http://localhost/IBookSale.asmx //把生成的代理类编译成dll文件
csc /out:regBookSale.dll /t:library /r:System.Xml.dll /r:System.Web.Service.dll IBookSale.cs

通过Web服务外置数据
.NET Framework能够通过Web服务在Internet上外置数据对象。这样的好处是:
• 允许访问其他操作系统
• 允许通过防火墙访问
• 允许开发者方便地重用代码
• 限制了对数据库的连接
• 允许用户通过编程方式访问Internet上的对象

• DataSet外置:DataSet能够用Web Service方法返回。DataSet能够在一个智能化的结
构中存储复杂的信息和关系,这是WebService的一个非常有用的方法。
• XML外置

管理Web服务的状态
• 在Web服务中的状态管理是可选的,并且默认情况下是禁用的。
• 要启用状态管理,必须
– 实现web服务的类必须从System.Web.Services名称空间的WebService类中继承
– 继承类可以自动访问Application对象
– 只有把WebMethod属性EnableSession设置为true,保存在Session中的数据才是有效的。
【代码分析】
ASP.NET2.0
服务器端:

[WebMethod]
public string ReverseStr(string str)
{
if (str == null)
return null;
int len = str.Length;
char[] arrIn = str.ToCharArray();
char[] arrOut = new char[len];
//reverse
for (int i = 0; i < len; i++)
arrOut[i] = arrIn[len - i - 1];
return new string(arrOut);
}

客户端代码:

//用于异步回调
public void reverseComplete
(object sender,FormService.CustomService.ReverseStrCompletedEventArgs e)
{
if (e.Error == null)
{
this.tbStrResult.Text=e.Result.ToString();
}
else
{
MessageBox.Show(e.Error.Message);
}
}

private void btnReverse_Click(object sender, EventArgs e)
{
string strInit = this.tbStrInit.Text.Trim().ToString();
if (strInit == null)
return;
CustomService.myWebService myWS = new FormService.CustomService.myWebService();
myWS.ReverseStrCompleted += new FormService.CustomService.ReverseStrCompletedEventHandler(reverseComplete);
myWS.ReverseStrAsync(strInit);
MessageBox.Show("异步开始");
}

ASP.NET1.0/1.1的异步回调方法看
http://blog.csdn.net/lne818/archive/2006/09/02/1159168.aspx

异步处理
同步处理
• 同步化操作:由前后紧接的组件或函数调用组成。一个同步化调用会阻塞整个进程直到这一个操作完成。
异步处理
• 异步化操作:不会阻塞启动操作的调用线程。调用程序必须通过轮流检测、软件中的中断信号或只是明确地等待完成信号来发现调用的完成。

异步Web服务
• .NET Framework为支持异步化编程模型提供了必要的服务
• 决定特定的调用是否应该异步化处理的是客户机的代码
• 不需要进行额外的编程
• CLR提供了类型安全
• 代理类提供了BeginInvoke和EndInvoke方法来支持异步处理

Web服务和事务处理
什么是事务处理?
• 事务是一组组合成逻辑工作单元的数据库操作,虽然系统中可能会出错,但事务将
控制和维护每个数据库的一致性和完整性。
• 如果在事务过程中没有遇到错误,事务中的所有修改都将永久成为数据库的一部分。
• 如果遇到错误,则不会对数据库作出任何修改。
Web服务和事务处理
• 支持Web服务的事务利用公共语言运行期中的支持,其是基于Microsoft Transaction Server ( MTS)和COM+Services中相同的分布式事务模型。该模型基于明确的判断一个对象是否参与一个事务,而不是编写特定的代码用来处理委托和回调一个事务。
• 对于一个使用ASP.NET创建的XML Web服务,你可以通过设置其应用到一个XML Web服务方法上的WebMethod属性的TransactionOption属性来声明一个XML Web服务的事务行为。如果该XML Web服务方法执行的时候抛出一个异常,那么该事务自动地结束;相反,如果没有发生异常,该事务自动委托。
• [ WebMethod(TransactionOption=TransactionOption.RequiresNew)]

TransactionOption属性

Disabled(默认)
指示XML Web services 方法不在事务的范围内运行。当处理请求时,将在没有事务的情况下执行XML Web services 方法。
NotSupported
指示XML Web services 方法不在事务的范围内运行。当处理请求时,将在没有事务的情况下执行XML Web services 方法
Supported
指示XML Web services 方法不在事务的范围内运行。当处理请求时,将在没有事务的情况下执行XML Web services 方法
Required
指示XML Web services 方法需要事务。由于Web 服务方法只能作为根对象参与事务,因此将为Web 服务方法创建一个新事务。
RequiresNew
指示XML Web services 方法需要新事务。当处理请求时,将在新事务内创建XML Web services。
Web服务中的缓存
• ASP.NET有两种用于WEB应用的缓冲技术:
– 输出缓冲指:把一次请求所产生的动态输出保存于内存中。
– 数据缓冲指:按照一定的策略把事先不确定的对象保存于内存中。它允许页面保存和索
引HTTP请求所要求的各种各样的对象。
• 这ASP.NET中的缓存技术在Web服务中都可以继续使用。只是使用方法有一些区别。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐