.Net4中Ajax数据策略:全新Web开发模式

日期: 2010-05-25 作者:黄永兵译 来源:TechTarget中国 英文

  我在以前的一篇专栏文章“集成jQuery,Web Service,Ajax和ASP.NET”中曾经介绍过,通过Ajax技术,可以在ASPX文件中实现无服务端代码,相反,只需要利用JavaScript,ASMX或WCF服务就可实现数据提取和更新,这是一种全新的Web应用程序开发模式,浏览器与一系列低带宽需求、专用Web服务实现异步交互取回网页,只有当用户准备跳转到另一个页面时,浏览器才会做一次传统的回发,这种反应快的应用程序对服务器和网络的要求更低。

  本文将使用最新的Ajax库:dataView,dataContext和它们支持的数据绑定。在服务器端,我将使用.Net 4版本的WCF和实体框架(EF),不过我们应记住的是Ajax库是不依赖于.Net 4的,因此你可以在现有.Net 3.5应用程序上使用它,此外,你还可以使用ASMX Web Service。

  微软的客户端策略一直在不断变化,现在对jQuery非常重视,但因对Ajax库的投入很少,尤其是在数据绑定、脚本装载器和模板方面,它总是停滞不前,如果你现在想在.Net中使用Ajax,或是想研究一下这些技术,可以多看看我们的专栏文章。

  JSON问题

  为了在我的WCF服务中生成最少的代码行,我尝试从WCF服务中返回实体框架对象,虽然诱人,但这个方法在当前的工具中不一定支持,EF实体可能不会以dataView或dataContext对象可以使用的方式返回客户端。

  真正麻烦的问题是dataView和dataContext对象期望获得JSON序列化对象,但EF实体不能序列化到JSON对象。具体点说就是,如果你查看EF模型的代码文件,你会发现每个具有IsReference属性的实体类上的DataContract属性都被设为True,这个设置优先于JSON序列化。

  围绕这个问题有两个解决办法,首先就是不返回EF实体,正如我在另一个专栏“从业务对象转换到用户界面对象”中介绍的那样,很可能你的实体对象与你的UI并不能完美匹配,因此在你的服务中,使用EF对象提取数据,要创建一组数据传输对象(Data Transfer Objects,DTO)来发送到客户端。在Visual Studio 2010中,向你的网站添加一个WCF服务时,如果你选择“启用Ajax的WCF服务”,Visual Studio将会为你生成所有的WCF配置条目。

  只要你不在DTO的DataContract属性上犯错,一切都会顺利,如果你没有准备好WCF,你可能要使用一个ASMX Web Service。

  WCF数据服务

  另一个解决办法是使用WCF数据服务,WCF数据服务内置串行器,它可以让EF实体和JSON对象相互转换(这是微软OData策略的一部分),唯一的障碍是WCF数据服务是基于REST的,不是基于SOAP的,因此获得实体的语法不是以调用方法为基础的,.Net 4的WCF数据服务更简单了。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • JSON如何开发API?

    随着开发者遭遇像企业之间业务对业务连接这类的应用对应用问题,他们的第一反应往往是,“这里为什么我们不能用一个API就行了呢?”

  • API设计如龙生九子 各不相同

    IT咨询管理公司CA Technologies对API产业做了个问卷调查,问卷内容涉及API设计风格以及管理部署的新动向。调查结果表明,JSON与XML可谓两分天下。

  • 如何结合REST和JSON构建API

    构建web可访问应用编程接口很简单,但使之良好工作,而且不间断却不简单,那么难点在哪里?

  • 促使JavaScript更快:从响应设计到最小化JSON

    JavaScript和JSP是企业在使用Java进行web开发时的主力,这两者会完成所有枯燥的小任务,并保持其它事情良好运行。