网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

浅谈ASP.NET核心对象

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/07
果客户端要求使用GZIP压缩,服务就自动适应,最后把结果也做GZIP压缩处理,是不是更酷?

  1. public void ProcessRequest(HttpContext context)  
  2. {  
  3. context.Response.ContentType = "application/json";  
  4. string input = null;  
  5. JavaScriptSerializer jss = new JavaScriptSerializer();  
  6. bool enableGzip = (context.Request.Headers["Content-Encoding"] == "gzip");  
  7. if( enableGzip )  
  8. context.Request.Filter = new GZipStream(context.Request.Filter, CompressionMode.Decompress);  
  9. using( StreamReader sr = new StreamReadercontext.Request.InputStream) ) {  
  10. input = sr.ReadToEnd();  
  11. }  
  12. QueryOrderCondition query = jss.Deserialize<QueryOrderCondition>(input);  
  13. // 模拟查询过程,这里就直接返回一个列表。  
  14. List<Order>list = new List<Order>();  
  15. forint i = 0;i <10;i++ )  
  16. list.Add(DataFactory.CreateRandomOrder());  
  17. string json = jss.Serialize(list);  
  18. if( enableGzip ) {  
  19. context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);  
  20. context.Response.AppendHeader("Content-Encoding""gzip");  
  21. }  
  22. context.Response.Write(json);  

注意:这次我为了不想写二套代码,使用了Request.Filter属性。前面我就说过这是个功能强大的属性。这个属性实现的效果就是装饰器模式,因此您可以继续对输入输出流进行【装饰】,但是要保证输入和输出的装饰顺序要相反。所以使用多次装饰后,会把事情搞复杂,因此,建议需要多次装饰时,做个封装可能会好些。不过,这个属性的更强大之处或许在这里体现的并不明显,要谈它的强大之处已不是本文的主题,我以后再说。

想想:我这几行代码与此服务完全没有关系,而且照这种做法,每个服务都要写一遍,是不是太麻烦了?

  1. bool enableGzip = (context.Request.Headers["Content-Encoding"] == "gzip");  
  2. if( enableGzip )  
  3. context.Request.Filter = new GZipStream(context.Request.Filter, CompressionMode.Decompress);  
  4.  // .............................................................  
  5. if( enableGzip ) {  
  6. context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);  
  7. context.Response.AppendHeader("Content-Encoding""gzip");  

其实,岂止是这一个地方麻烦。照这种做法,每个服务都要创建一个ahsx文件,读输入,写输出,也是重复劳动。但是,如何改进这些地方,就不是本文的主题了,我将在后面的博客中改进它们。今天的主题是展示这些对象的强大功能。

从以上的示例中,您有没有发现:只要使用这几个对象就可以实现一个服务所必需的基础功能!

在后续博客中,我将引入其它一些ASP.NET的基础对象,并把本次实现的一部分处理抽取出来,实现一个简单的服务框架。有兴趣的同学,可以继

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号