惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog RSS Feed
宝玉的分享
宝玉的分享
腾讯CDC
博客园_首页
T
Tailwind CSS Blog
月光博客
月光博客
博客园 - 司徒正美
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
V
Visual Studio Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
SecWiki News
SecWiki News
美团技术团队
P
Privacy International News Feed
H
Help Net Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
Know Your Adversary
Know Your Adversary
Y
Y Combinator Blog
D
DataBreaches.Net
Project Zero
Project Zero
T
The Blog of Author Tim Ferriss
Cyberwarzone
Cyberwarzone
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
S
Schneier on Security
G
GRAHAM CLULEY
博客园 - 三生石上(FineUI控件)
Cisco Talos Blog
Cisco Talos Blog
小众软件
小众软件
Forbes - Security
Forbes - Security
D
Docker
T
Tenable Blog
S
Secure Thoughts
雷峰网
雷峰网
S
Security @ Cisco Blogs
T
The Exploit Database - CXSecurity.com
The Cloudflare Blog
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
阮一峰的网络日志
阮一峰的网络日志

博客园 - 拖鞋不脱

【原】Silverlight内存泄漏原因、检测及解决(Memory Leak of Silverlight:Reason、Detection and Solving) 【原】检测是否包含特定字符串的几种方法以及性能比较 【原】StreamInsight 浅入浅出(六)—— Debugger 【原】StreamInsight 浅入浅出(五)—— LINQ 语法 【原】StreamInsight 浅入浅出(四)—— 例子 【原】StreamInsight 浅入浅出(三)—— 适配器 【原】StreamInsight 浅入浅出(二)—— 流与事件 【原】Silverlight 自定义控件模板管理 【原】StreamInsight 浅入浅出(一)—— 基本概念 【原】小软件开发心得(二)——推广、测试 【原】小软件开发心得(一)——需求、开发 【原】豆瓣电台桌面版插件开发——搜索插件 【原】豆瓣电台桌面版——Win7任务栏支持+托盘+快捷键+历史记录 【原】Sql Server性能优化——Slide Window 【原】Sql Server性能优化——Partition(管理分区) 【随】Silverlight请求服务的缓存文件问题 【原】Sql Server性能优化——Partition(创建分区) 【原】Sql Server性能优化——Compression 【译】VS2010中C#的增强
【随】不好用的Ria Services
拖鞋不脱 · 2012-04-09 · via 博客园 - 拖鞋不脱

最近研究Ria Services,之前抱有较高期望,现在比较失望。Ria Services似乎只是为发布Demo而提供的一套帮助快速开发的库,而不是一套完整的企业级的框架。它能很好的解决一些简单的增删改的问题,能应付小数据量下的Change Tracking,还提供了一套看似很丰富完备的Validation机制,那些教程、演示中都竭力展现了它快捷方便的一面,却有意无意的掩盖了其过于死板导致的各种缺点:

提交修改不接受参数

Ria Services里的所有增删改操作,最终都通过SubmitChange方法提交,但这么重要的方法却不支持参数传递。举一个例子:如果业务场景需要切换数据库,而服务端在接收提交请求时由于没有别的参数,并不清楚当前操作的是哪一个数据库,这就会造成麻烦。一种解决办法就是在实体里增加标识所属数据库的属性,但这无疑是麻烦而冗余的,因为这要求每一种实体都要附加这样的属性。

不支持多对多

Entity Framework都支持多对多了,但Ria Services却不支持多对多,依然要靠操作关系实体来操作多对多。

服务端对实体的属性修改,客户端无法知悉

由于客户端的缓存层,保证了Ria Services在客户端的Change Tracking,但这样的缓存层却经常导致服务端和客户端的数据不一致。提交修改后,如果实体有属性在服务端进行了修改,客户端无法从回调中知悉,唯一的解决办法就是每次提交后重新Load Query。

不支持部分提交

在一次修改提交中,如果有部分提交失败产生了Validation Error,那么返回到客户端时,你会发现ChangeSet里面还保有所有的ChangeSet,即使是那些提交成功,在服务端已经处理过的实体,在客户端的状态依然是Modified或Added或者Removed。在这种情况下,如果你再次提交,会重新提交之前已经提交成功的实体。而解决这种问题的方法,是把那些没有ValidationErrors的实体,从Domain Context中Detach掉再Attach上。这种解决方案无疑是比较别扭的。

当改变一个实体在服务端引发另一个实体的改变时,客户端无法知悉也无法报错

由于ChangeSet在服务端是不可改变的状态,一旦在服务端发生了实体间的连带改变,服务端无法反馈给客户端。那么解决方法就是把所有的连带修改都在客户端完成,而这在大数据量的情况下,显然是不适合的(需要先把所有需要修改的数据提取到客户端,再在客户端中完成所有修改的逻辑)。

不支持自定义类型的实体属性和参数

如果说自定义类型的实体属性还可有可无,因为毕竟实体属性往往和数据表的字段绑定,基本类型属性应该够用,那么无论在Query还是Invoke方法中都不支持自定义类型参数,无疑是大大制约了查询的灵活性。

暴露的WCF服务无法直接提供给其他客户端使用

由于Ria Services底层使用的是WCF服务,所以我们有理由期望这些WCF服务可以被其他非Silverlight客户端使用,但事实是,通过Fiddler监控到的Ria Service请求与普通的WCF服务并不相同,由于Ria Service在创建时在客户端和服务端都增加了一层(Domain Service和Domain Context),所以如果要使用不能生成Domain Context层的客户端中连通Ria Services生成的WCF Service时,会需要自己重新构建一套类似Domain Context的框架。

总结

综上所述,Ria Services在目前的状态下,并不适合企业级的复杂应用,在大数据量下不堪重用。而不乐观的是,由于Ria Services和Silverlight紧密绑定,随着Silverlight前途堪忧,Ria Services进一步更新的可能也越来越少,事实上,从Silverlight 4中的Ria Services SP2之后,整个框架处于停滞状态,在Silverlight 5中也没有新的更新,不知道微软是否已经放弃了这一框架