- 热门文章:
- · 中国地区三级联动下拉菜单代码和示例(1)
- · 中国地区三级联动下拉菜单代码和示例(2)
- · 一种“您无权查看该网页”的原因和解决方法
- · ASP.NET 揭秘 ASP.NET页面的结构
- · 使用@Page指令的Src属性 简化对老版本的asp.net程序的维护
- · 一个通用的保护ASP系统的方法
- · ASP.NET 2.0中DataTable小兵变大将
- · asp.net开发web项目-vss集成环境配置
- · ASP.NET中为DataGrid添加合计字段
- · 部署ASP.NET(包含.net framework 和MDAC)
- · 当DataSet中包含主/子表时,Update更新步骤
- · ASP的含义、功能和选择
上一篇:ASP.NET2.0中数据源控件之异步数据访问(1) >>
ASP.NET2.0中数据源控件之异步数据访问(2)
现在,新的 AsyncWeatherDataSource 将从 AsyncDataSourceControl 中派生,而 AsyncWeatherDataSourceView 将从 AsyncDataSourceView 中派生。
public class AsyncWeatherDataSource : AsyncDataSourceControl {
//与 WeatherDataSource 相同
}
private sealed class AsyncWeatherDataSourceView : AsyncDataSourceView {
private AsyncWeatherDataSource _owner;
private WeatherService _weatherService;
public AsyncWeatherDataSourceView(AsyncWeatherDataSource owner,
string viewName)
: base(owner, viewName) {
_owner = owner;
}
protected override IAsyncResult BeginExecuteSelect(DataSourceSelectArguments arguments,
AsyncCallback asyncCallback,
object asyncState) {
arguments.RaiseUnsupportedCapabilitiesError(this);
string zipCode = _owner.GetSelectedZipCode();
if (zipCode.Length == 0) {
return new SynchronousAsyncSelectResult(/* selectResult */
null,
asyncCallback, asyncState);
}
_weatherService = new WeatherService(zipCode);
return _weatherService.BeginGetWeather(asyncCallback, asyncState);
}
protected override IEnumerable EndExecuteSelect(IAsyncResult asyncResult) {
SynchronousAsyncSelectResult syncResult =
asyncResult as SynchronousAsyncSelectResult;
if (syncResult != null) {
return syncResult.SelectResult;
}
else {
Weather weatherObject =
_weatherService.EndGetWeather(asyncResult);
_weatherService = null;
if (weatherObject != null) {
return new Weather[] { weatherObject };
}
}
return null;
}
}
要注意的关键问题是,在使用该框架时,只需要实现 BeginExecuteSelect 和 EndExecuteSelect。在它们的实现过程中,通常要调用由该框架中的各种对象(例如 WebRequest 或 IO 流)所揭示的 BeginXXX 和 EndXXX 方法(在 Visual Studio 2005 中,还需要调用 SqlDataCommand),并返回 IAsyncResult。在此示例中,有一个封装了基础 WebRequest 对象的 WeatherService 帮助程序类。
对于那些实际缺少异步模式的框架,您在此会看到有效的异步模式;以及您要实现的 BeginExecuteSelect 和 EndExecuteSelect,和您要调用以返回 IAsyncResult 实例的 Begin 和 End 方法。
最有趣的可能是 SynchronousAsyncSelectResult 类(在某种程度上而言是一种矛盾)。此类是框架附带的。它基本上是一个 IAsyncResult 实现,可使数据立即可用,并从其 IAsyncResult.CompletedSynchronously 属性报告 true。到目前为止,这仅适用于未选择邮政编码的情况,并且需要返回 null(启动异步任务而只返回 null 是没有意义的),但正如您会在下文中看到的,这在其他方案中也是有用的。
页面基础结构隐藏了在 Microsoft ASP.net 上下文中执行异步工作的大部分详细信息。希望在此提供的框架使您执行最少的操作就能编写使用此基础结构的数据源。不过,就其本质而言,实现异步行为是复杂的。有时候,第一次阅读本文时会有一些疑问,而第二次阅读时可能就明白了。您可以使用下面“我的评论”表单来发送问题或进行讨论。
下一篇:中国地区三级联动下拉菜单代码和示例(1) >>
相关文章:
- · ASP中巧用Response属性 -- contenttype
- · ASP进阶学习必经之认识数学函数11种
- · 初学ASP:入门经验谈
- · ASP两种调试程序的方法
- · 学以致用 驳“ASP低能论”
- · 动态网页初学:ASP个人上手指南
- · ASP内置对象Request和Response详解
- · 一些左右你网页水平的教程
- · ASP站长助手源代码
- · ASP错误大全
- · 关于学习ASP和编程的28个观点
- · 人文的ASP开发基础入门之简介
- · ASP小偷(远程数据获取)程序的入门教程
- · VBScript语法速查及实例说明
- · 带多选项的域名查询
- · Open FSO
- · ASP学习前准备
- · ASP教程:Are you ready?
- · Application对象
- · ASP教程之ASP基础简介
- · Cookie集合
- · ASP的开发工具
- · 数据库连接(无错)
- · session在验证管理登陆时的使用方法
- · Request和Response对象
- · asp当中判断函数一览
- · ASP脚本循环语句
- · C/S、B/S软件技术上的比较
- · ASP VBScript 函数速查表
- · 初学asp的朋友 asp20条
- · Cookie和会话状态
- · 用ASP实现远程批量文件改名
- · 初学.net遇到的问题:数据库访问连接问题
- · ASP在服务器自动解压RAR文件
- · ASP生成静态htm页面基本代码!
- · 在ASP文件中调用DLL
- · 如何使用ASP建立虚拟的FTP服务器(上)
- · 常用ASCII 码对照表
