老赵点滴


  先做人,再做技术人员,最后做程序员。
  我的理想:“让外国人看中国人写的技术书籍和文章”。Try as I might
posts - 290, comments - 10853, trackbacks - 158, articles - 6
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

深入Atlas系列

     摘要: 有时候在Web Service中会需要使用到比较复杂的类型,它们的特征往往都是含用循环引用,这样的对象如果交给ASP.NET AJAX中默认的序列化方式来处理则会抛出异常,大家经常遇到的“DataTable”问题正是由此引起的。关于这一点,ASP.NET AJAX自然提供了解决方法,在这里“官方”的解决方案就是JavaScriptConverter,它可以让开发人员自定义特定类型的序列化能力。  阅读全文

posted @ 2006-11-13 16:48 Jeffrey Zhao 阅读(2240) | 评论 (30)  编辑 |

     摘要: 在使用ASP.NET AJAX时,大家对于返回服务器端的复杂类型的情况经常会遇到问题。Dflying兄写了一篇文章来说明在如何在客户端得到Sys.Preview.Data.DataTable对象的文章,但是这种方法需要在客户端进行Sys.Preview.Data.DataTable的构造,那么我们该如何直接获得这个对象呢?再进一步,我们该如何直接获得客户端某种特定格式的对象呢?本篇文章给出了一个解决方案,事实上,这个扩展的能力还不止如此……  阅读全文

posted @ 2006-11-11 23:04 Jeffrey Zhao 阅读(2969) | 评论 (23)  编辑 |

     摘要: 如果要在客户端指定服务器端Web Service方法所接收的参数类型,就必须在客户端通过“__type”来指定,但是这就暴露了服务器端的具体类型了,这可不太好。现在我们就来看一下应该如何解决这个问题。  阅读全文

posted @ 2006-11-11 01:37 Jeffrey Zhao 阅读(1614) | 评论 (8)  编辑 |

     摘要: 在ASP.NET AJAX中,客户端的序列化与反序列能力由Sys.Serialization.JavaScriptSerializer类的serialize和deserialize两个静态方法提供。在服务器端,所有的序列化与反序列化能力,包括类型之间的转换,对于开发人员来说都是由JavaScriptSerializer类的几个方法实现的。从前一片文章里我们已经知道了两个辅助的类:JavaScriptTypeResolver和JavaScriptConverter,他们的作用分别是“映射类与类标识”,以及“提供特定类的序列化与反序列化能力”。在某些情况下,我们还是需要使用JavaScriptSerializer类的方法来操作一个类型,例如使用JavaScriptConverter来自定义特定类的序列化或者反序列化,就需要使用JavaScriptSerializer类的方法,因此我们这次就详细看一下这个类的能力。  阅读全文

posted @ 2006-11-10 00:39 Jeffrey Zhao 阅读(2743) | 评论 (10)  编辑 |

     摘要: 似乎已经有不少朋友在作了ASP.NET AJAX Beta 1到Beta 2的转移之后遇到了这样的问题:如果使用了ScriptManager引入了自定义的JavaScript脚本文件后会发生JavaScript错误。本文简单讨论了引发这个问题的原因,解决方案以及注意事项。  阅读全文

posted @ 2006-11-08 02:36 Jeffrey Zhao 阅读(3408) | 评论 (12)  编辑 |

     摘要: 在ASP.NET AJAX中是使用了JSON作为客户端与服务器端传递对象信息的方式。因此,在ASP.NET AJAX的客户端与服务器端均提供了序列化与反序列化的能力。了解这些内容的使用方法,可以说是使用与扩展ASP.NET AJAX所必须的能力。在这两篇文章里,我们就来看一下ASP.NET AJAX中的序列化与反序列化的能力。  阅读全文

posted @ 2006-11-06 23:41 Jeffrey Zhao 阅读(2492) | 评论 (20)  编辑 |

     摘要:   如果不能在客户端进行自定义的话,Profile Service的自定义能力还是远远不够的。虽然Profile Service没有提供一种“官方”的客户端自定义支持,不过事实上“自定义”能力“天然”地存在与客户端里。为什么?因为整个客户端是由JavaScript实现的,这种灵活的语言使得我们能够在一定程度上自由地修改客户端的行为。  阅读全文

posted @ 2006-11-05 21:32 Jeffrey Zhao 阅读(2067) | 评论 (16)  编辑 |

     摘要: 在上一篇文章中,我们讨论了使用ASP.NET AJAX默认的Profile Service。一般来说,它已经能够迎合大多数应用的需要了。不过除此之外,ASP.NET AJAX还提供了让我们自定义Profile Service的机制。  阅读全文

posted @ 2006-11-04 04:09 Jeffrey Zhao 阅读(1585) | 评论 (3)  编辑 |

     摘要: ASP.NET AJAX提供了Profile Service,允许开发人员异步地从服务器端访问Profile信息。从RTM开始,客户端的Profile Service还提供了对于Profile Group的支持,因此可以说已经相当成熟了。那么对于Profile Service的细节,是否大家都了解了呢?从ScriptManager的使用上来看,ProfileService是能够扩展的,那么应该如何扩展呢?细心的朋友们应该也发现了,在web.config中也增加了对于Profile Service的配置,那么这些配置应该如何使用呢?  阅读全文

posted @ 2006-11-02 23:43 Jeffrey Zhao 阅读(1893) | 评论 (24)  编辑 |

     摘要: 使用Web Service Proxy应该是使用ASP.NET AJAX访问Web Service最常用的方法了。服务器端会根据ScriptManager中添加的Service引用而对于Web Service类进行分析,并生成相应的客户端脚本。这样开发人员就能在客户端方便而且直观地访问Web Services方法了。这是ASP.NET中很重要的功能。从官方文档上看来,CTP和RTM似乎在脚本使用这方面没有很大的改变,只要在服务器端将一些CustomAttribute改变一下就可以了。的确没错,在使用方式上只有这点细微改变,但是事实上,从生成脚本本身来说,CTP和RTM的做法大相径庭。  阅读全文

posted @ 2006-11-01 17:39 Jeffrey Zhao 阅读(1585) | 评论 (5)  编辑 |

     摘要: 在RTM版本中,客户端访问Web Services的基础类库发生了一些改变,并直接影响到了它们的使用方式。对于自己写ASP.NET AJAX组件(例如ExtenderControl)的朋友们来说,了解这部分改变是非常重要的。  阅读全文

posted @ 2006-10-30 16:46 Jeffrey Zhao 阅读(2214) | 评论 (12)  编辑 |

     摘要: WebRequestExecutor是ASP.NET AJAX网络访问基础结构的唯一修改点。理论上,我们可以使用自定义的WebRequestExecutor来取代默认的XMLHttpExecutor。我们要做的,其实只是开发一个继承于Sys.Net.WebRequestExecutor类。不过事实上,在实际使用中,Sys.Net.XMLHttpExecutor已经足够用了,真的要自定义,也只需继承这个类即可。就像接下去的例子一样。  阅读全文

posted @ 2006-10-30 03:05 Jeffrey Zhao 阅读(2213) | 评论 (8)  编辑 |

     摘要: 正如前一篇文章所说的那样,WebRequestExecutor是客户端网络访问的基础结构的唯一扩展点,而XMLHttpExecutor是其默认实现。在ASP.NET AJAX中,开发人员能够将自定义的WebRequestExecutor子类设为默认的Executor,也可以为某一个WebRequest指定一个特定的Executor。虽然一般来说XMLHttpExecutor已经足够大多数应用,但是既然ASP.NET AJAX提供了这个功能,我们也根据默认的类进行一下这方面的学习。  阅读全文

posted @ 2006-10-29 05:10 Jeffrey Zhao 阅读(1991) | 评论 (9)  编辑 |

     摘要: ASP.NET AJAX的许多功能会要求异步地访问服务器端,例如访问Web Services,Authentication/Profile Services(事实上和访问Web Services是相同的机制)和Partial Rendering。在ASP.NET AJAX中,所有的这些访问都是通过一个网络访问的基础结构来完成的,无一例外。  阅读全文

posted @ 2006-10-27 00:50 Jeffrey Zhao 阅读(2794) | 评论 (17)  编辑 |

     摘要: 在RTM版本中,我们可以发现ASP.NET AJAX的客户端脚本引入了许多规则:有方法注释规则,有参数验证规则,而且对于Debug和Release模式下的脚本代码,甚至添加在程序集里的方式,也有相当严禁的规则。如果我们想要编写真正规范和严谨的代码或组件,了解这些规则是非常必要的。有了这些规则,用户在使用Debug模式进行开发和调试时可以得到更好的提示(比如Call Stack),下一版本的Visual Studio“Orcas”也会根据这些规则提供良好的IntelliSense功能。另外,了解这些规则也有利于帮助开发人员阅读和理解客户端代码,这不也是我写“深入Atlas系列”的目的吗?在这片文章里,我将使用ASP.NET AJAX的脚本代码为范例,对开发规则进行一番描述。在某些时候也会对客户端和服务器端的部分代码进行简单的分析。
  阅读全文

posted @ 2006-10-25 18:29 Jeffrey Zhao 阅读(3059) | 评论 (21)  编辑 |

     摘要:   在上一个示例中我们了解到如何通过HTTP GET来访问Web Services方法。很显然,使用HTTP GET依靠Query String传递参数,于是在客户端拿到的总是基本数据类型String。幸好,在Atlas中,对于基础类型的参数,如果遇到了一个字符串,则会设法将其转换成一个合适的类型。因此,在使用HTTP GET方法传递参数时,在Web Services方法里能够使用个中各样的基础类型。但是,这显然远远不够,Atlas也不会将这个问题置之不理。在Atlas中,自提供了一套自定义机制可以将基础类型转换为复杂类型。
本文通过示例演示了如何通过自定义TypeConverter来提供简单类型到复杂类型的转换。  阅读全文

posted @ 2006-10-19 11:40 Jeffrey Zhao 阅读(1390) | 评论 (6)  编辑 |

     摘要: 在之前的例子里,由于Atlas客户端在调用Web Services方法时总是使用了Sys.Net.ServiceMethod类,因此始终使用了HTTP POST方法与服务器端进行交互。POST方法有其好处,不过GET方法也自有其价值。本文通过示例解释了如何使一个Web Services方法能够通过HTTP GET调用,并且如何调用它。  阅读全文

posted @ 2006-10-18 17:54 Jeffrey Zhao 阅读(1303) | 评论 (4)  编辑 |

     摘要: 在Web Services方法中,我们往往使用的都是一个具体类型的参数。这个参数一般就是一个数据对象,所有的功能基本上只是为了存放数据。虽然这对于应用来说一般已经足够,我们大量使用了这样的Web Services,不也过得好好的吗?但是,在这一点上实在太不够面向对象了。本文提供了示例演示如何在客户端选择传递给Web Service参数的具体类型,以达到一定程度上多态的效果。  阅读全文

posted @ 2006-10-18 11:06 Jeffrey Zhao 阅读(1275) | 评论 (10)  编辑 |

     摘要: 在以前的文章中我曾经举了一个简单例子,如果一个对象存在着循环引用,那么无论在客户端还是服务器端都会出现异常状况。这篇文章将通过示例来解释如何使用自定义JavaScriptConverter来解决这个问题。  阅读全文

posted @ 2006-10-17 13:47 Jeffrey Zhao 阅读(1415) | 评论 (7)  编辑 |

     摘要: 将Atlas访问Web Services方法对于复杂类型的支持讨论完毕,在之后的文章中将通过示例着重讲解一些有用的功能和在文章中提到的扩展。
  本文分析了Web Services方法寻找自身所支持的复杂类型的方式,以及将对象序列化输出的实现和注意点。  阅读全文

posted @ 2006-10-17 00:56 Jeffrey Zhao 阅读(1249) | 评论 (5)  编辑 |

Full 深入Atlas系列 Archive