<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_圣殿骑士</title><subtitle type="text"> ——致力于微软架构、管理、培训和企业解决方案    </subtitle><id>http://feed.cnblogs.com/blog/u/51381/rss</id><updated>2012-03-18T14:50:55Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/51381/rss"/><entry><id>http://www.cnblogs.com/KnightsWarrior/archive/2011/01/31/1948513.html</id><title type="text">(收藏)2010年度十大杰出IT博客</title><summary type="text">2010年度十大杰出IT博客之 王春海 2010十大杰出IT博客：王春海 博主简介 王春海，河北经贸大学信息技术学院，实验师，MCSE、2009～2011年度MVP（微软最有价值专家）、计算机图书作家。 精通VMware、Microsoft系列虚拟机、虚拟化技术，精通Windows操作系统、Microsoft的Exchange、ISA/TMG、OCS/Lync、MOSS/SharePoint等服务器产品。 博客介绍 学习研究领域： 1、Microsoft系列：Windows Server 2003、Windows Server 2008/R2、ISA Server与TMG2010、OCS20</summary><published>2011-01-31T15:52:00Z</published><updated>2011-01-31T15:52:00Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><link rel="alternate" href="http://www.cnblogs.com/KnightsWarrior/archive/2011/01/31/1948513.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/archive/2011/01/31/1948513.html"/><content type="html">&lt;p&gt;&lt;img height="447" width="909" src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/201101242347172874.jpg" /&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://wangchunhai.blog.51cto.com/"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 13pt; text-decoration: underline;"&gt;&lt;strong&gt;2010年度十大杰出IT博客之 王春海&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 13pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20110121/1016320.jpg"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/201101242347181370.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2010十大杰出IT博客：&lt;a href="http://2010blog.51cto.com/225186"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;王春海&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博主简介&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;王春海，河北经贸大学信息技术学院，实验师，MCSE、2009～2011年度MVP（微软最有价值专家）、计算机图书作家。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;精通VMware、Microsoft系列虚拟机、虚拟化技术，精通Windows操作系统、Microsoft的Exchange、ISA/TMG、OCS/Lync、MOSS/SharePoint等服务器产品。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博客介绍&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;学习研究领域： &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;1、Microsoft系列：Windows Server 2003、Windows Server 2008/R2、ISA Server与TMG2010、OCS2007与Lync2010、Exchange、MOSS2007与SharePoint 2010及其以后的产品。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2、虚拟化应用：VMware Workstation、VMware Server、VMware ESX Server、Hyper-V Server 2008及其以后的产品。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;我的博客，主要介绍上述产品的学习、实验，以及这些产品在企业网络中的应用与改造方案的介绍，以及维护中碰到的问题及解决的思路、方法与步骤。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;获奖感言&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;感谢我的父母，生我养我，在我成长过程中的无私奉献；感谢我的老师、学校，教我知识、让我成人；感谢我的家人，为了提供了安心的环境；感谢我的单位，为我提供了学习与工作的场所；更要感谢我们的国家，给我们提供了稳定的环境。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;感谢51CTO，给我们提供了舞台，让我们可以互相交流、学习，展现自我； &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;感谢评委团的各位专家，你们是我学习的榜样； &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;感谢每位读者、网友，感谢我的同事、同学、朋友，是你们的支持与厚爱，才能让我进入前50并最后当选。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;入选2010年度中国十大杰出IT博客，是一份荣誉，更是一份激励，这是我进步的起点，这将是我今后工作的鞭策和动力。我会更好的工作、学习，发文，回答问题，回报大家。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;最后，对于参加活动没有进入前50或最终没有进入前10的朋友们说：进入了，不代表最好，没有进入，也并不差。关键是，对于活动，只要参加了，就是胜利！ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;评委点评&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236297.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;张振伦&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：王春海的博客十分专业，对网管员是很好的指导。无论从博文数量、质量还是对大家的参考性方面，都是值得推荐的，特别是希望系统学习网络管理的IT人，该博客是肯定值得收藏并查阅的。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236303.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;张曦&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：他潜心钻研IT技术，教书育人、著书立说，经年累积使得他在虚拟机和微软服务器产品上的造诣颇高，并且系统的展示在博客中。很多虚拟化环境部署知识，与其在百度、google上漫无目的的搜索，不如直接到王春海的博客上点击翻页按钮。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://kevinfan.blog.51cto.com/"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 13pt; text-decoration: underline;"&gt;&lt;strong&gt;2010年度十大杰出IT博客之 冷秋寒(范晓超)&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 13pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20110121/1103550.jpg"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/201101242347191992.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2010年度十大杰出IT博客：&lt;a href="http://2010blog.51cto.com/1037293"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;冷秋寒&lt;/span&gt;&lt;/a&gt;(范晓超) &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博主简介&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;范晓超，加拿大知名企业资深.Net开发工程师，从事企业级应用架构设计和核心代码开发。十年软件开发经验，微软SilverLight方 向全球最有价值专家（MVP）、51CTO博客之星、微软社区精英、CSDN Silverlight版主、博客园推荐博客。曾在国内从事移动通信应用开发，获高级程序员认证，国外微软MCPD/MCTS认证。擅长开发技术 Silverlight，WPF，WCF，RIA Services。创建银光中国网（SilverlightChina.Net），希望通过该网站，能够让更多开发人员了解和学习Silverlight 和WPF技术，并加入到Silverlight和WPF开发队伍。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博客介绍&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;我的博客专注于Silverlight，WPF和Windows Phone应用开发技术，重在分享在日常工作中积累的经验。由于工作的需要，主要面向企业应用开发方向，所以在我的博客中经常会围绕企业应用开发实例进行 讨论。如果读者从事Silverlight，WPF，Windows Phone或者RIA应用开发，欢迎来我的博客交流学习。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;获奖感言&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;很开心进入2010年度十大杰出IT博客，感谢每一位支持和帮助秋寒的朋友。写博历程，可以简单的总结成一句话，"从阅读到写作，体验分享 的乐趣"。从事软件开发行业近十年，技术论坛交流学习和阅读技术博文已经成为一种习惯。正是这种习惯，让我学会归纳和总结每天学习和工作的知识碎片，并分 享到博客中，在分享中找到志同道合的朋友，在讨论中获得进步。感谢51CTO提供的技术博客平台，将志同道合的朋友们汇集在一起，同时也感谢评委会的每一 位评委给予的支持和厚爱。相信这次的荣誉会激励我在2011年写出更多更好的博文。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;评委点评&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236299.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;陈本峰&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：专业的 Sliverlight博客，通畅的文笔，高水平的内容，liverlight开发者必读博客。内容不但涵盖了"从入门到精通的" 不同技术知识层面，而且还及时报道讨论Silverlight最近发展动向，对Silverlight开发人员来说是非常有价值的知识来源。博文还很注重 结合实例，采用代码和图表来讲解，使读者可以快速掌握要领，这点也很值得赞赏。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://sunjibin.blog.51cto.com/"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 13pt; text-decoration: underline;"&gt;&lt;strong&gt;2010年度十大杰出IT博客之：sun_in_china（孙继滨）&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 13pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20110121/1059080.jpg"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/201101242347203454.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2010年度十大杰出IT博客：&lt;a href="http://2010blog.51cto.com/918334"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;sun_in_china&lt;/span&gt;&lt;/a&gt;（孙继滨） &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博主简介&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;孙继滨，独立管理咨询顾问、项目管理专家，以及IT时事评论员。曾先后在亚信（AsiaInfo）、惠普（HP）、日本乐天（Rakuten）等名企从事技术与管理工作。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;潜伏职场10余载，研习职场生&amp;amp;升之道，对技术型人士转型管理及职场经理新人上位的处境与出路尤有心得。新著《&lt;a href="http://book.51cto.com/art/201101/242096.htm"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;知道力&amp;mdash;&amp;mdash;彻底超越执行力的25条职场新思维&lt;/span&gt;&lt;/a&gt;》已经上市。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博客介绍&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;老孙属于喜欢思考、也比较善于思考的类型。我的博客通常都是自己在工作、学习和生活中的思考结晶，正确与否和效果好坏老孙并不十分在意，比 较在意的是自己的思考过程和思考结果的分享。如果我的思考能够对博友有些帮助，那就再好不过了。同时，欢迎大家给我的博客留言，大家相互探讨、共同提高。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;当下老孙关注领域：知道力&amp;amp;执行力；项目管理&amp;amp;团队管理；企业文化&amp;amp;文化。由于时间和篇幅有限，这里就先做个简单介绍，更多内容请访问我的博客。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;另：最近正在玩围脖，如果对老孙的内容感兴趣，欢迎关注（ &lt;a href="http://t.sina.com.cn/laosunisme"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;http://t.sina.com.cn/laosunisme&lt;/span&gt;&lt;/a&gt;） &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;获奖感言&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;入围51CTO和新浪科技合办的2010年度十大杰出IT博客，我表现的很镇定。"LP，晚上再做一条鱼！""今晚喝点红酒。不多喝，就三杯！" 呵呵。。。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;我不想说的太多，因为我相信说的越少你的话才会越珍贵。在这里，我只想对关注老孙的朋友们说一声：有你们同行，旅途才不会寂寞，才会满是收获。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;感谢51CTO，感谢大赛评委，感谢所有支持和关注老孙的朋友们。感谢大家的辛勤工作，并祝 新春快乐，兔年吉祥。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;评委点评&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236297.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;张振伦&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：老孙的博客内容丰富，对项目管理有独到的见解。语言通俗易懂，颇能吸引读者，受众很广，值得学些项目管理的人士收藏阅读。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236295.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;许立宪&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：博主的文章从管理角度讲如何成长为一个优秀的项目经理，更多的从个人经历及社会阅历出发给刚就业的人或是工作一段时间仍处于徘徊阶段的人给予了很好的指导。尤其是在众多书中能够给出一个读书目录很好。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236299.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;陈本峰&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评："随笔"系列把本来枯燥的项目管理理论变得生动幽默，很有特色。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236302.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;赖茂生&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：原创性好，具有专业深度，与博友的互动很好。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://zhoufoxcn.blog.51cto.com/"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 13pt; text-decoration: underline;"&gt;&lt;strong&gt;2010年度十大杰出IT博客之 周金桥&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 13pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20110121/1052190.jpg"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/201101242347212190.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2010年度十大杰出IT博客：&lt;a href="http://2010blog.51cto.com/792419"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;周金桥&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博主简介&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;曾任微软山西.NET俱乐部技术负责人，2009年独自编著了《&lt;a href="http://book.51cto.com/art/200907/136948.htm"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;ASP.NET夜话&lt;/span&gt;&lt;/a&gt;》 一书，2010年合著《程序员的成长的烦恼》一书，在51CTO和 CSDN开通了技术博客，一直坚持"共同分享，共同提高"的理念，写过多个.NET领域的系列博文，获得的荣誉有51CTO博客专家、51CTO推荐博 客、CSDN荣誉专家、CSDN博客专家、微软博客达人、 2008-2010三届微软最有价值专家(MVP)等荣誉。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博客介绍&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;详尽地记录了作者在学习和工作中遇到的遇到的各种问题的解决办法，还有工作历程。博文涉及的领域包括了C#、ASP.NET、SQL、Java、Web和软件工程等领域，但主要是以.NET领域的相关内容为主。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;获奖感言&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;有幸成为"2010十大杰出IT博客"，这是一种鼓励，鼓励本人过去所做的工作；同时这也是一种鞭策，鞭策本人急需与大家分享自己学习成果和经验。感谢51CTO，感谢评委，感谢大赛组委会，同时也感谢广大网友的支持，以后我会继续分享我在IT路上的经验心得。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;评委点评&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236299.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;陈本峰&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：博客更新勤快，文笔也很好，能够和读者保持很好互动。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236302.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;赖茂生&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：博客原创性高，专注度较高，有不错的专业深度，与博友的沟通回应很积极。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://yuelei.blog.51cto.com/"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 13pt; text-decoration: underline;"&gt;&lt;strong&gt;2010年度十大杰出IT博客之 yuelei（岳雷）&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 13pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20110121/1043280.jpg"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/201101242347216127.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2010年度十大杰出IT博客：&lt;a href="http://2010blog.51cto.com/202879"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;yuelei&lt;/span&gt;&lt;/a&gt;（岳雷） &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博主简介&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;岳雷，微软最有价值专家，护航科技有限公司高级系统工程师，教育部NIEH项目组专家组长。擅长虚拟化，Forefront，Active Directory，Exchange，System Center等技术。51CTO专家博客、博客之星、51CTO论坛资深版主，多家计算机媒体特约撰稿人。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博客介绍&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;岳雷的博客以微软服务器技术为主，适合使用微软产品定制企业IT解决方案的读者。博客内容主要涉及Active&amp;nbsp; Directory，ISA，Exchange，SCCM，SCDPM，Hyper-V，RemoteApp，App-V等产品。每个产品基本都是系列博 文，涉及到此产品的部署，配置及管理。适合技术爱好者由浅入深地学习。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;获奖感言&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;博客大赛是个很好的平台，借助这个平台，很多博主都淋漓尽致地展示了自己的实力和特点。在广大博友的支持下，我幸运地获得了最终的奖项。激动的眼泪禁不住哗哗地流哇，算了，啥也别说了，好好写博客回报博友吧。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;评委点评&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236303.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;张曦&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：博客的精神在这里体现得淋漓尽致&amp;mdash;&amp;mdash; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;他丰富的技术文章涉及了微软产品的各个领域，每一篇文章都如出版物内容一般严谨详尽，深入浅出娓娓道来，初、中、高级的网络管理人员都能从他的博客上获得自己所需的知识； &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;曾经是高级培训师的岳雷，对待每一位熟悉或素未谋面的博客读者，都像对待自己的学生一样热情负责，对每一条博客评论都字斟句酌地回复，两年来积累了7000多条； &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;对于岳雷的博客，其实并不需要过多的点评，有太多的博友给他留言，有太多的感激之词充满了他的博客，每次路过，我都会被这种博客精神深深打动，他和他的博友，已不可分开。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://sunyongjie.blog.51cto.com/"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 13pt; text-decoration: underline;"&gt;&lt;strong&gt;2010年度十大杰出IT博客之 孙永杰&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 13pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20110121/1035250.jpg"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/201101242347223402.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2010年度十大杰出IT博客：&lt;a href="http://2010blog.51cto.com/445592"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;孙永杰&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博主简介&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;孙永杰，上海北塔软件股份有限公司副总经理、资深产品总监，长期参与各类IT运维网络管理系统工程研究及咨询工作，获得ITIL V 3 大师级（Master）认证。曾领导并实施过浙江电力公司、安徽电力公司、山东省检验检疫局、广东省广交会展览中心等多个大型网络管理系统项目的实施。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博客介绍&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;如果大家对IT运维管理感兴趣，想了解更多关于IT运维管理领域从业者的亲身感受和技术发展的趋势与变化，欢迎您到我的博客来。套用一首流行的诗：&lt;br /&gt;&lt;span style="color: #6ba25e;"&gt;你见，或者不见我&lt;br /&gt;博客就在那里&lt;br /&gt;不悲不喜&lt;br /&gt;你念，或者不念我&lt;br /&gt;博客就在那里&lt;br /&gt;你爱，或者不爱我&lt;br /&gt;博客就在那里&lt;br /&gt;不增不减&lt;br /&gt;你跟，或者不跟我&lt;br /&gt;我的手就在你手里&lt;br /&gt;不舍不弃&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;获奖感言&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;非常荣幸能得到大赛组委会和广大博友的认可！这份荣誉是对我博客历程的肯定。同时让我倍感激励的是，更多的博友通过这个平台了解到了"IT运维管理"。看到大家的留言，看到有更多的人参与到对国内IT管理现状和出路的关注与讨论中，我认为这是博客最大的价值所在。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;感谢51CTO提供的这个平台，让我有机会把在IT运维管理项目的实施和与各个层面的用户交流过程中，萌生和历经的想法，分享给更多的朋友，同时也能对有共同兴趣的问题进行探讨。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;在荣获票选五十强时，我告诉大家："希望我的一些想法能引起您的共鸣，如果无法产生共鸣，希望可以有所帮助；如果暂时无法给您提供具体的帮助，希望 能为您打开一扇了解国内IT运维管理领域的窗；如果您认为站在这窗外对里面的风景看得不够透彻，欢迎您走进来，我愿意和每一位关心IT运维，关心中国IT 事业的朋友畅所欲言。"这是我写博客的初衷和一直坚持在做的事。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;评委点评&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236297.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;张振伦&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：很专业的博客，值得推荐。有深度，见解独到，对于从事网络运维、基础架构管理的IT人来说，具有独特的参考价值。&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236295.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;许立宪&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：博主的博客内容对IT运维管理无论从技术上、理念上、以及实际操作上都给予了全新的阐释，非常符合51CTO对于专业深入探讨的宗旨。博文通俗易懂，能够给企业的IT管理起到指导意义。&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://new.51cto.com/wuyou/%E8%B5%96%E8%8C%82%E7%94%9F"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;赖茂生&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点 评：博主以网络管理、IT基础架构管理、IT服务管理咨询为专注领域，以独特的视角对该领域的技术进行解读，对读者解决问题有较好的借鉴意义。博文的文字 流畅，语言生动，易于被读者接受。建议加强博客的推广及与读者的互动，进一步提高活跃度，扩大影响力。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236187.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;林正刚&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：1）选 题是否能起到推动信息化正确前进的作用：我觉得孙永杰的选题覆盖很多重要信息化的重点，运营管理，外包，CIO的角色......我认为他在众选手内是最 专业的。2）文章能否很精简的将理念说清楚：在这方面也是表现不错，能够用很平白的语言将一些问题说清楚。3）最后，从文章中能体现出博主是一个相对有平 衡心态的参赛者，没有太偏激的言论和观点，我觉得今天我们社会应该多鼓励一些平衡心态。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.cnblogs.com/KnightsWarrior/"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 13pt; text-decoration: underline;"&gt;&lt;strong&gt;2010年度十大杰出IT博客之 KnightsWarrior（曾洪亮）&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 13pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20110120/0953520.jpg"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/201101242347241931.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;2010年度十大杰出IT博客：&lt;a href="http://2010blog.51cto.com/1792698"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;KnightsWarrior&lt;/span&gt;&lt;/a&gt;（曾洪亮） &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博主简介&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;曾洪亮，现就职于新加坡知名企业，主要从事WinForm、 ASP.NET、WPF、WCF、WF、Silverlight 、Biztalk、Windows Azure等云计算方面的项目开发、技术架构设计、项目管理和企业培训工作。熟悉基于微软开发平台下的开发技术，尤其是面向对象以及面向服务领域，对设计 模式、TDD、极限编程、领域驱动、架构设计、敏捷开发和项目管理都很熟悉。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;技术和工作之外爱好比较广泛，喜欢历史（尤其喜欢研究历史人物和历史事件），对经济学、心理学、哲学及摄影也颇为爱好，梦想能够做自己喜欢做的事、和家人平淡朴实、无忧无虑的生活！ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博客介绍&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;圣殿骑士自写博客以来，博客文章一直没有局限在某一领域，对编程语言、规范及模式、TDD、极限编程、领域驱动、架构设计、敏捷开发、项目管理以及 云计算都有论述，虽资历有限，但尽其所能。由于工作和项目需要，所以对一些技术进行了较为深入的研究，在整个公司做过一些技术专场的培训（如"OO到设计 模式"、"WCF基础到企业应用"、"WPF基础到企业应用及优化"、"Silverlight基础到企业应用及优化"等），所以在写博客的时候也比较循 规蹈矩，大家可以看到WPF系列基本就是按照培训的格式书写，只是比培训说得要深入一些。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;虽然写技术博客在某种程度上弥补了培训的不足，但同时也是一项非常耗费时间和精力的事情，有很长一段时间都在断断续续的延续这份激情。不过有一点必 须指出：写博客是一件非常愉快的事情，在总结和提高自己的同时也能帮助他人；不过不要成为一种负担和炫耀，不然就会偏离本质！这样反而会给自己带来压力， 同时也不能起到很分享、交流乃至共同提高的效果。诚然，圣殿骑士自认才识浅薄，博客中的文章只是个人的部分经验、看法与心得，遗漏和错误之处也请见谅。由 于时间和篇幅有限，这里就先做此介绍，更多内容，可以访问我的博客。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;获奖感言&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;这次能够入围51CTO联合新浪科技主办的2010年度十大杰出IT博客，心中甚是喜悦，其实不管2010IT博客大赛十强花落谁家，能够参与并享 受其中的过程，对我来说也是一个莫大的荣幸，当然能够获奖也实属意外。这段时间比较忙，所以把博客的及写书的工作缓了缓，在此也罗列一下最近的几点琐事： &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;1、关于写技术博客，写技术博客是我的一大业余爱好工作，通过它，让我不断的审视和总结自己的技术积累和经验，同时也达到了与他人交流、分享与共同 进步的目的！只是在这个过程中所耗费的时间和精力比较大，不光要花很多时间来不断续写博客，而且也要回答读者的各种问题，开始的时候进度还比较快，但随着 大家的不断支持和鼓励，自己对博客的质量要求也越来越高，所以导致草稿箱存了很多文章都没有及时发布。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2、由于这段时间忙，没有及时回复各位出版社朋友的消息，对此表示抱歉，因为写书工作是一项比博客还要巨大的工程，再加上圣殿骑士资历尚浅，所以除了答应清华大学出版社一本书之外，其他都没有明确答复，感谢你们的信任及支持。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;3、之前在博客中公布了MSN，导致MSN好友人数急剧上升，通过它和博客也认识到了不少技术圈内同仁，也起到了分享、交流的目的，但每天面对 MSN的各种技术问题留言以及MSN的多封技术问题邮件，圣殿骑士也是有心无力，尤其是白天工作比较累，晚上回来打开邮件，黑压压的几大页，这实在是比写 博客还要巨大的一项工作。如果有没有回复到的问题及邮件，也请见谅，圣殿骑士会尽力而为！ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;4、2011年1月4日，伴随零点钟声的敲响，和心爱的女友恋爱四周年纪念日终于来临，心中喜悦和激动之情无以言表，仅此记录我们的爱情心路历程！ 同时也是第一年在新加坡过春节，所以也把心爱的女友从国内接了过来，希望这个春节能过得不同寻常，也希望远在家乡的父母能够过一个快乐的新年！ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;5、无意间参加2010中国十大杰出IT博客大赛，自从写博客以来最大的收获就是能和大家一起学习、分享与进步；圣殿骑士才疏学浅，尽最大所能书写 博客，同时也非常感谢大家的长期支持！尤其是在博客大赛期间涌现出了许多支持和鼓励圣殿骑士的朋友，有你们的鼓励和支持，圣殿骑士倍感欣慰，以后会尽力而 为写好每一篇文章，尽力回答每一个问题。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;最后，再次感谢51CTO，感谢你们提供的技术分享和交流平台；感谢各位大赛评委，感谢你们加班加点的审阅；感谢所有支持和关注圣殿骑士的朋友们，因为有你们的支持和鼓励，圣殿骑士才会走得更远！ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;评委点评&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236299.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;陈本峰&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：作者开博时间不到半年，却有不少好文章，尤其在WPF领域。虽然文章涵盖几个专业领域，但是某个时期作者只专注写一个领域，让读者很容易follow。而且作者还会适当总结一下近期的博文，方便读者融会贯通，这是个很好的习惯。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236294.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;朱建庭&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：博主所有文章结构清晰，技术分析与描述能够深入浅出，图文并茂，生动幽默，又有大量示例代码辅以说明，对读者有很好的启发性和借鉴参考性，与读者的互动交流也比较热烈，影响力不错，是一个很不错的技术博客，强烈推荐一把:)&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236302.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;赖茂生&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：博文的专业深度足够，实用性强，专注的领域稍显宽泛。博客更新及时，访问量、活跃度方面均有较好。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://rickyfang.blog.51cto.com/"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 13pt; text-decoration: underline;"&gt;&lt;strong&gt;2010年度十大杰出IT博客之 rickyfang（方建国）&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 13pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20110121/1001010.jpg"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/201101242347258126.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2010年度十大杰出IT博客：&lt;a href="http://2010blog.51cto.com/1213"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;rickyfang&lt;/span&gt;&lt;/a&gt;（方建国） &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博主简介&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;微软连续5届MVP，某知名房地产公司资讯科技高级主任。熟悉虚拟化管理及运维（VMware及微软SCVMM2008R2），在信息安全策略的制 定、解决方案（WSUS RSA CSICO、ILM、NAP）等方面有相当的生产经验。并在服务器系统、 服务及流量监控（SCOM NAGIOS MRTG CACTI）等方面有较多的涉足。同时也参于了Citrix桌面虚拟化、数据中心灾备、远程备份、桌面标准化等项目建设，目前正在积极运作一个能整合各种 运维监控、报警及处理流程的内部运维监控管理的门户以及学习和实践项目管理、ITIL等相关的知识。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博客介绍&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;我写的博客与我的工作内容较为相关，一般是工作中要进行一个解决方案的部署前测试过程的反映，尤其是近两年来，写博文以系列化（形成了动手实验手 册）出现的，包括从背景介绍（公司可能面临的IT问题）、解决方案、软硬件及拓扑介绍、部署步骤、部署实例、常见问题分析等，如CITRIX 桌面虚拟化系列、VMWARE 桌面虚拟化系列、VSPHERE高可用性系列、虚拟机管理及服务器监控系列等等，供助于这些博文基本上可以直接套用在公司的生产环境中了。同时也在博客上 写了一些IT运维工作中的经验分享等。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;由于工作经验或是所从事的工作职责等原因，写的博文主要是面向有一定基础的从事IT基础架构工作的午饭们和网友们。但今后亦会写一些更加通俗易懂的好文奉献给大家。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;获奖感言：&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;意料之外，但欣然接受。毕竟，是通过博客认识了很多人，让我有了我为人人，人人为我的互助机会。与51CTO也是多年的老朋友，很感激51CTO和 新浪微博这次当可颂德的益行。让更多的人认识到原来从事IT也可以这样精彩，也让更多人在知识方面受益了，更让更多人的劳动得到了大家的认可。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;要感谢的人很多，但我相信，奉献更多更好的博文，让大家能通过此途径互助成长，胜过万言千语。请记住，"单击右键点共享"的老方，与你在IT路上同在、同行。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;另外，也是户外运动的爱好者，常有时间和一帮老驴们一起探险和享受户外的乐趣。如果有共同爱好的午饭们，可以一起欣赏外面精彩的世界。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;评委点评&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236297.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;张振伦&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：Rickyfang涉猎的内容广泛，有一定的深度和广度，对于了解最新流行，十分有帮助。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236303.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;张曦&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：虚拟化、 云计算等等最新的技术，总是第一时间出现在他的博客上，而且是以真实案例的形式，而不是务虚的神侃。当很多人对vSphere还觉得云山雾罩的时候，方建 国已经可以把虚拟化技术在实际生产环境中的点点滴滴拿出来和我们分享，他已不仅是作为技术的使用者，更是IT新技术的领先尝试和推广者。走在最前面的人， 需要更强的能力、更大的勇气，还有更多的开拓精神。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://blog.liuts.com/"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 13pt; text-decoration: underline;"&gt;&lt;strong&gt;2010年度十大杰出IT博客之 运维进行时（刘天斯）&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 13pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20110121/0953130.jpg"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/20110124234726177.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2010年度十大杰出IT博客：&lt;a href="http://2010blog.51cto.com/2473986"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;运维进行时&lt;/span&gt;&lt;/a&gt;（刘天斯） &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博主简介&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;大家好，我叫刘天斯，今年29岁。2005年加入天涯社区，担任系统管理员，本人热衷开源技术的研究，包括系统架构、运维开发、负载均衡、缓存技 术、数据库、分布式存储及云计算机等领域，擅长大规模集群的运维工作。关注互联网技术发展动向，努力紧靠技术前沿。充当一名普通的传播者和分享者。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博客介绍&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;BLOG的内容主要以分享工作及研究领域的心得为主。适合运维人员、开发人员及系统架构师等人群。本BLOG的宗旨："一起学习，共同进步"。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;获奖感言&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;首先非常感谢各位评审，能够在百忙之中挤出时间来参加评审工作，你们辛苦了。能够得到你们的肯定非常开心。50强中每一位博主都非常优秀，我想评委 每做出一次选择都是非常艰难的。此次比赛收获最大的不是荣誉，而是相识了很多圈内朋友，学习到很多新的东西。其次我要感谢我的爱人和女儿。任何成就的背后 都离不开她们的支持与鼓励。最后谢谢大家！ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;评委点评&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236303.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;张曦&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：如果说天 涯社区在中文技术社区中独占鳌头，那么，能够运维这么一个庞大而复杂系统的人，必定是开源运维行业中的高手。看刘天斯的博客，能感受到一种彻底的开源分享 精神，他把代码、架构、思路毫无保留的展现，所谓的技术保守在这里荡然无存。这里有高密集的IO、大量数据的存储及查询、数据的扩展、分布式、负载均衡， 等等这些高级技术的部署方式，但更值得去分析的是他解决问题的思路。也正是由于刘天斯对运维思路的至高领悟，使得他能够无私地把技术成果分享，因为对高手 来说，思路已映入他的脑图，代码配置架构神马都是浮云，有什么不能与你分享的？ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://zhoujg.cnblogs.com/"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 13pt; text-decoration: underline;"&gt;&lt;strong&gt;2010年度十大杰出IT博客之：jingen_zhou（周金根）&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 13pt;"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.51cto.com/files/uploadimg/20110121/1009470.jpg"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/zhoujg/201101/201101242347264737.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;2010年度十大杰出IT博客：&lt;a href="http://2010blog.51cto.com/1281471"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;jingen_zhou&lt;/span&gt;&lt;/a&gt;（周金根） &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博主简介&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;Hi，我叫周金根，在广联达软件股份公司从事建筑行业信息化相关管理软件产品开发近10年，期间担任过开发经理、项目经理和技术研究员，现任架构师。在工作中，针对于软件产品开发中的人员、技术和过程，一直持续关注敏捷个人、模型驱动软件工厂和产品管理。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;目前主持模型驱动业务开发平台OpenExpressApp和敏捷个人知识体系两个项目，社区活动中担任希赛架构设计专家组成员、金蝶TOGAF论坛版主、微软社区精英招募组副组长，以及51CTO、博客园、畅享网等推荐博主。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;博客介绍&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;我的工作主要是围绕着敏捷个人、模型驱动软件工厂和产品管理这三方面展开，我的博客也正是与这些内容紧密联系的，希望通过blog的形式记录我的所学所思。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;如果你想让自己工作变得更高效，想获得工作和生活的平衡，那么敏捷个人话题适合你；如果你是一名业务开发平台的架构组成员或技术人员，那么模型驱动软件工厂和技术话题适合你；如果你是一名产品管理人员，那么产品管理、开发流程之类的更适合你。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;如果对我的内容感兴趣，也非常欢迎大家follow我的新浪微博：&lt;a href="http://t.sina.com.cn/openexpressapp"&gt;&lt;span style="color: blue; text-decoration: underline;"&gt;http://t.sina.com.cn/openexpressapp&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;获奖感言&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;51CTO联合新浪科技主办的2010年中国IT博客赛事彰显了博客的无私分享、奉献精神，很高兴能够进入2010年中国IT博客10强，在这里感谢每一位支持我的朋友、感谢51CTO和专家评委的辛劳，我将通过博客和微博继续以开放的心态与大家一起分享，共同成长。 &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;&lt;br /&gt;&lt;strong&gt;评委点评&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://fellow.51cto.com/art/201012/236299.htm"&gt;&lt;span style="font-family: 宋体; color: blue; font-size: 12pt; text-decoration: underline;"&gt;陈本峰&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 宋体; font-size: 12pt;"&gt;点评：专业顶 尖的项目管理博客。作者有很强的学习和总结能力，并勤勤恳恳在博客上把自己的知识分享出来，非常可贵，他将敏捷方法融会贯通，应用到了方方面面， 给我留下了非常深刻的印象。让我印象更深的是博主兢兢业业、精益求精的写博客精神：定期将博文整理，编译成图书式的PDF，并且在博客上列出所有下载链 接，以最大程度方便读者。这种专注、极致、以客户为本精神正是开发一个优秀软件所必需的，我很欣赏。 &lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/KnightsWarrior/aggbug/1948513.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2011/01/31/1948513.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/KnightsWarrior/archive/2010/12/31/1922647.html</id><title type="text">云计算资源分享与下载</title><summary type="text">自从上一篇实战第一个云程序之后，我就没有再发布云计算相关的文章，这些天重新整理了一下草稿箱，发现这个系列有很多篇都存了大半年了，一直没有整理发布出来，今天就先发布这篇“云计算资源分享与下载”，希望能给大家带来一些参考和帮助。这篇文章对于学习系统学习云计算有很好的指导作用，尤其是大量的书籍、视频和相关社区网站的介绍，但是由于我比较热衷于微软的Azure平台的研究和推广，针对其他厂商的云计算产品，我只是很粗浅的了解了其概念及简单使用，并没有做深入的研究，所以如果后续发布的云计算相关文章也会集中在Azure上。</summary><published>2010-12-31T00:25:00Z</published><updated>2010-12-31T00:25:00Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><link rel="alternate" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/31/1922647.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/31/1922647.html"/><content type="html">&lt;p&gt;&lt;strong&gt;一. 摘要&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;自从上一篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/09/08/1821098.html"&gt;实战第一个云程序&lt;/a&gt;之后，我就没有再发布云计算相关的文章，这些天重新整理了一下草稿箱，发现这个系列有很多篇都存了大半年了，一直没有整理发布出来，今天就先发布这篇&amp;ldquo;云计算资源分享与下载&amp;rdquo;，希望能给大家带来一些参考和帮助。这篇文章对于学习系统学习云计算有很好的指导作用，尤其是大量的书籍、视频和相关社区网站的介绍，但是由于我比较热衷于微软的Azure平台的研究和推广，针对其他厂商的云计算产品，我只是很粗浅的了解了其概念及简单使用，并没有做深入的研究，所以如果后续发布的云计算相关文章也会集中在Azure上。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二. 本文提纲 &lt;/strong&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;middot; 1.摘要 &lt;/p&gt;&lt;p&gt;&amp;middot; 2.本文提纲 &lt;/p&gt;&lt;p&gt;&amp;middot; 3.概念回顾&lt;/p&gt;&lt;p&gt;&amp;middot; 4.云计算书籍推荐&lt;/p&gt;&lt;p&gt;&amp;middot; 5.云计算视频推荐&lt;/p&gt;&lt;p&gt;&amp;middot; 6.云计算社区汇总&lt;/p&gt;&lt;p&gt;&amp;middot; 7.资源下载&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;三. 概念回顾&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1，云计算的春秋战国时代&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;回顾最近几年，云计算无疑已经成为一个十分热门的话题。云计算厂商也可谓是星罗棋布，不光是国外的亚马逊、谷歌、IBM、微软、甲骨文、思科、惠普、Salesforce、VMware等大型企业，还包括国内的阿里巴巴、中移动、浪潮企业等也加入到了这个竞技场。所以从微软的Azure平台到Google App Engine、Amazon Web Service 、Salesforce的Force.com云计算平台到IBM&amp;ldquo;蓝云&amp;rdquo;解决方案、Oracle Enterprise Manager再到VMware vSphere，无需置疑，由于缩减了相关软硬件的购买和管理，从而可以控制成本支出，降低复杂性。随着云计算的不断发展，越来越多的厂商及其企业客户开始在云中设计、开发、测试、部署或托管应用。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/5WindowsAzure_10612/cloudcompany_6.png"&gt;&lt;img title="cloudcompany" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/5WindowsAzure_10612/cloudcompany_thumb_2.png" alt="cloudcompany" width="470" border="0" height="321" /&gt;&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2，云计算的战略发展及其分类&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;ldquo;三屏一云&amp;rdquo;战略&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;ldquo;三屏一云&amp;rdquo;战略最早由微软正式提出：三屏即电脑显示屏、手机屏幕和电视屏幕，&amp;ldquo;一云&amp;rdquo;则指云计算。随着云计算的不断发展和市场的急剧扩大，&amp;ldquo;三屏一云&amp;rdquo;已经成了各个企业争斗的主要战场（近几年手机市场和云计算应用方面尤其突出）！&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/201012/20101231075651476.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-12-29 0-40-49" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/201012/201012310757186798.png" alt="2010-12-29 0-40-49" width="465" border="0" height="252" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 微软&amp;ldquo;三屏一云&amp;rdquo;战略&lt;/p&gt;&lt;p&gt;&lt;strong&gt;云计算三大趋势&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;云计算主要表现在三个发展趋势，这也是现在云计算的三大特点：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;软件即服务（SaaS&amp;mdash;&amp;mdash;Software as a Service）&lt;/strong&gt;一种软件分配模式，使应用程序由供应商或服务供应商托管起来，并通过网络提供给用户。 &lt;/li&gt;&lt;li&gt;&lt;strong&gt;平台即服务（PaaS&amp;mdash;&amp;mdash;Platform as a Service）&lt;/strong&gt;一种平台分配模式，通过网络提供操作系统和相关服务，这样客户就无需下载或安装。 &lt;/li&gt;&lt;li&gt;&lt;strong&gt;基础设施即服务（IaaS&amp;mdash;&amp;mdash;Infrastructure as a Service）&lt;/strong&gt;一种基础设施分配模式，把这些基础设施通过外包的形式提供出来，其中包括存储、硬件设备、服务器和网络组件等。 &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;云计算类别划分&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;云计算分类&amp;mdash;&amp;mdash;公有云、私有云和混合云：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;公有云：&lt;/strong&gt;是指为其他云厂商提供服务的云服务，它所有的服务是供他人使用，而不是自己用。比如微软的Windows Azure Platform、Google App Engine、亚马逊云服务、Salesforce等。对于使用者而言，公共云的最大优点是，其所应用的程序、服务及相关数据都存放在公共云的提供者处，自己无需做相应的投资和建设。缺点就是，由于数据不存储在自己的数据中心，其安全性存在一定风险。同时，公共云的可用性不受使用者控制，这方面也存在一定的不确定性。 &lt;/li&gt;&lt;li&gt;&lt;strong&gt;私有云：&lt;/strong&gt;是指企业自身构建并使用的云，它所有的服务不是供其他企业使用，而是供本企业及其下属分支企业使用。私有云的部署比较适合于有众多分支机构的大型企业或政府部门。随着这些大型企业数据中心的集中化，私有云将会成为他们部署IT系统的主流模式。相对于公共云，私有云部署在企业自身内部，因此其数据安全性、系统可用性都可由自己控制。但其缺点是投资较大，尤其是一次性的建设投资较大。 &lt;/li&gt;&lt;li&gt;&lt;strong&gt;混合云：&lt;/strong&gt;是指供企业本身和客户共同使用的云，它所提供的服务既可以供企业本身使用，也可以供别人使用。所以相对公有云和私有云而言，混合云的部署方式对云提供者的要求较高。混合云是除了公有云和私有云之外的另一种解决方案。 &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;3，云计算产品的逐渐完善&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;关于云计算，我们前面提到了很多云计算公司和产品，其实在实际项目中只需要其中一种就行，在&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/09/08/1821098.html"&gt;实战第一个云程序&lt;/a&gt;中介绍了Windows Azure Platform，这里我们就拿VMware的vSphere举例。VMware vSphere是一款云计算操作系统，它将数据中心转变成极为简化的云计算基础架构，可以灵活快速且高效的搭建企业所需要的云应用程序架构及云数据处理中心。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;VMware vSphere包括四个版本：&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;VMware vSphere Standard 提供基本的应用程序整合，在削减硬件成本的基础上也提高了部署的效率;&lt;/p&gt;&lt;p&gt;VMware vSphere Advanced 提供应用程序更高的可用性和稳定性;&lt;/p&gt;&lt;p&gt;VMware vSphere Enterprise 企业版最大的优点就是比较稳定和安全，能最大限度减少宕机并保护数据，从而实现资源管理的自动化;&lt;/p&gt;&lt;p&gt;VMware vSphere Enterprise Plus 能将IT基础架构转变成灵活、可伸缩性的服务，这样企业在做架构的时候有很大的扩展和灵活性。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;VMware vSphere具体结构图如下：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/201012/201012310757282153.jpg"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px; border-width: 0px;" title="VMware vSphere 4_thumb[1]" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/201012/201012310757363487.jpg" alt="VMware vSphere 4_thumb[1]" width="458" border="0" height="508" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;可以看出主要包括以下几个要点：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;应用程序层次：支持现有应用程序的迁移和全新的应用程序的搭建，所以就不必考虑新旧应用程序的处理问题。&lt;/p&gt;&lt;p&gt;VMware VCenter套件：使云计算的使用形式更加灵活，可以使用VMware VCenter套件构建自己的云计算架构以及数据中心。&lt;/p&gt;&lt;p&gt;应用程序服务层次：无论是何种应用程序类型或操作系统，这些组件都将为运行于云操作系统平台上的所有应用程序提供内置的服务级别控制。&lt;/p&gt;&lt;p&gt;基础架构服务层次： 这些组件可全面虚拟化服务器、存储设备和网络资源，聚合这些资源，并基于业务优先级将资源准确地按需分配给应用程序。 &lt;/p&gt;&lt;p&gt;云的使用形式：可以实现内部云计算和外部云计算，这样就可以让企业有更多的选择，同时也增加了企业的主动权和可控性。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;从VMware我们可以得出以下结论：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;VMware的vSphere和其他云计算产品一样（云计算产品的共性），可以帮助企业快速构建云计算架构，而且针对公有云计算和私有云计算，都有相应的解决方案。 同时VMware在虚拟化技术方面有着比较成熟的解决方案和处理经验，所以在这个层次上，它比其他云计算产品有着不可替代的优势。&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;四. 云计算书籍推荐&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;strong&gt;Cloud Computing相关书籍&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/201012/201012310757418225.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="cloud computing" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/201012/201012310757514934.png" alt="cloud computing" width="598" border="0" height="237" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Windows Azure技术相关书籍：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/201012/201012310757566291.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="windows azure" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/201012/201012310758104905.png" alt="windows azure" width="603" border="0" height="256" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;五. 云计算视频推荐&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;视频截图&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/201012/201012310805277598.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="windowsazure_v" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/201012/201012310815418529.png" alt="windowsazure_v" width="837" border="0" height="417" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;视频详细列表&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;strong&gt;How Do I&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14311"&gt;MSDN Video: How Do I: Azure Monitoring and Diagnostics&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14335"&gt;MSDN Video: How Do I: Calculate the cost of Azure application usage?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14334"&gt;MSDN Video: How Do I: Calculate the cost of Azure database usage?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14342"&gt;MSDN Video: How Do I: Create And Use an Azure Service Bus Message Buffer?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14332"&gt;MSDN Video: How Do I: Debug a Windows Azure Application?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14315"&gt;MSDN Video: How Do I: Deploy my first Azure application: Step-by-Step?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14313"&gt;MSDN Video: How Do I: Deploying Windows Azure Applications&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14328"&gt;MSDN Video: How Do I: Dive Into Azure Part 1, Migration&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14340"&gt;MSDN Video: How Do I: Get Started With the Access Control Services?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14337"&gt;MSDN Video: How Do I: Get Started With the Azure Service Bus?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14344"&gt;MSDN Video: How Do I: How to Use Azure Storage?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14341"&gt;MSDN Video: How Do I: Integrate An Existing Application With SQL Azure? Part 1&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14338"&gt;MSDN Video: How Do I: Integrate an Existing Application with SQL Azure? Part 2&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14333"&gt;MSDN Video: How Do I: Introducing the Microsoft Sync Framework Powerpack for SQL Azure?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14323"&gt;MSDN Video: How Do I: Introducing the Windows Azure Content Delivery Network?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14345"&gt;MSDN Video: How Do I: Manage SQL Azure Firewall rules?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14336"&gt;MSDN Video: How Do I: Migrate my Existing ASP.NET Application to Windows Azure?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14393"&gt;MSDN Video: How Do I: Monitor and Trace Applications in Windows Azure?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14320"&gt;MSDN Video: How Do I: Monitor Azure applications by persisting diagnostics data to Azure Storage?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14394"&gt;MSDN Video: How Do I: Multicast with the .NET Service Bus&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14312"&gt;MSDN Video: How Do I: Scaling Down Azure Roles&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14314"&gt;MSDN Video: How Do I: Understanding the ServiceConfiguration File&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14343"&gt;MSDN Video: How Do I: Use the RoleManager Class to Log SessionIDs in SQL Azure?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14331"&gt;MSDN Video: How Do I: Use Windows Azure Queues?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14346"&gt;MSDN Video: How Do I: Use Windows Azure Storage with my Application?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14349"&gt;MSDN Video: How Do I: Using roles in Windows Azure?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14339"&gt;MSDN Video: How Do I: What is Azure?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;MSDN Webcast&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=15756"&gt;MSDN Webcast: Windows Azure Boot Camp: Worker Roles (Level 200)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=15755"&gt;MSDN Webcast: Windows Azure Boot Camp: Windows Azure and Web Roles (Level 200)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=15754"&gt;MSDN Webcast: Windows Azure Boot Camp: Introduction to Cloud Computing and Windows Azure (Level 100)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=15421"&gt;MSDN Webcast: Windows Azure AppFabric, Soup to Nuts (Level 300)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=14144"&gt;MSDN Webcast: Developing for Windows Azure AppFabric Service Bus (Level 300)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=14143"&gt;MSDN Webcast: Creating Cross-Firewall Connections with Windows Azure AppFabric Service Bus (Level 300)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=14142"&gt;MSDN Webcast: Integrating Windows Azure AppFabric Access Control with Active Directory (Level 300)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=14141"&gt;MSDN Webcast: Securing Web Resources Using Windows Azure AppFabric Access Control (Level 300)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=14140"&gt;MSDN Webcast: Introduction to Windows Azure AppFabric (Level 200)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=13443"&gt;MSDN Webcast: Security Talk: Using Windows Azure Storage Securely (Level 200)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=13805"&gt;MSDN Webcast: SharePoint 2010 and Windows Azure (Level 300)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=13804"&gt;MSDN Webcast: Office Business Applications Evolved (Level 300)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=13193"&gt;MSDN Webcast: geekSpeak: Windows Azure AppFabric (Level 200)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=12908"&gt;MSDN Webcast: Simulcast Event: Take Your Applications Sky High with Cloud Computing and the Windows Azure Platform (Level 200)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=12616"&gt;MSDN Webcast: geekSpeak: SQL Azure Under the Hood with Chris Rolon (Level 200)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=12384"&gt;MSDN Webcast: geekSpeak: Rich Internet Applications with Windows Azure (Level 200)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Webcasts&amp;amp;seriesid=155&amp;amp;webcastid=6403"&gt;MSDN Webcast: Communication Patterns Supported by Windows Azure Platform AppFabric (Level 200)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Case Study&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6258"&gt;Microsoft Video: Microsoft Online Services Arctic IT Case Study&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6259"&gt;Microsoft Video: Microsoft Online Services Hospital Amstelland Case Study&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6261"&gt;Microsoft Video: Microsoft Online Services PointBridge/Recycled Energy Development Case Study&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6257"&gt;Microsoft Video: Microsoft Online Services Virteva Case Study&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ARCast.TV&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12628"&gt;MSDN Video: ARCast.TV Special: Michael Stiefel on Software as a Service in the Cloud&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=7314"&gt;MSDN Video: ARCast.TV: Clemens Vasters on Architecture Implications of the Internet Service Bus&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12585"&gt;MSDN Video: ARCast.TV: Cloud Computing is for Small Companies Too&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12629"&gt;MSDN Video: ARCast.TV: CxO Level Discussion about Cloud Computing&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6721"&gt;MSDN Video: ARCast.TV: Dennis McCarthy on Platform as a Service (PaaS)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6966"&gt;MSDN Video: ARCast.TV: Juval Lowy on The EnergyNet, the Next Software Boom&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6967"&gt;MSDN Video: ARCast.TV: Simon Guest on Patterns for Moving to the Cloud&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6936"&gt;MSDN Video: ARCast.TV: The Cloud Part 1, What it Means to the User&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6937"&gt;MSDN Video: ARCast.TV: The Cloud Part 2, What is Microsoft Doing&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12583"&gt;MSDN Video: ARCast.TV: Vishwas Lele, CTO of Applied Information Sciences, on Cloud Architecture Patterns&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6765"&gt;MSDN Video: ARCast.TV: Windows Azure, A Conversation with David Chappell&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DECast&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=7015"&gt;MSDN Video: deCast: Building an Azure App (Part 3 of 3): Hosting Web Services and Silverlight&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=7024"&gt;MSDN Video: deCast: Understanding The Azure Table Storage API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SQL AZURE&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12738"&gt;MSDN Video: Microsoft SQL Azure Overview for Developers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12737"&gt;MSDN Video: Microsoft SQL Azure Overview for the Technical Decision Maker&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12740"&gt;MSDN Video: Microsoft SQL Azure Programmability&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12739"&gt;MSDN Video: Microsoft SQL Azure RDBMS Support&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12742"&gt;MSDN Video: Microsoft SQL Azure Security Model&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12741"&gt;MSDN Video: Microsoft SQL Azure Tooling&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Cloud Migration&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14171"&gt;MSDN Video: msdev Cloud Migration (Episode 1): Planning&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14172"&gt;MSDN Video: msdev Cloud Migration (Episode 2): Content&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14173"&gt;MSDN Video: msdev Cloud Migration (Episode 3): Web Sites&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14174"&gt;MSDN Video: msdev Cloud Migration (Episode 4): Services&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14175"&gt;MSDN Video: msdev Cloud Migration (Episode 5): Looking Back&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13872"&gt;MSDN Video: msdev Cloud Migration: Episode 1: Planning&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12828"&gt;MSDN Video: Real World Azure&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=14687"&gt;MSDN Video: Security in Provisioning and Billing Solutions for Windows Azure Platform&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DataAcess与Azure&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13279"&gt;MSDN Video: Simulcast Event: All Data/All Day Dive into .NET Data Access, A Closer Look at LINQ to SQL&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13282"&gt;MSDN Video: Simulcast Event: All Data/All Day Dive into .NET Data Access, A Deeper Look at ADO.NET Entity Framework&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13283"&gt;MSDN Video: Simulcast Event: All Data/All Day Dive into .NET Data Access, Azure Data Storage Options&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13281"&gt;MSDN Video: Simulcast Event: All Data/All Day Dive into .NET Data Access, Getting Started with ADO.NET Entity Framework&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13280"&gt;MSDN Video: Simulcast Event: All Data/All Day Dive into .NET Data Access, Intro to WCF Data Services and OData&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13278"&gt;MSDN Video: Simulcast Event: All Data/All Day Dive into .NET Data Access, Introduction to LINQ&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Get Cloud Ready With Windows Azure&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13374"&gt;MSDN Video: Simulcast Event: Get Cloud Ready with Windows Azure (Part 1 of 7): Event Kickoff&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13375"&gt;MSDN Video: Simulcast Event: Get Cloud Ready with Windows Azure (Part 2 of 7): Platform Overview for Developers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13376"&gt;MSDN Video: Simulcast Event: Get Cloud Ready with Windows Azure (Part 3 of 7): Windows Azure Storage&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13377"&gt;MSDN Video: Simulcast Event: Get Cloud Ready with Windows Azure (Part 4 of 7): SQL Azure&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13381"&gt;MSDN Video: Simulcast Event: Get Cloud Ready with Windows Azure (Part 5 of 7): Building Applications for the Cloud&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13378"&gt;MSDN Video: Simulcast Event: Get Cloud Ready with Windows Azure (Part 6 of 7): Migrating Applications to the Cloud&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13379"&gt;MSDN Video: Simulcast Event: Get Cloud Ready with Windows Azure (Part 7 of 7): Panel and Close&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Take Your Applications Sky High with Cloud Computing &amp;amp; the Windows Azure Platform &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13222"&gt;MSDN Video: Simulcast Event: Take Your Applications Sky High with Cloud Computing &amp;amp; the Windows Azure Platform (Part 1 of 3): Overview&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13223"&gt;MSDN Video: Simulcast Event: Take Your Applications Sky High with Cloud Computing and the Windows Azure Platform (Part 2 of 3): Storage Options&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13224"&gt;MSDN Video: Simulcast Event: Take Your Applications Sky High with Cloud Computing and the Windows Azure Platform (Part 3 of 3): Going Live with your Solution&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Software plus Services &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=5972"&gt;MSDN Video: Software plus Services (Part 1 of 6): Introduction&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6016"&gt;MSDN Video: Software plus Services (Part 2 of 6): Benefits&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6017"&gt;MSDN Video: Software plus Services (Part 3 of 6): By Example&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6018"&gt;MSDN Video: Software plus Services (Part 4 of 6): For Architects&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6038"&gt;MSDN Video: Software plus Services (Part 5 of 6): For Developers&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6019"&gt;MSDN Video: Software plus Services (Part 6 of 6): In Practice&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;TechEd 2009 &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6556"&gt;MSDN Video: TechEd 2009 TechTalk: Provisioning an SDS Database in the Azure Developer Portal&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=6557"&gt;MSDN Video: TechEd 2009 TechTalk: The New Face of Microsoft SQL Data Services&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Partner Story for Windows Azure&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12734"&gt;MSDN Video: The Partner Story for Windows Azure (Part 1 of 2)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12735"&gt;MSDN Video: The Partner Story for Windows Azure (Part 2 of 2)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12788"&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Why Did I &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=15883"&gt;MSDN Video: Why Did I?" Series: Building the CorpSystem Sales Tax Office Application using Windows Azure&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=16004"&gt;MSDN Video: Why Did I?" Series: How QuarkPromote.com transitioned to the Cloud&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=16006"&gt;MSDN Video: Why Did I?" Series: Why Kelly Blue Book migrated to Cloud Computing&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=15619"&gt;MSDN Video: Why Did I?" Series: Windows Azure: Total Enforcement, Records Management System&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Why Windows Azure&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12984"&gt;MSDN Video: Why Windows Azure (Part 1 of 6): What Is Windows Azure and Why Is It In the Cloud?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12985"&gt;MSDN Video: Why Windows Azure (Part 2 of 6): The Windows Azure Development Experience&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12986"&gt;MSDN Video: Why Windows Azure (Part 3 of 6): Moving Existing Applications to Windows Azure&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12987"&gt;MSDN Video: Why Windows Azure (Part 4 of 6): The Windows Azure TCO and ROI Calculator&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12988"&gt;MSDN Video: Why Windows Azure (Part 5 of 6): Front Runner&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12989"&gt;MSDN Video: Why Windows Azure (Part 6 of 6): Sign Up for Windows Azure&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Windows Azure Firestarter &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=16887"&gt;MSDN Video: Windows Azure Firestarter (Part 1 of 3): Getting Your Head into the Cloud&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=16888"&gt;MSDN Video: Windows Azure Firestarter (Part 2 of 3): Migrating Applications to Windows Azure&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=16889"&gt;MSDN Video: Windows Azure Firestarter (Part 3 of 3): Creating Applications for Windows Azure&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Windows Azure Platform &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=16785"&gt;MSDN Video: Windows Azure Platform Security Essentials: Module 1 - Security Architecture&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=16786"&gt;MSDN Video: Windows Azure Platform Security Essentials: Module 2 &amp;ndash; Identity Access Management&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=16787"&gt;MSDN Video: Windows Azure Platform Security Essentials: Module 3 &amp;ndash; Storage Access&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=16788"&gt;MSDN Video: Windows Azure Platform Security Essentials: Module 4 &amp;ndash; Secure Development&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Windows Azure Overview&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12736"&gt;MSDN Video: Windows Azure Fundamentals&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12733"&gt;MSDN Video: Windows Azure Overview&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=13903"&gt;MSDN Video: Visual Studio 2010 RTM: Windows Azure and the .NET Framework&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12788"&gt;MSDN Video: What's New in Azure&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12744"&gt;MSDN Video: Windows Azure Platform: AppFabric Fundamentals&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12743"&gt;MSDN Video: Windows Azure Platform: AppFabric Overview&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12745"&gt;MSDN Video: Windows Azure Platform: Introducing the Service Bus&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/events/series/azure.aspx?tab=Videos&amp;amp;seriesid=155&amp;amp;webcastid=12746"&gt;MSDN Video: Windows Azure Platform: The Access Control Service&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;六. 云计算社区汇总&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;除了上面提供的云计算相关书籍和视频之外，这里还有一些网站可以参考，具体如下：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;Windows Azure Platform &lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd163896.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd163896.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;微软开发人员中心（英文）&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/azure/cc994380.aspx"&gt;http://msdn.microsoft.com/en-us/azure/cc994380.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;微软开发人员中心（中文）&lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/azure/default.aspx"&gt;http://msdn.microsoft.com/zh-cn/azure/default.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Quick Lap &lt;/p&gt;&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd203059.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd203059.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;微软云计算中文博客&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/azchina/"&gt;http://blogs.msdn.com/b/azchina/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;微软云计算中文博客（CSDN站）&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.csdn.net/azurechina"&gt;http://blog.csdn.net/azurechina&lt;/a&gt;&lt;/p&gt;IT168 云计算专题&lt;p&gt;&lt;a href="http://cloud.it168.com/"&gt;http://cloud.it168.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;CSDN云计算专题&lt;/p&gt;&lt;p&gt;&lt;a href="http://subject.csdn.net/yunjs.htm"&gt;http://subject.csdn.net/yunjs.htm&lt;/a&gt;&lt;/p&gt;&lt;p&gt;51CTO云计算专题&lt;/p&gt;&lt;p&gt;&lt;a href="http://server.51cto.com/cloud-computing/"&gt;http://server.51cto.com/cloud-computing/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;中国云计算论坛&lt;/p&gt;&lt;p&gt;&lt;a href="http://bbs.chinacloud.cn/index.aspx"&gt;http://bbs.chinacloud.cn/index.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;博客园云计算专区&lt;/p&gt;&lt;p&gt;&lt;a title="http://space.cnblogs.com/group/CloudComputing/" href="http://space.cnblogs.com/group/CloudComputing/"&gt;http://space.cnblogs.com/group/CloudComputing/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;微软官方Windows Azure英文博客&lt;/p&gt;&lt;p&gt;&lt;a title="http://blogs.msdn.com/b/windowsazure/" href="http://blogs.msdn.com/b/windowsazure/"&gt;http://blogs.msdn.com/b/windowsazure/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;微软官方AppFabric英文博客&lt;/p&gt;&lt;p&gt;&lt;a title="http://blogs.msdn.com/b/windowsazureappfabricannounce/" href="http://blogs.msdn.com/b/windowsazureappfabricannounce/"&gt;http://blogs.msdn.com/b/windowsazureappfabricannounce/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;微软官方SQL Azure英文博客&lt;/p&gt;&lt;p&gt;&lt;a title="http://blogs.msdn.com/b/sqlazure/" href="http://blogs.msdn.com/b/sqlazure/"&gt;http://blogs.msdn.com/b/sqlazure/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;微软官方Dallas英文博客&lt;/p&gt;&lt;p&gt;&lt;a title="http://blogs.msdn.com/dallas/" href="http://blogs.msdn.com/dallas/"&gt;http://blogs.msdn.com/dallas/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;MSDN文档&lt;/p&gt;&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/dd163896.aspx" href="http://msdn.microsoft.com/en-us/library/dd163896.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd163896.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;FAQ（中文）&lt;/p&gt;&lt;p&gt;&lt;a title="http://blogs.msdn.com/b/azchina/archive/tags/faq/" href="http://blogs.msdn.com/b/azchina/archive/tags/faq/"&gt;http://blogs.msdn.com/b/azchina/archive/tags/faq/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;FAQ（英文）&lt;/p&gt;&lt;p&gt;&lt;a title="http://www.microsoft.com/windowsazure/faq/" href="http://www.microsoft.com/windowsazure/faq/"&gt;http://www.microsoft.com/windowsazure/faq/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;All-In-One Code Framework（示例集合）&lt;/p&gt;&lt;p&gt;&lt;a title="http://1code.codeplex.com/" href="http://1code.codeplex.com/"&gt;http://1code.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;中云网 &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.china-cloud.com/"&gt;http://www.china-cloud.com/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;TT云计算 &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.searchcloudcomputing.com.cn/index.htm"&gt;http://www.searchcloudcomputing.com.cn/index.htm&lt;/a&gt;&lt;/p&gt;&lt;p&gt;另外包括产品支持的几个常用链接：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/windowsazure/support/"&gt;客户支持门户&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/category/azure"&gt;免费论坛技术支持&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="https://support.microsoft.com/oas/default.aspx?prid=13496&amp;amp;st=1"&gt;收费技术支持（Windows Azure）&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="https://support.microsoft.com/oas/default.aspx?prid=13495&amp;amp;st=1"&gt;收费技术支持（SQL Azure）&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="https://support.microsoft.com/oas/default.aspx?prid=13494&amp;amp;st=1"&gt;收费技术支持（AppFabric）&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="https://support.microsoft.com/oas/default.aspx?prid=13185&amp;amp;st=1"&gt;免费Live Site支持（Windows Azure）&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="https://support.microsoft.com/oas/default.aspx?prid=13491&amp;amp;st=1"&gt;免费Live Site支持（SQL Azure）&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="https://support.microsoft.com/oas/default.aspx?prid=13186&amp;amp;st=1"&gt;免费Live Site支持（AppFabric）&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="https://mocp.microsoftonline.com/Site/Support.aspx"&gt;帐户、价位相关支持&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;七. 资源下载&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;直接点击进入资源下载&lt;span style="font-size: 16px; color: #ff0000;"&gt;&lt;a href="http://cid-e942256ec6968b84.photos.live.com/self.aspx/DownloadFiles/Cloud%20Computing%e8%b5%84%e6%ba%90%e5%90%88%e9%9b%86.part1.rar.%e9%87%8d%e5%91%bd%e5%90%8d"&gt;Cloud Computing资源合集.part1.rar&lt;/a&gt;&lt;/span&gt;和&lt;span style="font-size: 16px; color: #ff0000;"&gt;&lt;a href="http://cid-e942256ec6968b84.photos.live.com/self.aspx/DownloadFiles/Cloud%20Computing%e8%b5%84%e6%ba%90%e5%90%88%e9%9b%86.part1.rar.%e9%87%8d%e5%91%bd%e5%90%8d#resId/E942256EC6968B84!173"&gt;Cloud Computing资源合集.part2.rar&lt;/a&gt;&lt;/span&gt;，如果有不能下载或者资源错误现象也希望尽快告知，圣殿骑士好尽快解决。另外关于代码等其他资源，在后面文章也会提供，争取尽快发布，感谢大家的长期支持！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/KnightsWarrior/aggbug/1922647.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/31/1922647.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/KnightsWarrior/archive/2010/12/21/1912244.html</id><title type="text">圣殿骑士WPF企业内训资源下载</title><summary type="text">在前面的一段时间里，我先后发布了几篇WPF企业内训全程实录的文章，由于内容涵盖面广且文章内容较多，所以花了十多个晚上的时间才完成。为了提高阅读质量，我把它拆分成了三篇。之前由于没有找到合适的托管站点，所以一直没有公布资源下载地址。期间有很多朋友发邮件索取此资源，所以在这里就统一发布出来，希望对大家能起到参考和帮助作用！</summary><published>2010-12-20T19:02:00Z</published><updated>2010-12-20T19:02:00Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><link rel="alternate" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/21/1912244.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/21/1912244.html"/><content type="html">&lt;p&gt;在前面的一段时间里，我先后发布了几篇WPF企业内训全程实录的文章，由于内容涵盖面广且文章内容较多，所以花了十多个晚上的时间才完成。为了提高阅读质量，我把它拆分成了三篇：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;上篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/28/1863249.html"&gt;WPF企业内训全程实录（上）&lt;/a&gt;主要讲解历史渊源、概念引入、基本阐述以及WPF的每个知识点。&lt;/p&gt;&lt;p&gt;中篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html"&gt;WPF企业内训全程实录（中）&lt;/a&gt;主要围绕WPF开发模式、WPF团队协作和MVVM框架三个议题进行阐述。&lt;/p&gt;&lt;p&gt;下篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/09/1900832.html"&gt;WPF企业内训全程实录（下）&lt;/a&gt;着重强调结合其他技术共同打造WPF项目、相关性能优化、以及部署与更新问题。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;之前由于没有找到合适的托管站点，所以一直没有公布资源下载地址。期间有很多朋友发邮件索取此资源，所以在这里就统一发布出来，希望对大家能起到参考和帮助作用！&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一，整体概览&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下面这幅图是我在半年前写的一份PPT，因为公司要求用英文表述，所以写的很简约，重点在于结合代码实例进行学习。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-08-32_2.png"&gt;&lt;img title="2010-10-21 17-08-32" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-08-32_thumb.png" border="0" alt="2010-10-21 17-08-32" width="636" height="473" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;因为上面的PPT基本涵盖了WPF的所有重要知识点，所以得为每一个知识点准备相关的Demo，只有这样才能把每个知识点完全讲透，否则只能起到云里雾里、不知所云的效果。如下便是与之配套的Demo截图：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-54-49_2.png"&gt;&lt;img title="2010-10-21 16-54-49" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-54-49_thumb.png" border="0" alt="2010-10-21 16-54-49" width="635" height="582" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;上面的代码包中主要包括：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;WPFBasic:主要讲解WPF的基础概念，涵盖了WPF的方方面面。&lt;/p&gt;&lt;p&gt;WPFPatterns:强调Presentation模式的重要性，主要包括MVC/MVP/MVV以及一些MVVM的框架。&lt;/p&gt;&lt;p&gt;WPFProject:具体项目中如何把握，如何引用之前的技术和经验。&lt;/p&gt;&lt;p&gt;WPFTools:一门技术都有与之相应的开发、管理、协助工具，WPF也不例外。&lt;/p&gt;&lt;p&gt;WPF.PPT:这里是一些简单的介绍，熟悉的可以略过。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;这些Demo主要来源于两个方面，一是自己写了一些；二是改编了网络上的一些素材；如果大家仔细看，可以发现它涵盖了WPF的方方面面，并且对重点和难点也做了区别对待。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二，细节概述&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;WPF的基础知识和框架相关细节，可以用以下这幅图进行简要概括：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/110462c8b8ed_12397/%E5%9C%A3%E6%AE%BF%E9%AA%91%E5%A3%AB_2.png"&gt;&lt;img title="圣殿骑士" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/110462c8b8ed_12397/%E5%9C%A3%E6%AE%BF%E9%AA%91%E5%A3%AB_thumb.png" border="0" alt="圣殿骑士" width="963" height="720" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1，基础概念&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;从2007年开始接触WPF/Silverlight以来，对学习和使用它们有自己的一些浅薄心得，所以首先让我们来看看WPF的各个基础概念：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Application、Window、Navigation、Dispatcher：&lt;/strong&gt;&amp;nbsp;&amp;nbsp; 这里强调一个应用程序的基本组成部分，也就是说它是每一个项目都会遇到的概念! &lt;/li&gt;&lt;li&gt;&lt;strong&gt;框架结构及类继承结构： &lt;/strong&gt;&amp;nbsp; 没有一个宏观的认识作为灯塔，是一件很危险的事情，尤其在做深入研究的时候! &lt;/li&gt;&lt;li&gt;&lt;strong&gt;XAML基础： &lt;/strong&gt;作为WPF的主打概念，它似乎起着不可估量的作用，这也是大家接触WPF的首要概念! &lt;/li&gt;&lt;li&gt;&lt;strong&gt;布局基础： &lt;/strong&gt;&amp;nbsp; 每一个应用程序，如果没有良好的布局，似乎是一个不可想象的事情，在WPF中提供了很多布局元素，同时也提供了很多扩展点! &lt;/li&gt;&lt;li&gt;&lt;strong&gt;WPF的逻辑树和视觉树：&lt;/strong&gt;&amp;nbsp; 它很有作用，但也很头痛，很多错误不得不归功于它! &lt;/li&gt;&lt;li&gt;&lt;strong&gt;依赖属性、路由事件、Binding、命令: &lt;/strong&gt;&amp;nbsp; 核心中的核心，所以我们把它列为重点讲解对象，后面分开阐述！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;资源、样式、模板：&amp;nbsp; &lt;/strong&gt;在很多程度上，它吸取了之前WEB方面的优势，这三个功能在很大程度上提高了复用，同时也规范了项目！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;尺寸缩放、定位与变换元素：&amp;nbsp; &lt;/strong&gt;由于是矢量元素，所以在做各种图形图像操作的时候就比较如鱼得水！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;WPF控件分类介绍与使用技巧： &lt;/strong&gt;微软的每一种UI相关的技术都会伴随强大的控件库，有了它们可以大大减轻开发的难度！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;用户控件和自定义控件开发：&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 和WinForm、ASP.NET一样，开发自定义控件也很简单且类似，这里强调控件的多种分类以及区别对待！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;多语言、皮肤和主题：&amp;nbsp; &lt;/strong&gt;开发一个稍微大型的应用程序都会遇到多语言、皮肤和主题，在WPF中做这些元素也非常简单！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;2D图形：&lt;/strong&gt; WPF创建和使用2D图形主要集中在3个重要的数据类型之上&amp;mdash;&amp;mdash;Drawing，Visual，Shape，所以需要分别进行研究！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;3D图形：&lt;/strong&gt; WPF之所以能带来绚丽且强大的3D图形功能，这得归功于DirectX 技术，并且提供的接口也非常简单，这也使大量动画应用成为可能！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;动画（几种动画的应用）：&lt;/strong&gt;动画无疑是WPF中最吸引人的特色之一，因为一想到动画大家可能都会提到Flash，WPF的确也使动画变得非常简单！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;音频、视频、语音：&lt;/strong&gt; 这里强调的影音相关的功能，由于直接使用DirectX，所以较之前的技术，WPF在显示效果和质量上可谓是质的飞跃！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;文档、打印、报表：&lt;/strong&gt; 强调企业使用的一般功能，在WPF中也得到了很好的实现，这也是大量管理应用程序使用WPF的前提！&amp;nbsp; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Win32、Windows Form以及ActiveX之间的互用性：&lt;/strong&gt;这里强调与其他技术之间互用的兼容性，当然，在WPF中对这些技术提供了很好的支持！ &lt;/li&gt;&lt;li&gt;&lt;strong&gt;部署及更新应用程序：&lt;/strong&gt;和其他客户端技术一样，WPF的部署与自动更新也比较容易，除了传统的三种方法以外，还提供了XBAP的方式，不过已经逐渐被Silverlight所取代。 &lt;/li&gt;&lt;li&gt;&lt;strong&gt;WPF的开发模式：&lt;/strong&gt;其他层可以保持不变，针对Presentation提供了MVC 模式、MVP模式 、MVVM 模式。 &lt;/li&gt;&lt;li&gt;&lt;strong&gt;项目和性能相关：&lt;/strong&gt;WPF在诸多方面都做得很好，除了满足其他客户端技术的功能外，也有自己的独特一面。在性能方面，只要多注意一些细节，就可以超过预期的满足企业的需求。 &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;2，核心概念&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;可以看到上面的基础概念很多，但圣殿骑士认为核心概念主要有以下三点：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;A，依赖属性体系&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-12-08_2.png"&gt;&lt;img title="2010-10-21 17-12-08" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-12-08_thumb.png" border="0" alt="2010-10-21 17-12-08" width="573" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;首先从依赖属性基本介绍讲起，然后过渡到依赖属性的优先级、附加属性、只读依赖属性、依赖属性元数据、依赖属性回调、验证及强制值、依赖属性监听、代码段 (自动生成) 等相关知识，最后我们会模拟一个WPF依赖属性的实现，来看看它里面的内部究竟是怎样处理的，这样就可以帮助我们更好的认清它的本质，出现问题的时候我们也可以根据原理快速找到原因。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;B，事件体系&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-13-00_2.png"&gt;&lt;img title="2010-10-21 17-13-00" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-13-00_thumb.png" border="0" alt="2010-10-21 17-13-00" width="573" height="248" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;讲到WPF事件体系，我们就不得不来一场短暂旅行，由于圣殿骑士之前是从C和C++过渡到.NET和JAVA，所以对Win32程序有一些粗浅的认识，不管是Win32/C++还是MFC/C++，在窗体和事件处理上本质都是用消息（Message）来进行通信，只不过MFC对这些繁杂和通用的代码进行了一些封装，到WinForm和WPF也不例外，无疑底层还是通过这些消息在传递操作。有了 Win32-&amp;gt;MFC-&amp;gt;WinForm-&amp;gt;WPF这种Message的演变之后，我们必须得认识其中的一些核心概念，比如函数指针、委托回调、委托和事件以及现在提的路由事件。由于这些知识太多，所以不进行深究，在这里我们只研究委托和事件的一些知识、委托和事件实现原理、路由事件的原理以及路由事件的使用，通过这么一来回，可能大家会对路由事件有一个比较清晰的认识，最主要的是能在项目中运用自如。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;C，Binding&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-14-01_2.png"&gt;&lt;img title="2010-10-21 17-14-01" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-14-01_thumb.png" border="0" alt="2010-10-21 17-14-01" width="575" height="127" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;前面讲了WPF的依赖属性体系和事件体系，这里再讲第三个核心概念&amp;mdash;&amp;mdash;Binding，WPF 绑定可以在源数据对象和UI 控件间建立联系，实现单向或双向变更通知，以此实现更好的业务逻辑和UI的分离。也正是因为Binding，才使得UI和业务逻辑的耦合隔离变得如此轻松，也正是因为Binding，我们才实现了MVVM模式，所以Binding在这个过程中起到了核心作用。同时我们也要注意到Binding的知识点非常多，所以就分成三大块来讲解。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三，资源下载&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;直接点击进入资源下载&lt;strong&gt;&lt;span style="color: #888888; font-size: 24pt;"&gt; &lt;a href="http://cid-e942256ec6968b84.photos.live.com/self.aspx/DownloadFiles/WPF%e5%85%ac%e5%8f%b8%e5%86%85%e8%ae%ad.rar.%e9%87%8d%e5%91%bd%e5%90%8d"&gt;&lt;span style="color: #ff0000;"&gt;WPF公司内训.rar&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;另外如果有不懂的地方也可以参考之前写的&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/07/09/1774141.html"&gt;WPF 基础到企业应用系列&lt;/a&gt;，最后声明一下，由于圣殿骑士才识浅薄，所以以上观点只是个人的看法与心得，遗漏和错误之处也敬请海涵。怀着技术分享与交流的态度分享出来，希望各位多多指教！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/KnightsWarrior/aggbug/1912244.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/21/1912244.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/KnightsWarrior/archive/2010/12/09/1900832.html</id><title type="text">WPF企业内训全程实录(下)</title><summary type="text">WPF企业内训全程实录由于文章比较长，所以一共拆分成了三篇，上篇WPF企业内训全程实录（上）主要讲了基础，中篇WPF企业内训全程实录(中)主要讲解开发模式、团队协作及应用框架，起着承上启下的作用,主要讲解开发模式、团队协作及应用框架。这篇作为该实录的下篇——终结篇，起着总结的作用，主要讲解其他技术的引用、WPF项目及性能优化、部署与更新等议题。</summary><published>2010-12-08T19:31:00Z</published><updated>2010-12-08T19:31:00Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><link rel="alternate" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/09/1900832.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/09/1900832.html"/><content type="html">&lt;p&gt;&lt;strong&gt;摘要&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;WPF企业内训全程实录由于文章比较长，所以一共拆分成了三篇，上篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/28/1863249.html"&gt;WPF企业内训全程实录（上）&lt;/a&gt;主要讲了基础，中篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html"&gt;WPF企业内训全程实录(中)&lt;/a&gt;主要讲解开发模式、团队协作及应用框架，起着承上启下的作用,主要讲解开发模式、团队协作及应用框架。这篇作为该实录的下篇&amp;mdash;&amp;mdash;终结篇，起着总结的作用，主要讲解其他技术的引用、WPF项目及性能优化、部署与更新等议题。&lt;/p&gt;&lt;p&gt;其实如果大家仔细看目录，可以发现我安排的顺序是首先讲解最基本的概念和基础内容、然后过渡到开发模式及框架、最后结合其他技术和项目实际运用，这也是学习并应用一门技术最好的流程。上篇实际上主要有两个侧重点：一则就是理清脉络&amp;mdash;&amp;mdash;历史渊源、概念引入及基本阐述；二则是讲解WPFBasic&amp;mdash;&amp;mdash;主要细究WPF的每个知识点，基本涵盖了WPF的方方面面；如果大家感兴趣，可以下载代码并进行仔细研究，如果有不懂的地方也可以参考我写的&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/07/09/1774141.html"&gt;WPF 基础到企业应用系列&lt;/a&gt;，这里受篇幅限制，就不详细重复论述。中篇主要围绕WPF开发模式、WPF团队协作和MVVM框架三个议题进行阐述，侧重于为什么要引入MVC/MVP/MVVM模式、从根本上说这些模式是为了解决什么问题、针对不同的开发模式，团队协作会有哪些具体的改变、了解并使用常用的开发框架以及追根索源探究并实现自己的开发框架。下篇则主要总结前面所讲的内容，同时介绍其他技术引入、WPF项目及性能优化与部署与自动更新等概念，其目的在于项目具体应用层次的归纳和总结。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;章节纲要&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;middot; 1.摘要 &lt;/p&gt;&lt;p&gt;&amp;middot; 2.本文提纲 &lt;/p&gt;&lt;p&gt;&amp;middot; 3.简要介绍&lt;/p&gt;&lt;p&gt;&amp;middot; 4.WPF介绍&lt;/p&gt;&lt;p&gt;&amp;middot; 5.WPF基础&lt;/p&gt;&lt;p&gt;&amp;middot; 6.WPF工具&lt;/p&gt;&lt;p&gt;&amp;middot; 7.WPF开发模式&lt;/p&gt;&lt;p&gt;&amp;middot; 8.WPF团队协作&lt;/p&gt;&lt;p&gt;&amp;middot; 9.了解并使用MVVM框架&lt;/p&gt;&lt;p&gt;&amp;middot; 10.自己开发MVVM框架&lt;/p&gt;&lt;p&gt;&amp;middot; 11.其他技术引入&lt;/p&gt;&lt;p&gt;&amp;middot; 12.WPF项目及性能优化&lt;/p&gt;&lt;p&gt;&amp;middot; 13.部署与自动更新&lt;/p&gt;&lt;p&gt;&amp;middot; 14.总结&lt;/p&gt;&lt;p&gt;&amp;middot; 15.详细技术索引&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;十一. 其他技术引入&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;通过WPF 基础到企业应用和前面两篇文章，我们基本讲解了WPF的基础知识和框架相关细节，可以用以下这幅图进行简要概括：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/110462c8b8ed_12397/%E5%9C%A3%E6%AE%BF%E9%AA%91%E5%A3%AB_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="圣殿骑士" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/110462c8b8ed_12397/%E5%9C%A3%E6%AE%BF%E9%AA%91%E5%A3%AB_thumb.png" alt="圣殿骑士" width="963" border="0" height="720" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图1&lt;/p&gt;&lt;p&gt;那么下面我们就来探讨一下WPF和其他技术之间的衔接问题。我们之前做项目都有一个基本流程，大致包括以下几个方面：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1. &lt;strong&gt;基础开发平台与工具：&lt;/strong&gt;在开发一个中、大型项目之前，我们一般都会有技术选型的过程，比如选择Linux + Apache + PHP + MySQL或者Linux + Apache + Java (WebSphere) + Oracle再或者我们最熟悉的Windows Server 2003/2008 + IIS + C#/ASP.NET + SQL Server，当然这些操作系统、WEB服务器、开发语言和数据库在一定条件下可以任意搭配，比如你想用FreeBSD操作系统，你想用Ruby或者Python语言，你想用DB2或者其他数据库等。决定了开发平台和语言之后，就需要有定制的开发工具，比如Java你可能需要Eclipse或者MyEclipse插件，Net你需要强大的Visual Studio或者MONO环境下使用SharpDevelop，PHP你可能需要强大的Zend。简而言之，不管使用什么开发平台，都需要对应的开发套件与开发工具作为辅助。当然我们今天谈的是WPF项目的开发，所以必然我们会首先选择Windows Server 2003/2008 + IIS + C#/ASP.NET + SQL Server这种搭配，也有人会说可以考虑MONO下的WPF开发和部署，不过很遗憾，MONO下针对WPF并没有完全进行实现。&lt;/p&gt;&lt;p&gt;2. &lt;strong&gt;基础框架及资源：&lt;/strong&gt;这里的基础框架是指有没有现成的数据访问框架、通用权限框架、异常和日志处理框架、IOC框架、AOP框架、简单的CMS管理框架、Office文档及PDF交互、报表及打印功能等，因为有了这些以后，开发项目就简单了许多，我们只需要关注具体的业务处理就行，这样可以使项目更加高效且稳定的完成。&lt;/p&gt;&lt;p&gt;3. &lt;strong&gt;逻辑架构：&lt;/strong&gt;逻辑架构往往决定了你如何划分模块以及如何来分层，这个要根据项目的具体情况而定，比如项目的大小、项目模块的多少以及开发方式、开发团队等。往往在这一阶段决定项目的整体架构（三层及多层架构、是否有必要搭建ESB与SOA等）。&lt;/p&gt;&lt;p&gt;4. &lt;strong&gt;物理搭建：&lt;/strong&gt;之前在做WEB应用的时候，会非常重视物理结构及环境的搭建，因为往往它在项目伸缩性、灵活性以及负载方面起着至关重要的作用，其实在决定逻辑架构的时候也必须要考虑到物理架构，我们这里所说的物理架构就是指整个系统或者多个系统在物理环境上的一个部署情况，比如Web Server集群、App Server集群、文件服务器集群、图片服务器集群、流媒体服务器集群、全文检索服务器集群、缓存服务器集群、负载均衡服务器、数据库主从、读写服务器集群等的部署情况。做简单的WPF管理系统也许并不用考虑这么多，如果要做大型的WPF播放器以及大型的WPF应用，这些都得经过仔细的斟酌才行。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5. 框架的选择：&lt;/strong&gt;这个地方是选择整个应用程序的框架，当然选择的前提还必须参考前面的逻辑与物理结构。具体框架包括数据底层处理框架、公共基础框架以及我们前面所提及的诸如MVC/MVP/MVVM模式等。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6. 其他处理：&lt;/strong&gt;面向对象设计与实现、面向方面思想、权限系统设计、缓存体系设计、异常及日志框架设计、分布式及负载均衡等都是我们需要考虑的重点和要点。最后要特别注意团队及项目规范、项目整体开发流程、版本与配置管理、项目开发注意细节等问题。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;十二. WPF项目及性能优化&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一，WPF项目&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1）之前的项目架构&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在讲WPF项目架构与基础结构之前，我们先来看一下之前搭建的WEB应用程序：&lt;/p&gt;&lt;table width="750" border="0" cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/71bba6df47c3_15069/clip_image002_2.jpg"&gt;&lt;img title="clip_image002" src="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/71bba6df47c3_15069/clip_image002_thumb.jpg" alt="clip_image002" width="328" border="0" height="580" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td valign="top" width="548"&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/71bba6df47c3_15069/clip_image004_2.jpg"&gt;&lt;img title="clip_image004" src="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/71bba6df47c3_15069/clip_image004_thumb.jpg" alt="clip_image004" width="409" border="0" height="580" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图2及图3&amp;nbsp; &lt;/p&gt;&lt;p&gt;上面的两幅图具体概念如下：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;01，User Interface即UI层：该层作为数据输入和展示的界面，是与用户交互的有效途径，所以它起着至关重要的作用。往往给人第一印象的就是UI层，在设计的时候也要根据不同的技术或者不同的要求进行斟酌。通常可以把UI分为B/S UI、C/S UI以及WEB服务。在这里就是我们的ASP.NET项目。&lt;/p&gt;&lt;p&gt;02，WebModelCommon：这层作为UI与领域逻辑的中间层，它的充当了桥梁、筛选、过滤和验证的作用。它主要包括两个工程，WebHelper主要提供给UI一些常用操作。WebLogic主要对UI与领域逻辑的数据进行转换、筛选、验证及过滤操作。&lt;/p&gt;&lt;p&gt;03，Business Logic：Domain Model （Data Model Layer）始终是应用程序的核心，必须投入大量精力，按照面向对象的分析和设计 (OOAD) 最佳做法进行设计同时按照OOP进行开发。&lt;/p&gt;&lt;p&gt;04，FrameWork：主要包括数据访问框架、通用权限框架、异常和日志处理框架、IOC框架、AOP框架等基础或常用功能。&lt;/p&gt;&lt;p&gt;05，SOA：这一层不是必须的，根据项目的具体情况进行取舍，如果业务比较复杂且交互项目繁多，那么SOA可以减轻我们的负担；如果业务比较单一且相对简单，就可以直接调用或者使用Web Service/Remoting/WCF作为通信框架即可。在实施SOA的过程中，可以自己使用WCF+WF搭建一个小型轻量级的SOA框架，也可以使用诸如Biztalk等软件。&lt;/p&gt;&lt;p&gt;06，Reference：这里主要包括第三方的框架和组件项目，把这些文件分门别类地集中放在此目录下。&lt;/p&gt;&lt;p&gt;07，Solution Items：项目的规范、流程、重要文件等。&lt;/p&gt;&lt;p&gt;08，Test：这里主要放置测试需要的一些信息，如测试版本、测试文档等。&lt;/p&gt;&lt;p&gt;09，Publish：这个文件夹主要放置发布的版本。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;这个框架能解决大多数问题，但仍有不完善之处。&lt;/p&gt;&lt;p&gt;1）WPF或Silverlight架构&lt;/p&gt;&lt;p&gt;在MVVM模式中，你需要一个为View量身定制的model，那么这个model实际上就是上图ViewModel。ViewModel包含所有UI所需要的接口、属性和命令，这样只需要通过Binding使他们进行关联，就可以使二者之间达到松散耦合，所以这样一来，UI就可以由UI专业人员用 Design和Blend来实现（当然很多效果还是需要用传统的制图软件，所以我们都称这种想法叫理想状态），代码人员也可以专心写他的逻辑和业务代码，所以这样分工和协作变得更轻松、更愉快了。更漂亮的是View完全可以由（Unit/Automatic Test）所取代，所以单元测试也变得相对简单。这对于我们的开发人员和测试人员无疑是一个很好的解脱，同时也提高了系统的可测性、稳定性和维护性。数据绑定系统同时也提供了标准化的方式传输到视图的错误验证和输入验证（但是个人觉得不是很好用，所以我们在实际的项目当中会写一套自己的验证框架）。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/110462c8b8ed_12397/2010-12-8%2022-07-25_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-12-8 22-07-25" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/110462c8b8ed_12397/2010-12-8%2022-07-25_thumb.png" alt="2010-12-8 22-07-25" width="508" border="0" height="535" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图4 &lt;/p&gt;&lt;p&gt;那么根据上面这幅图，我们具体可以得出如下结论：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，首先介绍的是UI层，该层作为数据输入和展示的界面，是与用户交互的有效途径，所以它起着至关重要的作用。往往给人第一印象的就是UI层，在设计的时候也要根据不同的技术或者不同的要求进行斟酌。通常可以把UI分为B/S UI、C/S UI以及WEB服务。&lt;/p&gt;&lt;p&gt;2，ViewModel作为用户界面和业务领域模型的中间层，它往往起着类似于桥梁的作用（UI和领域业务逻辑层之间的桥梁以及耦合的隔离者）。&lt;/p&gt;&lt;p&gt;3，Domain Model （Data Model Layer）始终是应用程序的核心，必须投入大量精力，按照面向对象的分析和设计 (OOAD) 最佳做法进行设计同时按照OOP进行开发。&lt;/p&gt;&lt;p&gt;4，Model、View 和 ViewModel 层之间实施严格的分离，也强调了它们之间是一种松散耦合的关系。&lt;/p&gt;&lt;p&gt;5，每一层或者每一个模块都有自己完整的单元测试，这样即提高了代码质量，同时也增强了稳定性和可维护性。&lt;/p&gt;&lt;p&gt;6，不要为了MVVM而MVVM，不要强调UI端不产生一句后台代码而把所有代码都扔进ViewModel，因为有的操作如果不参与逻辑流程，放在UI端处理会更好，这也符合UI和逻辑隔离的最终原则。&lt;/p&gt;&lt;p&gt;7，数据底层操作层可以随意的搭配，既可以使用传统的方式也可以用ORM的方式，这个根据团队或项目的具体情况作抉择。如传统的存储过程或者脚本、借助于企业库、IBATIS.NET、Nhibernate，Active Record，Entity framework，Linq To Sql，entity framework或者Custom ORM等。&lt;/p&gt;&lt;p&gt;8，Database做为最底层，它对应用程序起着最为关键的作用，项目没有数据就等于失去了最本质的东西，除非这个项目和数据没有太多关联，所以必须投入大量的时间和精力在这一层，这也是数据库库团队存在的必要。最典型的问题包括数据库优化、数据库拆分、分离、同步、数据挖掘以及数据库的备份与复原等。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;前段时间本来要重构一个项目，但由于诸多原因，这个项目没有能够在整体架构上进行调整，这里也把项目整体结构图贴出来，供大家参考&lt;/p&gt;&lt;table width="400" border="0" cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/037a45f96056_9F6C/Arc1_4.jpg"&gt;&lt;img title="Arc1" src="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/037a45f96056_9F6C/Arc1_thumb_1.jpg" alt="Arc1" width="316" border="0" height="492" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;li&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/037a45f96056_9F6C/Arc2_2.jpg"&gt;&lt;img title="Arc2" src="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/037a45f96056_9F6C/Arc2_thumb.jpg" alt="Arc2" width="274" border="0" height="491" /&gt;&lt;/a&gt; &lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图5及图6&amp;nbsp; &lt;/p&gt;&lt;p&gt;上面的两幅图具体概念如下：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;01，UI：该层作为数据输入和展示的界面，是与用户交互的有效途径，所以它起着至关重要的作用。往往给人第一印象的就是UI层，在设计的时候也要根据不同的技术或者不同的要求进行斟酌。通常可以把UI分为B/S UI、C/S UI以及WEB服务。在这里就是我们的WPF项目。&lt;/p&gt;&lt;p&gt;02，ViewModel作为用户界面和业务领域模型的中间层，它往往起着类似于桥梁的作用（UI和领域业务逻辑层之间的桥梁以及耦合的隔离者），这里没有把它从UI里面独立出来，所以它放在UI或者独立出来均可。&lt;/p&gt;&lt;p&gt;03，LogicBusiness：Domain Model （Data Model Layer）始终是应用程序的核心，必须投入大量精力，按照面向对象的分析和设计 (OOAD) 最佳做法进行设计同时按照OOP进行开发。&lt;/p&gt;&lt;p&gt;04，Common：主要包括数据访问框架、通用权限框架、异常和日志处理框架、IOC框架、AOP框架等基础或常用功能。&lt;/p&gt;&lt;p&gt;05，SOA Service：这一层不是必须的，根据项目的具体情况进行取舍，如果业务比较复杂且繁多，那么SOA可以减轻我们的负担；如果业务比较单一且相对简单，就可以直接调用或者使用Web Service/Remoting/WCF作为通信框架即可。在实施SOA的过程中，可以自己使用WCF+WF搭建一个小型轻量级的SOA框架，也可以使用诸如Biztalk等软件。&lt;/p&gt;&lt;p&gt;06，DataAccess：数据库访问组件。&lt;/p&gt;&lt;p&gt;07，AddedDll：这里主要包括第三方的框架和组件项目，把这些文件分门别类地集中放在此目录下。&lt;/p&gt;&lt;p&gt;08，UnitTest：对每层及每个模块进行单元测试。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;从上面WEB与WPF两个项目中可以看到具体的差别与联系：联系在于公共的东西都是不会变的；差别在于WEB与WPF都有各自的特点，所以在处理上也有一些细微的区别！&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二，性能优化&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;关于性能优化，在任何项目都会有所涉及，使用WPF的项目也不例外（或者更甚）。那么针对WPF项目，我们如何来做好性能优化呢？其实这个问题比较大，因为往往某个细节的操作会影响到整个WPF应用程序的性能，所以在做项目的时候一般都会针对这些性能优化操作列一个表（详细说明性能优化点及注意事项）。WPF性能优化就像之前做WEB优化一样，都有一些&amp;ldquo;银弹&amp;rdquo;可供参考，WEB项目有Yahoo团队实践分享&amp;mdash;&amp;mdash;网站性能优化的条黄金守则和业界的一些经验；WPF作为出道不久的技术，主要参考微软提供的性能优化注意事项以及自己的实践经验。本来是想罗列一些性能优化点，无奈由于时间仓促且怕罗列不全面或不正确，所以把它留在以后心情好的时候再续，不然就会起到不能帮助读者反而误导读者的效果。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;十三. 部署与自动更新&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;一个优良的软件都会有自己完整的部署与自动更新流程，C/S应用程序尤其如此，所以如何解决客户端的部署与自动升级问题便是一个非常重要的问题。大家都知道ClickOnce 无疑是微软对Client/Server模式部署的最佳解决方案，但正是因为它的功能特别强大而且又要使用相当简单，所以在产品的封装上就特别严实，基本上就暴露了一些简单的操作接口，这样用户就无法做定制化的操作，所以我们下面主要探讨不使用ClickOnce的操作流程。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一，打包操作&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;关于打包操作，现在市面上有很多的打包工具与代码，但最为常用的要数Installshield和微软自带的打包工具软件，两者在这方面都有不俗的表现，前者强调打包的定制化以及多样性，后者强调易操作及快速性。如果你想要更多漂亮及定制化的操作，可以选择Installshield+脚本的方式；如果你想做一般的效果，那么微软自带的打包工具软件就特别适合；当然这也不是绝对的定律，只是一般情况下的选择，下面我们就主要来讲解微软自带的打包工具软件。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1） 创建安装和部署项目：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1，右键点击当前解决方案&amp;mdash;&amp;gt;Add&amp;mdash;&amp;gt;New Project，在弹出的窗口中选择Other Project Types&amp;mdash;&amp;gt;Setup and Deployment&amp;mdash;&amp;gt;Setup Project；然后输入项目的名字，点击&amp;ldquo;OK&amp;rdquo;按钮。新添加的安装和部署项目就会出现在解决方案列表中。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2） 添加项目输出及制作安装界面：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1，首先把你要安装的项目加进来，也就是加入到应用程序文件夹，由于VS SetUp设置比较简单，你只需要按照操作步骤一步一步设置即可。在完成应用程序文件夹之后设置开始菜单和用户桌面的快捷方式。&lt;/p&gt;&lt;p&gt;2，右键点击安装项目，选择View&amp;mdash;&amp;gt;User Interface可以看到VS SetUp为我们提供的一些默认安装界面，当然你也可以创建、修改或者移除这些窗口，总之你可以定制化你的安装步骤和页面。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3） 注册表问题：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;和前面的操作类似，对于注册表的设置也比较简单，右键点击安装项目，选择View-&amp;gt;Registry即可创建、修改及移除注册表键值。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4） 创建组件注册项目：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1，右击当前解决方案&amp;mdash;&amp;gt;Add&amp;mdash;&amp;gt;New Project，在弹出的窗口中选择 Visual C#&amp;mdash;&amp;gt;Class Library；然后在下方文本框中输入Name，点击&amp;ldquo;OK&amp;rdquo;按钮。新添加的项目会出现在解决方案列表中。&lt;/p&gt;&lt;p&gt;2，右键点击该项目&amp;mdash;&amp;gt;Add&amp;mdash;&amp;gt;New Item，在弹出的窗口中选择Installer Class；在下方文本框中输入名字，点击&amp;ldquo;Add&amp;rdquo;按钮添加文件并关闭窗口。&lt;/p&gt;&lt;p&gt;3，选中刚添加的文件，按F7或者View Code转到代码页，在代码页面添加以下方法：&lt;/p&gt;&lt;span style="color: blue;"&gt;namespace &lt;/span&gt;RegsvrDll&lt;br /&gt;{&lt;br /&gt;    [&lt;span style="color: #2b91af;"&gt;RunInstaller&lt;/span&gt;(&lt;span style="color: blue;"&gt;true&lt;/span&gt;)]&lt;br /&gt;    &lt;span style="color: blue;"&gt;public partial class &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;InstallerReg &lt;/span&gt;: &lt;span style="color: #2b91af;"&gt;Installer&lt;br /&gt;    &lt;/span&gt;{&lt;br /&gt;        &lt;span style="color: blue;"&gt;public &lt;/span&gt;InstallerReg()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue;"&gt;public override void &lt;/span&gt;Install(System.Collections.&lt;span style="color: #2b91af;"&gt;IDictionary &lt;/span&gt;stateSaver)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue;"&gt;base&lt;/span&gt;.Install(stateSaver);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue;"&gt;protected override void &lt;/span&gt;OnAfterInstall(&lt;span style="color: #2b91af;"&gt;IDictionary &lt;/span&gt;savedState)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnAfterInstall(savedState);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: blue;"&gt;string &lt;/span&gt;LogicDir = Context.Parameters[&lt;span style="color: #a31515;"&gt;"LogicDir"&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: green;"&gt;// Close the writer and underlying file.&lt;br /&gt;            // 注册CDO组件&lt;br /&gt;            // /s 关闭注册成功的提示窗口显示,/c退出cmd窗口&lt;br /&gt;            &lt;/span&gt;System.Diagnostics.&lt;span style="color: #2b91af;"&gt;Process&lt;/span&gt;.Start(&lt;span style="color: #a31515;"&gt;"cmd"&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;@"/c regsvr32 " &lt;/span&gt;+ @LogicDir + &lt;span style="color: #a31515;"&gt;@"ComUtilities.dll /s"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: blue;"&gt;string &lt;/span&gt;path = @LogicDir + &lt;span style="color: #a31515;"&gt;@"App.exe"&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;RegistryKey &lt;/span&gt;regWrite = &lt;span style="color: #2b91af;"&gt;Registry&lt;/span&gt;.LocalMachine.CreateSubKey(&lt;span style="color: #a31515;"&gt;"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths"&lt;/span&gt;))&lt;br /&gt;            {&lt;br /&gt;                regWrite.SetValue(&lt;span style="color: #a31515;"&gt;"App.exe"&lt;/span&gt;, path);&lt;br /&gt;                regWrite.Close();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: blue;"&gt;protected override void &lt;/span&gt;OnBeforeInstall(&lt;span style="color: #2b91af;"&gt;IDictionary &lt;/span&gt;savedState)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: blue;"&gt;base&lt;/span&gt;.OnBeforeInstall(savedState);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;p&gt;注意：需要加入using System.Configuration.Install; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;5） 在安装和部署项目中添加要安装的项目和文件：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1， 添加项目：右击项目&amp;mdash;&amp;gt;View&amp;mdash;&amp;gt;File System，在出现的界面中，右击左列的Application Folder&amp;mdash;&amp;gt;Add&amp;mdash;&amp;gt;Project Output，在弹出的窗口中选择相应的Project，然后点击&amp;ldquo;OK&amp;rdquo;按钮。多个项目重复多次。在这里我们假设我们开发的项目为 MainProject，注册组件的项目名称为RegDll，那么我在弹出的窗口中先选择项目MainProject，点击&amp;ldquo;OK&amp;rdquo;后，我在重复添加项目 RegDll。&lt;/p&gt;&lt;p&gt;2，添加文件：右击项目&amp;mdash;&amp;gt;View&amp;mdash;&amp;gt;File System，在出现的界面中，右击左列的Application Folder&amp;mdash;&amp;gt;Add&amp;mdash;&amp;gt;File，在弹出的窗口中选择C:\WINDOWS\system32 \misexec.exe；&lt;/p&gt;&lt;p&gt;3，创 建快捷方式：在右列中选择Primary output from MainProject（Active）,右击 选择Create Shortcut to Primary output from MainProject（Active）,你可以按F2给新添加的快捷方式更名。右击msiexec.exe 选择 Create Shortcut to misexec.exe，你可以按F2将刚生成的快捷方式更名为&amp;ldquo;卸载&amp;rdquo;；&lt;/p&gt;&lt;p&gt;4，创建程序组：右击左列的User&amp;rsquo;s Programs Menu选择 Add&amp;mdash;&amp;gt;Fold，你可以将新创建的文件夹更名，当软件安装完毕后它将出现在程序组中，然后将上一步创建的两个快捷方式拖到新创建的文件夹中。&lt;/p&gt;&lt;p&gt;5，实现&amp;ldquo;卸载&amp;rdquo;的功能：选中安装和部署项目，按F4，复制ProductCode的内容，然后选中&amp;ldquo;卸载&amp;rdquo;快捷方式，按F4，将Arguments 的内容更改为：/x 刚复制的ProductCode的内容。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6） 安装时注册组件问题：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;右击安装和部署项目&amp;mdash;&amp;gt;View&amp;mdash;&amp;gt;Custom Actions，在出现的界面中右击左列的Install&amp;mdash;&amp;gt;Add Custom Action，选择Application Folder中的Primary output from RegDll（Active）。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/VS_8D8/clip_image002_2.jpg"&gt;&lt;img title="clip_image002" src="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/VS_8D8/clip_image002_thumb.jpg" alt="clip_image002" width="524" border="0" height="245" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图7&lt;/p&gt;&lt;p&gt;修改&amp;ldquo;主输出来自RegDll (活动)&amp;rdquo;的CustomActionData属性为 /LogicDir="[TARGETDIR]\"&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/VS_8D8/clip_image004_2.jpg"&gt;&lt;img title="clip_image004" src="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/VS_8D8/clip_image004_thumb.jpg" alt="clip_image004" width="521" border="0" height="279" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图8&lt;/p&gt;&lt;p&gt;7）&lt;strong&gt; 自动检测当前系统中MDAC、.Net Framework版本&lt;/strong&gt;、Windows Installer3.1是否满足版本要求，如果不满足则安装：&lt;/p&gt;&lt;p&gt;右击安装和部署项目选择属性，在弹出的窗口中点击按钮 &amp;ldquo;Prerequisites&amp;rdquo;。选中MDAC2.8、.Net Framework2.0、Windows Installer3.1；然后选中Download prerequisites from the same location as my application 单选按钮，点击&amp;ldquo;OK&amp;rdquo;，再点击&amp;ldquo;OK&amp;rdquo;。&lt;/p&gt;&lt;p&gt;8） &lt;strong&gt;重新编译项目生成项目安装包，这个时候就可以把安装包Host在网上供用户下载。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二，自动更新&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1），简要介绍&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;众所周知，对于一般的软件开发，在开始的时候都会有一个技术选型的阶段，最大的选型就是首先要确定是选择Client/Server模式还是 Browser/Server模式。综合而论：两者各有优劣，在很多方面都不能被对方互相取代，如在适用Internet、维护工作量等方面，B/S比C /S要强很多；但在运行速度、数据安全、人机交互等方面，B/S就远不如C/S那么强大。所以综上所述，凡是C/S的强项，便是B/S的弱项，反之亦然。由于今天讨论的是自动更新组件，所以接下来我们就往这方面细讲，既然C/S模式在运行速度、数据安全、人机交互有这么多的优点，尤其是客户端技术日益发展的今天，如何解决客户端的部署与自动升级问题便是一个非常重要的问题。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2），ClickOnce与自定义之间的权衡&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在前面的摘要中我们简单介绍了自动更新功能的重要性，在这一小节里我们来谈一下为什么不使用微软给我们提供的自动更新组件ClickOnce，大家都知道ClickOnce给我们提供了很多功能：简单说来，ClickOnce 应用程序就是任何使用 ClickOnce 技术发布的 Windows 窗体或控制台应用程序。可以采用三种不同的方法发布 ClickOnce 应用程序：从网页发布、从网络文件共享发布或是从媒体（如 CD-ROM）发布。ClickOnce 应用程序既可以安装在最终用户的计算机上并在本地运行（即使当计算机脱机时也可以运行），也可以仅以联机模式运行，而不在最终用户的计算机上永久安装任何内容。ClickOnce 应用程序可以自行更新；这些应用程序可以在较新版本变为可用时检查较新版本，并自动替换所有更新的文件。开发人员可以指定更新行为；网络管理员也可以控制更新策略，如将更新标记为强制性的。最终用户或管理员还可以对更新进行回滚，使应用程序恢复到早期的版本。&lt;/p&gt;&lt;p&gt;从上面大家可以看出ClickOnce 无疑是微软对Client/Server模式部署的最佳解决方案，但正是因为它的功能特别强大而且又要使用相当简单，所以在产品的封装上就特别严实，基本上就暴露了一些简单的操作接口，这样就无形把一些定制化的操作拒之于门外，比如：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;用户不能自己指定安装路径。 &lt;/li&gt;&lt;li&gt;对自动更新流程不能做定制化的操作。 &lt;/li&gt;&lt;li&gt;对自动更新的UI不能定制化的设计。 &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;正因为这几个原因，所以很多企业都会做一些定制化的组件来实现自动更新的功能,基于此，我们这里也实现了一个非常简单的自动更新组件.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3），自定义更新操作流程&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;其实自动更新的原理很简单，分析起来无非就是简单的几步操作，当然实现方式也是大同小异，这里我们就选一种较简单的方式:&lt;/p&gt;&lt;p&gt;1.启动主程序，主程序里面调用升级程序，升级程序连接到IIS或者FTP。&lt;/p&gt;&lt;p&gt;2.升级程序获取服务器端XML配置文件中新版本程序的更新日期或版本号或文件大小。&lt;/p&gt;&lt;p&gt;3.升级程序获取原有客户端应用程序的最近一次更新日期或版本号或文件大小，然后两者进行比较；如果新版本日期&amp;gt;原有程序的最新日期，则提示用户是否升级；或如果新版本版本号&amp;gt;原有程序的版本号，则提示用户是否升级；再或如果新版本文件大小&amp;gt;原有程序的文件大小，则提示用户是否升级。本文主要采用一般的做法，就是通过版本号来进行对比。&lt;/p&gt;&lt;p&gt;4.如果用户选择升级，则获取下载文件列表；&lt;/p&gt;&lt;p&gt;5.在本地建立与远程IIS或者FTP相应的临时目录，然后下载到这个临时目录文件下；&lt;/p&gt;&lt;p&gt;6.删除旧的主程序，拷贝临时文件夹中的文件到相应的位置；&lt;/p&gt;&lt;p&gt;8.结束升级流程并重新启动主程序。&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;4），自动更新效果图&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;当我们运行主程序（WinForm或者WPF），如果服务器上有最新的版本，就会弹出如下页面进行提示并让用户选择是否更新。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-13%2018-05-02_4.png"&gt;&lt;img title="2010-10-13" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-13%2018-05-02_thumb_1.png" alt="2010-10-13" width="646" border="0" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图9&lt;/p&gt;&lt;p&gt;当用户不需要更新时，可以选择Skip按钮跳过并继续主程序流程，反之则进入如下页面。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-13%2018-05-41_2.png"&gt;&lt;img title="2010-10-13" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-13%2018-05-41_thumb.png" alt="2010-10-13" width="650" border="0" height="402" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图10&lt;/p&gt;&lt;p&gt;在下载的过程中，用户可以选择Cancel停止下载并重新回到主流程。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;十四，总结&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;上篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/28/1863249.html"&gt;WPF企业内训全程实录（上）&lt;/a&gt;主要讲解历史渊源、概念引入、基本阐述以及WPF的每个知识点。中篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html"&gt;WPF企业内训全程实录（中）&lt;/a&gt;主要主要围绕WPF开发模式、WPF团队协作和MVVM框架三个议题进行阐述。下篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html"&gt;WPF企业内训全程实录（下）&lt;/a&gt;将着重强调结合其他技术共同打造WPF项目、相关性能优化、以及部署与更新问题。另外如果有不懂的地方也可以参考之前写的&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/07/09/1774141.html"&gt;WPF 基础到企业应用系列&lt;/a&gt;，最后声明一下，由于圣殿骑士才识浅薄，所以以上观点只是个人的看法与心得，遗漏和错误之处也敬请海涵。怀着技术分享与交流的态度分享出来，希望各位多多指教！&lt;/p&gt;&lt;p&gt;&lt;strong&gt;十五，详细技术索引&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/07/05/1771101.html"&gt;&amp;middot; 1. WPF 基础到企业应用系列1&amp;mdash;&amp;mdash;开篇有益&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/07/06/1771831.html"&gt;&amp;middot; 2. WPF 基础到企业应用系列2&amp;mdash;&amp;mdash;WPF前世今生&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/07/09/1774059.html"&gt;&amp;middot; 3. WPF 基础到企业应用系列3&amp;mdash;&amp;mdash;WPF开发漫谈&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/07/14/1776916.html"&gt;&amp;middot; 4. WPF 基础到企业应用系列4&amp;mdash;&amp;mdash;WPF千年轮回&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/07/23/1783388.html"&gt;&amp;middot; 5. WPF 基础到企业应用系列5&amp;mdash;&amp;mdash;WPF千年轮回 续前缘&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/08/02/1790131.html"&gt;&amp;middot; 6. WPF 基础到企业应用系列6&amp;mdash;&amp;mdash;WPF布局全接触&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/08/27/1809739.html"&gt;&amp;middot; 7. WPF 基础到企业应用系列7&amp;mdash;&amp;mdash;深入剖析依赖属性（核心篇）&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/09/27/1836372.html"&gt;&amp;middot; 8. WPF 基础到企业应用系列8&amp;mdash;&amp;mdash;依赖属性之&amp;ldquo;风云再起&amp;rdquo;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/28/1863249.html"&gt;WPF企业内训全程实录（上）&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html"&gt;WPF企业内训全程实录（中）&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/09/1900832.html"&gt;WPF企业内训全程实录（下）&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/KnightsWarrior/aggbug/1900832.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/12/09/1900832.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/KnightsWarrior/archive/2010/11/30/1892507.html</id><title type="text">参加[2010年度十大杰出IT博客大赛]</title><summary type="text">大赛简介：IT博客作为一种专业性博客，已成为IT发展过程中一个不可或缺的重要角色，广大的IT博主，无私分享最 技术内容，彰显了互联网奉献精神，影响着中国IT界的发展进程。本次大赛，旨在评选2010年度，在推动中国 技术的进步方面做出了杰出贡献的博客。 我的参赛主页：http://2010blog.51cto.com/1792698</summary><published>2010-11-30T15:38:00Z</published><updated>2010-11-30T15:38:00Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><link rel="alternate" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/30/1892507.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/30/1892507.html"/><content type="html">&lt;p&gt;&lt;strong&gt;大赛简介：&lt;/strong&gt;IT博客作为一种专业性博客，已成为IT发展过程中一个不可或缺的重要角色，广大的IT博主，无私分享最 技术内容，彰显了互联网奉献精神，影响着中国IT界的发展进程。本次大赛，旨在评选2010年度，在推动中国 技术的进步方面做出了杰出贡献的博客。 大赛覆盖IT领域中的三大部分：IT Pro、IT Dev、IT Manager。前期网友票选评选50强，后期由IT名企高 业专家组成的专业评委团，从50强中综合评选出&amp;ldquo;2010年度中国十大杰出IT博客&amp;rdquo;。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;主办方：&lt;/strong&gt;51CTO + Sina科技&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;我的参赛主页：&lt;/strong&gt;&lt;a title="http://2010blog.51cto.com/1792698" href="http://2010blog.51cto.com/1792698"&gt;http://2010blog.51cto.com/1792698&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;官网地址&lt;/strong&gt;：&lt;a href="http://2010blog.51cto.com/index.php"&gt;http://2010blog.51cto.com/index.php&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;个人介绍：&lt;/strong&gt;圣殿骑士不才，在编程领域徘徊多年，虽涉猎广泛（C、C++、JAVA、 PHP、.NET、MySql、MSSQL、Oracle），但没有建树,故自嘲&amp;ldquo;老菜鸟&amp;rdquo;。之后几年专注于微软平台技术架构、项目管理和企业解决方案。自认在面向对象及面向服务领域有一定的造诣，熟悉设计模式、TDD、极限编程、领域驱动、架构设计、敏捷开发和项目管理。现主要从事WinForm、 ASP.NET、WPF、WCF、WF、Silverlight 、Biztalk、Windows Azure等云计算方面的项目开发、架构、管理和企业培训工作。博文加上收藏表示转载或收集的他人优秀文章，没加则为原创。如有问题或建议，请多多赐教！    技术和工作之外爱好比较广泛，喜欢历史（尤其喜欢研究历史人物和历史事件），对经济学、心理学和哲学也颇为爱好，梦想能够做自己喜欢做的事、和家人平淡朴实、无忧无虑的生活！ &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;参赛宣言：&lt;/strong&gt;静心研究、拒绝浮躁、谦虚学习、稳扎稳打，踏踏实实地走好每一步！ &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/KnightsWarrior/aggbug/1892507.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/30/1892507.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html</id><title type="text">WPF企业内训全程实录(中)</title><summary type="text">WPF企业内训全程实录由于文章比较长，所以一共拆分成了三篇，上篇WPF企业内训全程实录（上）主要讲了基础，这篇作为该实录的中篇，起着承上启下的作用。其实如果大家仔细看目录，可以发现我安排的顺序是首先讲解最基本的概念和基础内容、然后过渡到开发模式及框架、最后结合其他技术和项目实际运用，这也是学习并应用一门技术最好的流程。上篇实际上主要有两个侧重点：一则就是理清脉络——历史渊源、概念引入及基本阐述；二则是讲解WPFBasic——主要讲解WPF的每个知识点，涵盖了WPF的方方面面；如果大家感兴趣，可以下载代码进行仔细研究，如果有不懂的地方也可以参考我写的WPF 基础到企业应用系列，这里受篇幅限制，就不详细论述。今天的中篇主要围绕WPF开发模式、WPF团队协作和MVVM框架三个议题进行阐述，希望能给大家带来一些参考和帮助。</summary><published>2010-11-01T13:38:00Z</published><updated>2010-11-01T13:38:00Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><link rel="alternate" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html"/><content type="html">&lt;p&gt;&lt;strong&gt;摘要&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;WPF企业内训全程实录由于文章比较长，所以一共拆分成了三篇，上篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/28/1863249.html"&gt;WPF企业内训全程实录（上）&lt;/a&gt;主要讲了基础，这篇作为该实录的中篇，起着承上启下的作用,主要讲解开发模式、团队协作及应用框架。其实如果大家仔细看目录，可以发现我安排的顺序是首先讲解最基本的概念和基础内容、然后过渡到开发模式及框架、最后结合其他技术和项目实际运用，这也是学习并应用一门技术最好的流程。上篇实际上主要有两个侧重点：一则就是理清脉络&amp;mdash;&amp;mdash;历史渊源、概念引入及基本阐述；二则是讲解WPFBasic&amp;mdash;&amp;mdash;主要讲解WPF的每个知识点，涵盖了WPF的方方面面；如果大家感兴趣，可以下载代码进行仔细研究，如果有不懂的地方也可以参考我写的&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/07/09/1774141.html"&gt;WPF 基础到企业应用系列&lt;/a&gt;，这里受篇幅限制，就不详细论述。今天的中篇主要围绕WPF开发模式、WPF团队协作和MVVM框架三个议题进行阐述，希望能给大家带来一些参考和帮助。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;章节纲要&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;middot; 1.摘要 &lt;/p&gt;&lt;p&gt;&amp;middot; 2.本文提纲 &lt;/p&gt;&lt;p&gt;&amp;middot; 3.简要介绍&lt;/p&gt;&lt;p&gt;&amp;middot; 4.WPF介绍&lt;/p&gt;&lt;p&gt;&amp;middot; 5.WPF基础&lt;/p&gt;&lt;p&gt;&amp;middot; 6.WPF工具&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&amp;middot; 7.WPF开发模式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&amp;middot; 8.WPF团队协作&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&amp;middot; 9.了解并使用MVVM框架&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&amp;middot; 10.自己开发MVVM框架&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;middot; 11.其他技术引入&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;middot; 12.WPF项目及性能优化&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;middot; 13.部署与更新&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;middot; 14.总结&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;middot; 15.详细技术索引&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;七. WPF开发模式&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;提到WPF开发模式（这里通常所说的是Presentation模式，其他层的模式不在此列），大家可能会立马想到MVC/MVP/MVVM模式：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，MVC：模型－视图－控制器（Model View Controller)&lt;/p&gt;&lt;p&gt;2，MVP：模型－视图－表现类（Model-View-Presenter） &lt;/p&gt;&lt;p&gt;3，MVVM：模型－视图－视图模型（Model-View-ViewModel）&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;的确，时下流行的就这三种常见的Presentation模式（这三种模式又衍生了很多变种），从根本上说这些模式是为了解决如下的几个问题：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，逻辑与UI紧密耦合，更换UI上的显示往往需要更改很多逻辑代码，正所谓&amp;ldquo;牵一发而动全身&amp;rdquo;。 &lt;/p&gt;&lt;p&gt;2，应用程序状态的维护，主要包括状态 (State) ， 逻辑 (Logic) ，同步 (Synchronization)耦合太紧。 &lt;/p&gt;&lt;p&gt;3，不能使不同的UI共享相同的逻辑（复用问题）。 &lt;/p&gt;&lt;p&gt;4，要测试用户界面效果，你需要做复杂的UI测试。&lt;/p&gt;&lt;p&gt;5，团队协作不能充分发挥，因为耦合太紧的关系。&lt;/p&gt;&lt;p&gt;6，维护比较困难，这也是由于耦合紧密且没有完整的单元测试。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;之前的C/S（WinForm）和B/S（ASP.NET/ASP.NET MVC）我们已经习惯了MVC和MVP模式，现在针对WPF和Silverlight的具体特征&amp;mdash;&amp;mdash;它带来了3D、动画、音频、视频&amp;hellip;&amp;hellip;这导致了UI的变化将更加细节化和可定制化。同时，在技术层面上，WPF和 Silverlight也带来了诸如Binding、 Dependency Property、Routed Events、Command、Attached Behavior（依赖属性体系间接实现）、DataTemplate、ControlTemplate等新特性。我们怎样才能立足于原有的技术框架并把WPF/Silverlight的新特性揉合进去，以应对客户日益复杂且多变的需求呢？那么MVVM模式就是一个不错的选择，详见如下框架图：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/mvvmModel_2_2.jpg"&gt;&lt;img style="display: inline; border-width: 0px;" title="mvvmModel_2" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/mvvmModel_2_thumb.jpg" alt="mvvmModel_2" width="497" border="0" height="524" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图1&lt;/p&gt;&lt;p&gt;在MVVM模式中，你需要一个为View量身定制的model，那么这个model实际上就是上图ViewModel。ViewModel包含所有UI所需要的接口、属性和命令，这样只需要通过Binding使他们进行关联，就可以使二者之间达到松散耦合，所以这样一来，UI就可以由UI专业人员用Design和Blend来实现（当然很多效果还是需要用传统的制图软件，所以我们都称这种想法叫理想状态），代码人员也可以专心写他的逻辑和业务代码，所以这样分工和协作变得更轻松、更愉快了。更漂亮的是View完全可以由（Unit/Automatic Test）所取代，所以单元测试也变得相对简单。这对于我们的开发人员和测试人员无疑是一个很好的解脱，同时也提高了系统的可测性、稳定性和维护性。数据绑定系统同时也提供了标准化的方式传输到视图的错误验证和输入验证（但是个人觉得不是很好用，所以我们在实际的项目当中会写一套自己的验证框架）。 &lt;/p&gt;&lt;p&gt;讲到这里，我们这里不得不引入下面这幅图，我觉得它能阐述一些比较重要问题：&lt;/p&gt;&lt;p&gt;&lt;img title="Figure 1 The Components of an MVVM Application" src="http://i.msdn.microsoft.com/ff798279.McCarter_Figure1%28en-us,MSDN.10%29.png" alt="Figure 1 The Components of an MVVM Application" align="middle" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图2（注：此图引用自&lt;a href="http://msdn.microsoft.com/magazine/ee532098.aspx?sdmr=RobertMcCarter&amp;amp;sdmi=authors"&gt;Robert McCarter&lt;/a&gt;的MVVM一文）&lt;/p&gt;&lt;p&gt;上面的这幅图表达了几个概念：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，Domain Model 始终是应用程序的核心，必须投入大量精力，按照面向对象的分析和设计 (OOAD) 最佳做法进行设计同时按照OOP进行开发。&lt;/p&gt;&lt;p&gt;2，Model、View 和 ViewModel 层之间实施严格的分离，也强调了它们之间是一种松散耦合的关系。&lt;/p&gt;&lt;p&gt;3，每一层或者每一个模块都有自己完整的单元测试，这样即提高了代码质量，同时也增强了稳定性和可维护性。&lt;/p&gt;&lt;p&gt;4，不要为了MVVM而MVVM，不要强调UI端不产生一句后台代码而把所有代码都扔进ViewModel，因为有的操作如果不参与逻辑流程，放在UI端处理会更好，这也符合UI和逻辑隔离的最终原则。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;当然使用这个模式的时候，我们还要注意很多细节，这个是我们必须面对的，比如我们怎么实现View和ViewModel关联、View和ViewModel如何通信、ViewModel与ViewModel如何交互、ViewModel和Model之间的弱关联、怎样用 Attached Behavior实现特定命令操作、怎样弹出UI、怎样实现导航、Validation的自定义设置、异步调用、延迟加载、性能优化、与传统技术的交互等等问题。 &lt;/p&gt;&lt;p&gt;&lt;strong&gt;八. WPF团队协作&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;前面我们讲了WPF的开发模式，针对不同的开发模式，团队协作也会有一些具体的改变，不管是MVC、MVP还是MVVM，无疑都强调的是Presentation，所以我们的域模型和底层操作都不会有所变化，或者严格一点的说是只能影响到服务层/域模型之上的操作！如果不考虑多系统分布式、ESB及SOA体系，就可以分成以下六种角色：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;专业美工人员：整个系统的基调与样式、页面布局图、页面效果图、页面的样式与颜色、常用按钮图标、常用图标图片等等。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;XAML人员：Style，Template，Trigger，Resource用XAML代码书写，另外强调和美工及ViewModel人员的交互与合作。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;ViewModel ：主要封装领域模型暴露的接口，然后提供给View，所以这里强调UI和领域模型的一个适配作用。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;领域模型（核心）：应用程序的核心，必须投入大量精力，按照面向对象的分析和设计 (OOAD) 最佳做法进行设计同时按照OOP进行开发。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;框架+常用功能开发人员：这里就包括MVVM框架的开发、维护以及扩展，同时还包括数据底层访问、日志、异常、常用功能等。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;数据库开发和管理人员：数据库库表的建立及维护、数据库脚本的创建及维护、数据库优化以及日常的数据操作问题。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;当然在开发中，这六种角色也并不是完全分离的，可以根据具体需求进行调整，同时也可以根据项目的功能划分模块，总之选择项目最合适的协作方式就行。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;九. 了解并使用MVVM框架&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1，到底有哪些开源MVVM框架？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;前面介绍了WPF的基本概念和一些相关知识，我们了解到开发WPF应用程序可以使用现成的框架和模式，最为合适的莫过于时下正热的MVVM模式，所以这里我们也列出针对MVVM模式的已有开源框架：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-31%2022-51-52_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-31 22-51-52" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-31%2022-51-52_thumb.png" alt="2010-10-31 22-51-52" width="674" border="0" height="289" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图3&lt;/p&gt;&lt;p&gt;上面除了WPFToolKit和MEF之外都是一些常用的MVVM框架，连带自己开发的一共是八个，所以自己也取了一个响亮的名字&amp;mdash;&amp;mdash;MVVM八大框架！圣殿骑士本人实际项目中只用到了三个框架，之前WPF使用过MVVM Helpers，在Silverlight项目当中用过MVVMLight+MEF，后来就一直使用自己开发的框架，其他框架也研究了很长时间，但都是为了开发MVVM框架借鉴之用。框架虽然众多，但万变不离其宗，通用功能如下：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，Model、View 和 ViewModel之间的关系：View和ViewModel如何关联起来（IOC）以及如何通信（通常采用Message），ViewModel和Model之间的弱关联（通常采用接口或者简单注入）。&lt;/p&gt;&lt;p&gt;2，事件驱动模式在MVVM模式采用Command和Attached Behaviors的形式。&lt;/p&gt;&lt;p&gt;3，属性及ViewModel的NotifyPropertyChanged处理。&lt;/p&gt;&lt;p&gt;4，提供完整的单元测试，这也是保证框架的稳定性和维护性的保证。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;也许有一些朋友会问我为什么要研究这么多框架，其实做项目只需要认真研究并实践其中一个就行，研究它们的原因则主要归功于自己开发MVVM框架的需要。下面就让我们来看一下具体有哪些MVVM的开源框架（具体到每一个框架后面有时间再阐述，一篇文章写得确实很累）：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2，最强大且功能最多的组合框架&amp;mdash;&amp;mdash;Prism&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下载地址：&lt;a title="http://compositewpf.codeplex.com/" href="http://compositewpf.codeplex.com/"&gt;http://compositewpf.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;开发者：微软patterns &amp;amp; practices团队&lt;/p&gt;&lt;p&gt;是否支持Silverlight：是&lt;/p&gt;&lt;p&gt;学习资料：Composite Application Guidance for WPF and Silverlight - May 2010.chm以及Quickstarts和StockTraderRI等。&lt;/p&gt;&lt;p&gt;源码截图如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-6%2023-54-02_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-6 23-54-02" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-6%2023-54-02_thumb.png" alt="2010-10-6 23-54-02" width="436" border="0" height="489" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图4&lt;/p&gt;&lt;p&gt;Prism&amp;mdash;&amp;mdash;之前又叫Composite Application Guidance for WPF and Silverlight，它是构建复杂的基于WPF/Silverlight企业级应用的主流框架。Prism中有几个比较重要的概念：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，BootStrapper：应用程序切入点，继承Prism的UnityContainer或MEF提供的MefUnityContainer，为系统提供一个容器。 &lt;/p&gt;&lt;p&gt;2，Shell：它是一个外壳，通过UI元素和Region布局页面。 它是应用程序的顶级窗口，显示的内容一般就由View来填充，Shell本身并不知道它包含了哪些内容，所以功能则是由各个Module来具体提供。 &lt;/p&gt;&lt;p&gt;3，View：它等同于MVP模式、MVVM模式中的View。可以通过IRegionManager注入到Region中。 &lt;/p&gt;&lt;p&gt;4，Module：可以把一个大项目拆分开来，每一个Module都包含View、数据、模型，主要用于实现复杂业务操作。 &lt;/p&gt;&lt;p&gt;5，IModuleManager：主要用于管理模块加载，可以实现动态加载。 &lt;/p&gt;&lt;p&gt;6，IEventAggregator：事件处理接口，实现订阅和发布模式，这也是MVVM框架的一般做法。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Prism是一个比较庞大的组合框架，4.0引入MEF及功能调整以后变得更加强大了，现在可以说是组合框架和应用框架的统一体，而且是微软团队的力量，所以选它是值得保证的。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3，最强大且功能最多的应用框架&amp;mdash;&amp;mdash;Caliburn&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下载地址：&lt;a title="http://caliburn.codeplex.com/" href="http://caliburn.codeplex.com/"&gt;http://caliburn.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;开发者：&lt;a href="http://robeisenberg.com/Work.aspx"&gt;Rob Eisenberg&lt;/a&gt;&lt;/p&gt;&lt;p&gt;是否支持Silverlight：是&lt;/p&gt;&lt;p&gt;学习资料：我主要参考项目实例、源码、单元测试用例、国外一些博客和社区。&lt;/p&gt;&lt;p&gt;源码截图如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-31%2022-50-51_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-31 22-50-51" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-31%2022-50-51_thumb.png" alt="2010-10-31 22-50-51" width="451" border="0" height="492" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图5&lt;/p&gt;&lt;p&gt;Caliburn中有几个比较重要的概念：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，在Actions基础上的Commands带有很多功能，其中包括多参数、过滤操作以及异步调用。&lt;/p&gt;&lt;p&gt;2，窗体和控件的生命周期事件也处理得比较好（包括activation、deactivation、shutdown等）。&lt;/p&gt;&lt;p&gt;3，不管是整个框架还是基于这个框架的应用程序的可测性都比较好。&lt;/p&gt;&lt;p&gt;4，提供了很多常用功能，这些在项目当中都比较有用。&lt;/p&gt;&lt;p&gt;5，除了支持MVVM模式之外，还很好的支持MVP模式以及其他的一些变种模式。&lt;/p&gt;&lt;p&gt;6，强大的依赖注入框架以及AOP框架，这里可以灵活选用其中一种。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Caliburn是一个非常强大的MVVM应用框架，对很多功能都提供了灵活且多种实现，不论是项目使用还是研究代码，感觉都受益颇多。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4，轻量级且适用的MVVMLight&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下载地址：&lt;a title="http://mvvmlight.codeplex.com/" href="http://mvvmlight.codeplex.com/"&gt;http://mvvmlight.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;开发者：&lt;a href="http://www.galasoft.ch/index.html"&gt;Laurent Bugnion&lt;/a&gt;&lt;/p&gt;&lt;p&gt;是否支持Silverlight：是&lt;/p&gt;&lt;p&gt;学习资料：除了&lt;a href="http://caliburn.codeplex.com/Wiki/View.aspx?title=Table%20Of%20Contents"&gt;online documentation&lt;/a&gt;，我主要参考项目实例、源码、单元测试用例、国外一些博客和社区。另外这三篇文章非常不错，用MVVMLight开发了一个比较完整的Silverlight企业项目&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Part 1 - &lt;a href="http://www.codeproject.com/KB/silverlight/IssueVisionForSilverlight.aspx"&gt;Introduction, Installation, and General Application Design Topics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Part 2 - &lt;a href="http://www.codeproject.com/KB/silverlight/IssueVisionSilverlightPt2.aspx"&gt;MVVM Light Topics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Part 3 - &lt;a href="http://www.codeproject.com/KB/silverlight/IssueVisionSilverlightPt3.aspx"&gt;Custom Authentication, Reset Password and User Maintenance&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;源码截图如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-22-04_2.png"&gt;&lt;img style="display: inline; border: 0px;" title="2010-10-21 16-22-04" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-22-04_thumb.png" alt="2010-10-21 16-22-04" width="451" border="0" height="507" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图6&lt;/p&gt;&lt;p&gt;MVVMLight中有几个比较重要的概念：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，RelayCommand:通过对Command进行封装，使得MVVM模式在WPF和Silverlight上更加容易。你只需要在ViewModel中定义好各个RelayCommand,然后在View中通过Command来绑定ViewModel中定义好的RelayCommand，就可以实现像WinForm、ASP.NET事件一样的效果，只不过这里是解除了UI和逻辑的强耦合。 &lt;/p&gt;&lt;p&gt;2，Messager：MVVMLight中的Messager作用比较大，前面讲了MVVM模式解除了ViewModel和View的强引用，那么它们如何来进行交互呢？就是靠它来让ViewModel和View来进行通信的。一般我们会定义一个静态AppMessages类来作为通用的一个通信类，原理就是发布订阅模式。 &lt;/p&gt;&lt;p&gt;3，EventToCommand：这里就比较类似于附加行为的概念，是在MVVM Light Toolkit V3中开始引入的概念。 &lt;/p&gt;&lt;p&gt;4，ICleanup接口：当显示某个View时，需要先调用Cleanup方法清除数据，这也是由于ViewModel和View的耦合隔离产生的一些必要操作。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;MVVMLight是一个非常好用的MVVM框架，提供了VS和Blend的模板及智能感知。它结合MEF使用真的感觉很轻量级且高效，而且提供了WPF和Silverlight的支持，尤其在Silverlight的支持上比较好，所以一般选择轻量级的Silverlight MVVM模式，它比较被看好。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5，功能齐备且易用的MVVM Helpers&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下载地址：&lt;a title="http://mvvmhelpers.codeplex.com/" href="http://mvvmhelpers.codeplex.com/"&gt;http://mvvmhelpers.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;开发者：&lt;a href="http://www.julmar.com/blog/mark/"&gt;Mark Smith&lt;/a&gt;&lt;/p&gt;&lt;p&gt;是否支持Silverlight：否&lt;/p&gt;&lt;p&gt;学习资料：&lt;a title="http://www.julmar.com/blog/mark/" href="http://www.julmar.com/blog/mark/"&gt;http://www.julmar.com/blog/mark/&lt;/a&gt;以及提供的实例、源码及测试用例。&lt;/p&gt;&lt;p&gt;源码截图如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-25-14_4.png"&gt;&lt;img style="display: inline; border: 0px;" title="2010-10-21 16-25-14" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-25-14_thumb_1.png" alt="2010-10-21 16-25-14" width="446" border="0" height="572" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图7&lt;/p&gt;&lt;p&gt;MVVM Helpers又叫JulMar MVVM Helpers + Behaviors，其中有几个比较重要的概念：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，提供了MVVM模式的基本功能，包括ViewModel、View及Model之间的隔离，另外还提供了一些常用功能。 &lt;/p&gt;&lt;p&gt;2，ViewModel的创建使用标签的形式注入，现在也可以引入MEF。&lt;/p&gt;&lt;p&gt;3，IOC/DI的支持，属性都有验证机制，Wait Cursor的支持，当使用完viewmodel之后能及时释放，这样避免内存泄露。 &lt;/p&gt;&lt;p&gt;4，提供了常用的Attached Behaviors支持。&lt;/p&gt;&lt;p&gt;5，消息机制的引入，避免强引用产生的耦合。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;MVVM Helpers是一个非常适用的MVVM框架，尤其是提供了MVVM常用功能+MEF+Attached Behaviors，所以项目中的问题基本都能解决。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6，功能强大且轻巧的Cinch&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下载地址：&lt;a title="http://cinch.codeplex.com/" href="http://cinch.codeplex.com/"&gt;http://cinch.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;开发者：&lt;a href="http://sachabarber.net"&gt;Sacha Barber&lt;/a&gt;&lt;/p&gt;&lt;p&gt;是否支持Silverlight：否&lt;/p&gt;&lt;p&gt;学习资料：&lt;a title="http://sachabarber.net/" href="http://sachabarber.net/"&gt;http://sachabarber.net/&lt;/a&gt;以及提供的实例、源码及测试用例。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/WPF/CinchII.aspx"&gt;A walkthrough of &lt;strong&gt;Cinch&lt;/strong&gt;, and its internals - Part I&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/WPF/CinchIII.aspx"&gt;A walkthrough of &lt;strong&gt;Cinch&lt;/strong&gt;, and its internals - Part II&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/WPF/CinchIV.aspx"&gt;How to develop ViewModels using &lt;strong&gt;Cinch&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/WPF/CinchV.aspx"&gt;How to Unit test ViewModels using &lt;strong&gt;Cinch&lt;/strong&gt; app, including how to test Background work threads which may run within &lt;strong&gt;Cinch&lt;/strong&gt; ViewModels&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/WPF/CinchVI.aspx"&gt;A Demo app using &lt;strong&gt;Cinch&lt;/strong&gt; &lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;源码截图如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-34-31_2.png"&gt;&lt;img style="display: inline; border: 0px;" title="2010-10-21 16-34-31" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-34-31_thumb.png" alt="2010-10-21 16-34-31" width="466" border="0" height="398" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图8&lt;/p&gt;&lt;p&gt;如果仔细研究其代码，你会发现它和上面讲的MVVM Helpers有很多相似的代码，估计是相互参考了一番:-D。Cinch 中有几个比较重要的概念：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，这个框架在没有MEF出现之前就已经实现了ViewModel和View之间的强引用隔离，它既没有一般IOC的配置，也没有IView来做中转，并且窗体和控件的生命周期事件也处理得比较好，所以在这方面来说是非常不错的。&lt;/p&gt;&lt;p&gt;2，提供了常用的Attached Behaviors支持，另外也提供了一些MVVM常用功能。&lt;/p&gt;&lt;p&gt;3，DI/IOC使用Unity实现，多线程的实现，避免系统出现不可预料的错误。&lt;/p&gt;&lt;p&gt;4，当使用完viewmodel之后能及时释放，这样避免内存泄露，验证机制的加入，常用导航实现。&lt;/p&gt;&lt;p&gt;5，消息机制的引入，避免强引用产生的耦合。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Cinch 是一个非常强大的框架，尤其是它比较着眼整个应用程序的搭建，所以也比较受到青睐。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;7，功能简单且易扩展的MVVMFoundation&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下载地址：&lt;a title="http://mvvmfoundation.codeplex.com/" href="http://mvvmfoundation.codeplex.com/"&gt;http://mvvmfoundation.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;开发者：&lt;a href="http://joshsmithonwpf.wordpress.com/"&gt;Josh Smith&lt;/a&gt;&lt;/p&gt;&lt;p&gt;是否支持Silverlight：否&lt;/p&gt;&lt;p&gt;学习资料：&lt;a title="http://joshsmithonwpf.wordpress.com/" href="http://joshsmithonwpf.wordpress.com/"&gt;http://joshsmithonwpf.wordpress.com/&lt;/a&gt;以及提供的实例、源码及测试用例。&lt;/p&gt;&lt;p&gt;源码截图如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-22-57_2.png"&gt;&lt;img style="display: inline; border: 0px;" title="2010-10-21 16-22-57" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-22-57_thumb.png" alt="2010-10-21 16-22-57" width="461" border="0" height="492" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图9&lt;/p&gt;&lt;p&gt;MVVMFoundation中有几个比较重要的概念：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，Messenger:这里主要用在各种不同的ViewModel之间通信（比如相互关联的ViewModel、主从ViewModel等），当然也可以扩展成ViewModel与View之间进行通信。 &lt;/p&gt;&lt;p&gt;2，ObservableObject：这里相当于ViewModelBase的概念，每一个ViewModel继承自该类，调用完成之后立即释放，防止内存泄露。&lt;/p&gt;&lt;p&gt;3，PropertyObserver：主要是对INotifyPropertyChanged.PropertyChanged进行封装，这样封装可以精简代码，同时可以防止不当操作引起的内存泄露。 &lt;/p&gt;&lt;p&gt;4，RelayCommand接口：封装command的声明，包括execution执行逻辑,可选的can-execute逻辑等。外部只需要实例化并Binding就可以简单使用。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;MVVMFoundation是一个非常简单的MVVM框架，如果你觉得研究源码比较困难，就可以先从这个框架入手，代码简单而且精炼。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;8，附加：支持插件式的依赖注入MEF&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下载地址：&lt;a title="http://mef.codeplex.com/" href="http://mef.codeplex.com/"&gt;http://mef.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;源码截图如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-20-52_2.png"&gt;&lt;img style="display: inline; border: 0px;" title="2010-10-21 16-20-52" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-20-52_thumb.png" alt="2010-10-21 16-20-52" width="464" border="0" height="505" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图10&lt;/p&gt;&lt;p&gt;&lt;strong&gt;9，如何充分利用这些框架&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;上面我们已经介绍了七大MVVM框架+支持插件式的依赖注入MEF，其实另外这三个框架&lt;a href="http://waf.codeplex.com/"&gt;WPF Application Framework (WAF)&lt;/a&gt;、&lt;a href="http://calcium.codeplex.com/"&gt;Calcium&lt;/a&gt;、&lt;a href="http://coremvvm.codeplex.com/"&gt;CoreMVVM&lt;/a&gt;（Basic MVVM framework）也很值得研究，由于时间和精力的关系，针对这三个框架圣殿骑士也没有进行仔细的剖析，只是粗略看了一下基本功能。&lt;/p&gt;&lt;p&gt;其他一些框架诸如&lt;a href="http://wpfonyx.codeplex.com/"&gt;Onyx&lt;/a&gt;、&lt;a href="http://www.orktane.com/Blog/"&gt;nRoute&lt;/a&gt;、&lt;a href="http://nitomvvm.codeplex.com/"&gt;Nito MVVM&lt;/a&gt;、&lt;a href="http://karlshifflett.wordpress.com/"&gt;Ocean&lt;/a&gt;、&lt;a href="http://goldlight.codeplex.com/"&gt;GoodLight&lt;/a&gt;就没有太多关注，有兴趣的朋友也可以选择其中某一个或多个框架作为研究和学习，不过还是推荐研究主流的框架，毕竟这些主流框架的开发团队和成熟度都比较强。&lt;/p&gt;&lt;p&gt;上面看到了这么多MVVM框架，那么我们应该怎么去学习和使用呢？简单来说可以归纳为以下几句话：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1,根据具体的项目选择适合的框架，团队和项目有大有小，所以得根据这些来选择具体的框架，其实终归来说，几个框架功能都比较类似。&lt;/p&gt;&lt;p&gt;2,框架不用研究太多，只要适用于项目就行，尤其是熟练使用并根据其提供的TDD测试代码追溯其原理。&lt;/p&gt;&lt;p&gt;3,框架不是万能的，对于某些应用和功能可以对框架扩展，这也开源最大的好处之一。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;针对框架的研究，自己也总结了几点：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，首先看框架的相关介绍，了解相关的背景、功能、架构图以及其他一些相关信息&amp;mdash;&amp;mdash;认识了解。&lt;/p&gt;&lt;p&gt;2，根据介绍查看并调试框架所提供的实例&amp;mdash;&amp;mdash;熟悉功能。&lt;/p&gt;&lt;p&gt;3，自己写一些相关的项目，主要是熟悉该框架，如果说要急于做项目，后面就可以把框架引入到项目当中&amp;mdash;&amp;mdash;具体使用。&lt;/p&gt;&lt;p&gt;4，根据该框架提供的详细单元测试研究其源码，这也是我最喜欢研究这些开源框架的原因&amp;mdash;&amp;mdash;原理剖析。&lt;/p&gt;&lt;p&gt;5，通过上面的步骤认真分析其原理及细节&amp;mdash;&amp;mdash;准备重现。&lt;/p&gt;&lt;p&gt;6，自己也根据之前的思路重复开发这个框架，最好能用TDD&amp;mdash;&amp;mdash;框架复原捷径。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;上面我们谈了一些开源框架相关知识，下一步我们得自己开发一个MVVM框架，一方面是对知识的总结，另一方面也是对知识的再提炼，同时也能使自己的认识提升到另一个高度，紧接下文。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;十. 自己开发MVVM框架&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;由于之前自己做了一套框架，但是还没有趋于完善，所以暂时不准备共享出来（主要是WPF和Silverlight版本更替比较频繁且没有加入模板及智能感知）。对于开发一套MVVM框架，具体需要做一下几个操作：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，要能解决Model、View和ViewModel之间的强关联，这也是核心功能，尤其是View和ViewModel，不管是使用IOC Container还是MEF都行。&lt;/p&gt;&lt;p&gt;2，命令和附加事件的处理，对Command进行封装，满足多参数、方法过滤、泛型、异步回调等，对附加事件进行封装，使它像使用命令一样简便。&lt;/p&gt;&lt;p&gt;3，由于View和ViewModel是弱关联或者是无关联，如何让它们进行通信？这就需要加入Messenger机制。&lt;/p&gt;&lt;p&gt;4，前面引入了消息机制（一般是静态化处理），如何来管理、实例化、清除消息呢？这里得建立一套消息机制。&lt;/p&gt;&lt;p&gt;5，由于前面采用了弱关联或者无关联，并且引入了消息机制，所以需要对操作有日志记录，否则出了问题无法快速定位及追查原因。&lt;/p&gt;&lt;p&gt;6，如何统一管理ObservableObject、PropertyObserver等这些对象呢？所以得自己建立一套变更体系。&lt;/p&gt;&lt;p&gt;7，对常用功能及操作进行封装，提供一些常用类库以及UI Helper等。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;总之，开发MVVM框架不能求全，只要适合项目就行，也不要想一次就能完善整个框架，在使用时不断根据需求扩展才是明智之举。另外附加三点开发MVVM框架心得：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，充分借鉴其他开源框架，研究各个框架的不足和优势，然后把思想贯穿于自己的框架中，当然有些常用功能代码也可以直接借鉴过来。&lt;/p&gt;&lt;p&gt;2，对于这样一个比较庞大的框架，使用TDD+反复重构无疑会提高开发效率，同时也能提高框架的可维护性和稳定性，这也是团队使用的一个前提。&lt;/p&gt;&lt;p&gt;3，框架会使用一些常用设计模式，有了它们可以让框架更具有扩展性，同时也减少了开发成本、增加了可维护性。比如观察者模式（消息的发布、订阅、触发）、中介者模式（直接通信的类转化为中间类来处理，隔离耦合）、外观模式（提供一个简单的接口出来，在内部进行大量的封装，这样就可以起到易用且功能强大的目的）、装饰模式（原来已经稳定的功能模块，如果在不改变原有结构的基础上进行扩展，无疑这是一个很好的实践）等。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;总结&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;上篇&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/28/1863249.html"&gt;WPF企业内训全程实录（上）&lt;/a&gt;主要讲解历史渊源、概念引入、基本阐述以及WPF的每个知识点。这篇主要主要围绕WPF开发模式、WPF团队协作和MVVM框架三个议题进行阐述。下篇将着重强调结合其他技术共同打造WPF项目、相关性能优化、以及部署与更新问题，所以敬请期待！另外如果有不懂的地方也可以参考之前写的&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/07/09/1774141.html"&gt;WPF 基础到企业应用系列&lt;/a&gt;，最后声明一下，由于圣殿骑士才识浅薄，所以以上观点只是个人的看法与心得，遗漏和错误之处也敬请海涵。怀着技术分享与交流的态度分享出来，希望各位多多指教！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/KnightsWarrior/aggbug/1866641.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/KnightsWarrior/archive/2010/10/28/1863249.html</id><title type="text">WPF企业内训全程实录（上）</title><summary type="text">圣殿骑士由于工作和项目需要，所以对一些技术进行了较为深入的研究，之前在整个公司做过一些技术专场的培训，由于每次时间较短且人员较多的关系，没能讲得很透彻。一直都想以文字的形式把这些培训细节写出来，但是发现进度确实很慢，所以先来几篇宏观的讲解，希望能起到“授人与鱼也授人以渔”的效果。今天我们就来分享一下WPF内训之旅，这篇文章以WPF培训为主线，中间贯穿了一些其他技术和使用心得。其他培训专题诸如“OO到设计模式”、“WCF基础到企业应用“Silverlight基础到企业应用及优化”随后也会奉上，热诚和大家互相学习，如果有讲得不妥之处，也希望大家能够多多指点！</summary><published>2010-10-28T03:08:00Z</published><updated>2010-10-28T03:08:00Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><link rel="alternate" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/28/1863249.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/28/1863249.html"/><content type="html">&lt;p&gt;&lt;strong&gt;一. 摘要&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;圣殿骑士由于工作和项目需要，所以对一些技术进行了较为深入的研究，之前在整个公司做过一些技术专场的培训，由于每次时间较短且人员较多的关系，没能讲得很透彻。一直都想以文字的形式把这些培训细节写出来，但是发现进度确实很慢，所以先来几篇宏观的讲解，希望能起到&amp;ldquo;授人与鱼也授人以渔&amp;rdquo;的效果。今天我们就来分享一下WPF内训之旅，这篇文章以WPF培训为主线，中间贯穿了一些其他技术和使用心得。其他培训专题诸如&amp;ldquo;OO到设计模式&amp;rdquo;、&amp;ldquo;WCF基础到企业应用&amp;ldquo;Silverlight基础到企业应用及优化&amp;rdquo;随后也会奉上，热诚和大家互相学习，如果有讲得不妥之处，也希望大家能够多多指点！&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二. 本文提纲 &lt;/strong&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;middot; 1.摘要 &lt;/p&gt;&lt;p&gt;&amp;middot; 2.本文提纲 &lt;/p&gt;&lt;p&gt;&amp;middot; 3.简要介绍&lt;/p&gt;&lt;p&gt;&amp;middot; 4.WPF介绍&lt;/p&gt;&lt;p&gt;&amp;middot; 5.WPF基础&lt;/p&gt;&lt;p&gt;&amp;middot; 6.WPF工具&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&amp;middot; 7.WPF开发模式&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&amp;middot; 8.WPF团队协作&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&amp;middot; 9.了解并使用MVVM框架&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&amp;middot; 10.自己开发MVVM框架&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;middot; 11.其他技术引入&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;middot; 12.WPF项目及性能优化&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;middot; 13.部署与更新&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;middot; 14.总结&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&amp;middot; 15.详细技术索引&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;三. 简要介绍&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;关于如何做好一个专题的培训，圣殿骑士也有一些自己的看法，我觉得如果想要一个培训起到良好的效果，得注意以下几个方面：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，&lt;strong&gt;了解受众：&lt;/strong&gt;首先要确定培训的受众，他们是直接的受益者，所以你必须得了解他们的知识背景，这样才能合理把要讲的知识插入到他们各自的知识树上去，否则效果就会大打折扣。&lt;/p&gt;&lt;p&gt;2，&lt;strong&gt;来龙去脉：&lt;/strong&gt;不管讲什么技术，首先得介绍这门技术的历史渊源、来龙去脉、市场前景，因为只有介绍了这些，才会使受众仔细聆听且能够跟随你的思路往下走，这也是比较关键的一环。&lt;/p&gt;&lt;p&gt;3，&lt;strong&gt;把握联系：&lt;/strong&gt;我们要讲的这门技术往往不可能单独存在，它或多或少和之前使用的技术有一些联系，所以在讲解过程中适当引入之前的技术会起到很好的效果，并且在项目中，它也不可能单独存在。&lt;/p&gt;&lt;p&gt;4，&lt;strong&gt;大道至简：&lt;/strong&gt;必须从基础讲起，从一个&amp;rdquo;Hello World&amp;ldquo;讲起，因为只有用大众化的思维来阐述问题，才会引起大众的共鸣，这同时也体现了一些原则，比如大道至简、深入浅出、先易后难。之后就开始不断深入浅出的讲解各知识点细节，最好以理论+Demo的形式，这样收到的效果才会达到或超过预期。&lt;/p&gt;&lt;p&gt;5，&lt;strong&gt;工具使用：&lt;/strong&gt;对于一门技术，或多或少都有适合它的工具，这些工具不仅能提高开发效率，同时也是更好深入学习该技术的一个前提，所以合理使用工具也是一个比较重要的方面。&lt;/p&gt;&lt;p&gt;6，&lt;strong&gt;真实项目：&lt;/strong&gt;前面讲了来龙去脉，讲了基础知识以及与其他技术的区别和联系，同时也讲了开发工具，那么这个时候就需要引入最重要的关注点&amp;mdash;&amp;mdash;如何把之前讲过的各个方面关联起来，让它们作用在真实项目当中，一般最容易接受的当属简单页面+CRUD操作。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;下面这幅图是我在半年前写的一份PPT，因为公司要求用英文表述，所以写的很简约，这也怪圣殿骑士英文不好:-D，表达不像中文那样灵活自如，不过大家可以将就看一下大纲（PPT和代码在后面的文章中提供下载，暂时还没找到提供下载的地方）：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-08-32_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-21 17-08-32" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-08-32_thumb.png" alt="2010-10-21 17-08-32" width="636" border="0" height="473" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;因为上面的PPT基本涵盖了WPF的所有重要知识点，所以得为每一个知识点准备相关的Demo，只有这样才能把每个知识点完全讲透，否则只能起到云里雾里、不知所云的效果。如下便是与之配套的Demo截图：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-54-49_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-21 16-54-49" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2016-54-49_thumb.png" alt="2010-10-21 16-54-49" width="635" border="0" height="582" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;上面的代码包中主要包括：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;WPFBasic:主要讲解WPF的基础概念，涵盖了WPF的方方面面。&lt;/p&gt;&lt;p&gt;WPFPatterns:强调Presentation模式的重要性，主要包括MVC/MVP/MVV以及一些MVVM的框架。&lt;/p&gt;&lt;p&gt;WPFProject:具体项目中如何把握，如何引用之前的技术和经验。&lt;/p&gt;&lt;p&gt;WPFTools:一门技术都有与之相应的开发、管理、协助工具，WPF也不例外。&lt;/p&gt;&lt;p&gt;WPF.PPT:这里是一些简单的介绍，熟悉的可以略过。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;这些Demo主要来源于两个方面，一是自己写了一些；二是改编了网络上的一些素材；如果大家仔细看，可以发现它涵盖了WPF的方方面面，并且对重点和难点也做了区别对待。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;四. WPF介绍&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1，概念引入&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px;" src="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/3cfdd94adeea_E606/netframwork_2.png" alt="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/3cfdd94adeea_E606/netframwork_2.png" width="205" align="left" height="216" /&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;Windows APIWindows Presentation Foundation (WPF) 是新一代显示系统，用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。使用 WPF，您可以创建广泛的独立应用程序以及浏览器承载的应用程序。 WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎（这样就可以保证图像和影像具有高清晰度），旨在利用现代图形硬件的优势。WPF 通过一整套应用程序开发功能扩展了这个核心，这些功能包括可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF 最先包含在如下图的 Microsoft .NET Framework 3.0中，它使您能够生成融入了 .NET Framework 类库的其他元素的应用程序（因为WPF包含在.NET Framework 3.0 里面，所以我们这里不列出3.5和4.0的框架图）。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;2，历史渊源&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;微软在1983年春季就宣布开始研究开发Windows，到现在已经有27年的历史，这27年来，微软官方主力推行的编程语言与API有四个主要阶段：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;p&gt;&lt;strong&gt;1983～1991年：&lt;/strong&gt;C搭配Windows API。当时的程序员是很少的，并且开发一个项目也比较的不容易。 &lt;/p&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;1992～2001年：&lt;/strong&gt;这段时期C++搭配MFC库。在历史上MFC是最多人用的Windows编程方法。但此后MFC技术也逐渐退出了历史的舞台。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;2002～2006年：（&lt;/strong&gt;C#、VB以及其他语言）+Windows Form框架。这段期间IT技术的焦点是在Web上，所以虽然大家都在用.NET，但真正的主角是ASP.NET，而不是Windows Forms。Windows Forms还没等熬出头，WPF就出现了。Windows Forms注定会是历史中&amp;ldquo;最少人使用的微软开发技术&amp;rdquo;。Windows Forms其实是不错的技术，在很多方面都做得挺不错，比如在UI上、图形编程上、开发效率上、稳定性上都做得很让人敬佩，但是我们最后看到的结果却是大家没有引起足够的重视，很多人更偏向于用Delphi和MFC，对Windows Forms却视而不见，所以造成的最后结果就是Windows Forms生不逢时。 &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;2007～现在 ：&lt;/strong&gt;2007年1月30日，Windows Vista正式全球同步发布。它之所以能实现那么绚丽的效果，最关键的一点就是其内在也使用了Windows Presentation Foundation（WPF）类似的技术，所以带来的震撼视觉效果和用户体验使Vista的效果如此绚丽，虽然Vista在后来最终成为了一个败笔，但它为 Windows 7打下了坚实的继承。后台语言（C#、VB以及其他语言）+XAML构成的WPF。你可能觉得很奇怪，微软为何释出两个作用相似，却不同且不相容的.NET API。因为时代的改进，用户对视觉感受需求不断提高。因为WPF支持硬件加速、精确颜色、浮点坐标、动画实现、三维、视频感受等要求提高。而传统的 Winform 是到不到这些效果的。 &lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;3，技术更替&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px;" src="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/3cfdd94adeea_E606/image_12.png" alt="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/3cfdd94adeea_E606/image_12.png" width="265" align="left" height="247" /&gt;&lt;/p&gt;&lt;p&gt;旧的事物迟早会退出历史舞台，新的生命会经过曲折的里程登上王座。从图像界面的出现那一刻起，用户界面（UI）就进入了一个特殊的历史时期。在随后几年里，出现了很多具有历史意义的界面风格。现在，经典的Windows窗口风格已经存在了10多年，即使是深受用户喜爱的Windows XP风格也已出现五年有余。无疑大家与我一样，期待着全新视觉界面的出现。另一方面，当今计算机处理芯片飞速发展，特别是显示芯片，显示卡几乎成为了一台微型的计算机。但是，其强大的处理能力却没有得到充分的应用。目前，显示卡GPU（Graphics Processing Unit）的处理能力大多只应用在游戏和多媒体领域。为了给用户提供最强的体验，满足不断提高的用户视觉需求，Windows Vista引入了全新的图形子系统&amp;mdash;&amp;mdash;WPF。她能充分利用显示卡的处理能力提供给用户最绚的视觉效果。&lt;/p&gt;&lt;p&gt;在Windows Vista出现之前，Windows平台的图形系统主要有：GDI、GDI+、Direct3D。其中，GDI的应用领域最为广泛。GDI图形系统已经形成了很多年并且已经逐渐形成了自己的一套开发体系。它提供2D图形处理、文本处理，以及有限的图像处理功能。虽然在一些显示卡上支持部分的GDI加速，但是其效果与现在的Direct3D相比还是很弱小。GDI+开始出现是在2001年，它引入了2D图形的反走样、浮点数坐标、渐变以及单个象素的 Alpha支持。它几乎支持所有的常用图像格式。但是，GDI+没有任何加速功能（全部是用软件实现）。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4，核心框架&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px;" src="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/3cfdd94adeea_E606/image_10.png" alt="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/3cfdd94adeea_E606/image_10.png" width="288" align="right" height="293" /&gt;&lt;/p&gt;&lt;p&gt;如右图，在Windows Vista和Windows 7中，GDI、GDI+和WPF并行存在。但是，WPF所有的操作都不依赖于GDI和GDI+，而是间接依赖于强大的Direct3D。右图中的标示为暗红色的是WPF的三大核心组件，其中milcore组件，它的职责是完成与Direct3D的交互。并且出于效率和安全考虑，milcore由非托管代码实现。WPF 中的所有显示是通过 DirectX 引擎完成的，可实现高效的硬件和软件呈现。WPF 还要求对内存和执行进行精确控制。milcore 中的组合引擎受性能影响关系大，需要放弃 CLR 的许多优点来提高性能。&lt;/p&gt;&lt;p&gt;WPF的两大核心组件PresentationFramework和PresentationCore都位于通用语言运行库（CLR）之上。那么就可以看出，WPF的大部分代码都是以托管形式存在的。这两大组件提供了WPF项目需要的函数库和功能库，由于是以托管的形式存在，所以也避免了我们直接操作底层和出现诸如内存泄露的可能性。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5，功能介绍&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px;" src="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/3cfdd94adeea_E606/image_2.png" alt="http://images.cnblogs.com/cnblogs_com/zenghongliang/WindowsLiveWriter/3cfdd94adeea_E606/image_2.png" width="675" height="388" /&gt;&lt;/p&gt;&lt;p&gt;正如上面的这幅图，可以看出一共分成了五大块（Core Presentation、User Interface Services、Base Services、Document Servies和XPS Viewer）：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Core Presentation：&lt;/strong&gt;包含了所有的图形效果，如图形、2D图形、3D图形、文本、音频、视频和显示效果。同时还包括强大的动画效果，动画可以应用前面的所有元素。最下面的那个就是视觉基本元素。 &lt;/li&gt;&lt;li&gt;&lt;strong&gt;User Interface Services：&lt;/strong&gt;包含了Application Services(应用程序服务)、Deployment Services（部署服务）、Controls（控件库）、Layout(布局)和Data Binding(数据绑定). &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Base Services：&lt;/strong&gt;提供了XAML支持、Accessibility（提高开发效率）、Input&amp;amp;Events(输入和事件的支持)、Property       &lt;br /&gt;System(属性系统)。 &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Document Servies和XPS Viewer&lt;/strong&gt;则提供了基本的打印和表报服务，可以通过这些组件实现自定义的打印和显示效果。 &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;基于上面的特性以及我们使用的情况可以总结出：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在输入方面：WPF支持键盘、鼠标、手写笔、触摸屏，蓝牙录入、视频扑捉等，所以基本没有任何限制，在和外部设备的交互上：有驱动、COM、Win32或通信协议支持的任何设备。打印和报表方面：可访问打印对话框、打印队列、打印窗体、控件以及很多可选操作，同时对报表也支持得很好。同时支持流文档和固定文档，对命令的支持以及对文件的无限制访问，最后尤其在动画、图形图像、3D、影像的支持相当好（其他技术是很难做到的），所以WPF除了在性能方面存在着缺陷以外，其他方面可以说是做得非常优秀，同时我们有信心相信微软会在这方面做得更好！&lt;/p&gt;&lt;p&gt;&lt;strong&gt;五. WPF基础及核心概念&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1，基础概念&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;从2007年开始接触WPF/Silverlight以来，对学习和使用它们有自己的一些浅薄心得，所以首先让我们来看看WPF的各个基础概念：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Application、Window、Navigation、Dispatcher：&lt;/strong&gt;&amp;nbsp;&amp;nbsp; 这里强调一个应用程序的基本组成部分，也就是说它是每一个项目都会遇到的概念!&lt;/li&gt;&lt;li&gt;&lt;strong&gt;框架结构及类继承结构：&amp;nbsp;&lt;/strong&gt;&amp;nbsp; 没有一个宏观的认识作为灯塔，是一件很危险的事情，尤其在做深入研究的时候!&lt;/li&gt;&lt;li&gt;&lt;strong&gt;XAML基础：&amp;nbsp;&lt;/strong&gt; 作为WPF的主打概念，它似乎起着不可估量的作用，这也是大家接触WPF的首要概念!&lt;/li&gt;&lt;li&gt;&lt;strong&gt;布局基础：&amp;nbsp;&lt;/strong&gt;&amp;nbsp; 每一个应用程序，如果没有良好的布局，似乎是一个不可想象的事情，在WPF中提供了很多布局元素，同时也提供了很多扩展点!&lt;/li&gt;&lt;li&gt;&lt;strong&gt;WPF的逻辑树和视觉树：&lt;/strong&gt;&amp;nbsp; 它很有作用，但也很头痛，很多错误不得不归功于它!&lt;/li&gt;&lt;li&gt;&lt;strong&gt;依赖属性、路由事件、Binding、命令:&amp;nbsp;&lt;/strong&gt;&amp;nbsp; 核心中的核心，所以我们把它列为重点讲解对象，后面分开阐述！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;资源、样式、模板：&amp;nbsp;&amp;nbsp;&lt;/strong&gt; 在很多程度上，它吸取了之前WEB方面的优势，这三个功能在很大程度上提高了复用，同时也规范了项目！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;尺寸缩放、定位与变换元素：&amp;nbsp;&amp;nbsp;&lt;/strong&gt; 由于是矢量元素，所以在做各种图形图像操作的时候就比较如鱼得水！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;WPF控件分类介绍与使用技巧： &lt;/strong&gt;微软的每一种UI相关的技术都会伴随强大的控件库，有了它们可以大大减轻开发的难度！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;用户控件和自定义控件开发：&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 和WinForm、ASP.NET一样，开发自定义控件也很简单且类似，这里强调控件的多种分类以及区别对待！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;多语言、皮肤和主题：&amp;nbsp;&amp;nbsp;&lt;/strong&gt; 开发一个稍微大型的应用程序都会遇到多语言、皮肤和主题，在WPF中做这些元素也非常简单！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;2D图形：&lt;/strong&gt; WPF创建和使用2D图形主要集中在3个重要的数据类型之上&amp;mdash;&amp;mdash;Drawing，Visual，Shape，所以需要分别进行研究！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;3D图形：&lt;/strong&gt; WPF之所以能带来绚丽且强大的3D图形功能，这得归功于DirectX 技术，并且提供的接口也非常简单，这也使大量动画应用成为可能！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;动画（几种动画的应用）：&lt;/strong&gt;动画无疑是WPF中最吸引人的特色之一，因为一想到动画大家可能都会提到Flash，WPF的确也使动画变得非常简单！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;音频、视频、语音：&lt;/strong&gt; 这里强调的影音相关的功能，由于直接使用DirectX，所以较之前的技术，WPF在显示效果和质量上可谓是质的飞跃！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;文档、打印、报表：&lt;/strong&gt; 强调企业使用的一般功能，在WPF中也得到了很好的实现，这也是大量管理应用程序使用WPF的前提！&amp;nbsp; &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Win32、Windows Form以及ActiveX之间的互用性：&lt;/strong&gt;这里强调与其他技术之间互用的兼容性，当然，在WPF中对这些技术提供了很好的支持！&lt;/li&gt;&lt;li&gt;&lt;strong&gt;部署及更新应用程序：&lt;/strong&gt;和其他客户端技术一样，WPF的部署与自动更新也比较容易，除了传统的三种方法以外，还提供了XBAP的方式，不过已经逐渐被Silverlight所取代。&lt;/li&gt;&lt;li&gt;&lt;strong&gt;WPF的开发模式：&lt;/strong&gt;其他层可以保持不变，针对Presentation提供了MVC 模式、MVP模式 、MVVM 模式。&lt;/li&gt;&lt;li&gt;&lt;strong&gt;项目和性能相关：&lt;/strong&gt;WPF在诸多方面都做得很好，除了满足其他客户端技术的功能外，也有自己的独特一面。在性能方面，只要多注意一些细节，就可以超过预期的满足企业的需求。&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;2，核心概念&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;可以看到上面的基础概念很多，但圣殿骑士认为核心概念主要有以下三点：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;A，依赖属性体系&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-12-08_2.png"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px; border-width: 0px;" title="2010-10-21 17-12-08" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-12-08_thumb.png" alt="2010-10-21 17-12-08" width="573" border="0" height="302" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;首先从依赖属性基本介绍讲起，然后过渡到依赖属性的优先级、附加属性、只读依赖属性、依赖属性元数据、依赖属性回调、验证及强制值、依赖属性监听、代码段 (自动生成) 等相关知识，最后我们会模拟一个WPF依赖属性的实现，来看看它里面的内部究竟是怎样处理的，这样就可以帮助我们更好的认清它的本质，出现问题的时候我们也可以根据原理快速找到原因。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;B，事件体系&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-13-00_2.png"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px; border-width: 0px;" title="2010-10-21 17-13-00" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-13-00_thumb.png" alt="2010-10-21 17-13-00" width="573" border="0" height="248" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;讲到WPF事件体系，我们就不得不来一场短暂旅行，由于圣殿骑士之前是从C和C++过渡到.NET和JAVA，所以对Win32程序有一些粗浅的认识，不管是Win32/C++还是MFC/C++，在窗体和事件处理上本质都是用消息（Message）来进行通信，只不过MFC对这些繁杂和通用的代码进行了一些封装，到WinForm和WPF也不例外，无疑底层还是通过这些消息在传递操作。有了Win32-&amp;gt;MFC-&amp;gt;WinForm-&amp;gt;WPF这种Message的演变之后，我们必须得认识其中的一些核心概念，比如函数指针、委托回调、委托和事件以及现在提的路由事件。由于这些知识太多，所以不进行深究，在这里我们只研究委托和事件的一些知识、委托和事件实现原理、路由事件的原理以及路由事件的使用，通过这么一来回，可能大家会对路由事件有一个比较清晰的认识，最主要的是能在项目中运用自如。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;C，Binding&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-14-01_2.png"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px; border-width: 0px;" title="2010-10-21 17-14-01" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/f48594f12231_11135/2010-10-21%2017-14-01_thumb.png" alt="2010-10-21 17-14-01" width="575" border="0" height="127" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;前面讲了WPF的依赖属性体系和事件体系，这里再讲第三个核心概念&amp;mdash;&amp;mdash;Binding，WPF 绑定可以在源数据对象和UI 控件间建立联系，实现单向或双向变更通知，以此实现更好的业务逻辑和UI的分离。也正是因为Binding，才使得UI和业务逻辑的耦合隔离变得如此轻松，也正是因为Binding，我们才实现了MVVM模式，所以Binding在这个过程中起到了核心作用。同时我们也要注意到Binding的知识点非常多，所以就分成三大块来讲解。&lt;/p&gt;&lt;p&gt;大家可能会说为什么三大核心不包含其他概念？如为什么没有Command？为什么没有动画？为什么没有3D？其实这些技术都是比较靠上层的一些技术细节，在最底层还是依赖于上面的三大核心功能，具体本文就不再详细阐述了，后面的文章再续。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;六. WPF工具&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;WPF工具主要分为开发工具和其他帮助工具，当然这里只是列出了使用频率最高且常见的一些工具。&lt;/p&gt;&lt;p&gt;开发工具：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;Visual Studio 2005/2008/2010&lt;/p&gt;&lt;p&gt;Expression Design 2/3/4&lt;/p&gt;&lt;p&gt;Expression Blend 2/3/4&lt;/p&gt;&lt;p&gt;Expression Encoder 2/3/4&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;其他常用工具：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;KaXaml&lt;/p&gt;&lt;p&gt;WPF Inspector&lt;/p&gt;&lt;p&gt;Snoop&lt;/p&gt;&lt;p&gt;XAML Power Toys&lt;/p&gt;&lt;p&gt;WPF Performance Suite&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;基本上就用到了以上的一些开发和帮助工具，具体使用由于受篇幅所限，这里就不做过多介绍，后面会开单独的篇幅来详述。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;本篇小结&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;由于&amp;ldquo;WPF企业内训全程实录&amp;rdquo;这篇文章花了十多个晚上的时间，所以内容涵盖面广且文章较长。为了提高阅读质量，我把它拆分成了三篇，今天先发布内容较少且较简单的上篇，下周一、二会接着发布其余两篇，敬请期待！最后声明一下，由于圣殿骑士才识浅薄，所以以上观点只是个人的看法与心得，遗漏和错误之处也敬请海涵。怀着技术分享与交流的态度分享出来，希望各位多多指教！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/KnightsWarrior/aggbug/1863249.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/28/1863249.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/KnightsWarrior/archive/2010/10/21/1857836.html</id><title type="text">人生感悟与心得</title><summary type="text">圣殿骑士自从入住博客园和51CTO写技术博客以来收获颇多，在这个过程中既对技术有了新的收获，同时也认识了很多朋友。之前由于工作和项目需要，所以对一些技术进行了较为深入的研究，在整个公司做过一些技术专场的培训（如“OO到设计模式”、“WCF基础到企业应用”、“WPF基础到企业应用及优化”、 “Silverlight基础到企业应用及优化”等），所以在写博客的时候也比较循规蹈矩，大家可以看到WPF系列基本就是按照培训的格式书写，只是比培训说得要深入一些。</summary><published>2010-10-21T13:53:00Z</published><updated>2010-10-21T13:53:00Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><link rel="alternate" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/21/1857836.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/21/1857836.html"/><content type="html">&lt;p&gt;圣殿骑士自从入住博客园和51CTO写技术博客以来收获颇多，在这个过程中既对技术有了新的收获，同时也认识了很多朋友。之前由于工作和项目需要，所以对一些技术进行了较为深入的研究，在整个公司做过一些技术专场的培训（如&amp;ldquo;OO到设计模式&amp;rdquo;、&amp;ldquo;WCF基础到企业应用&amp;rdquo;、&amp;ldquo;WPF基础到企业应用及优化&amp;rdquo;、 &amp;ldquo;Silverlight基础到企业应用及优化&amp;rdquo;等），所以在写博客的时候也比较循规蹈矩，大家可以看到WPF系列基本就是按照培训的格式书写，只是比培训说得要深入一些。虽然写技术博客在某种程度上弥补了培训的不足，但同时也是一项非常耗费时间和精力的事情，有很长一段时间都在断断续续的延续这份激情。&lt;/p&gt;&lt;p&gt;总结一下，最近文章进度缓慢最主要原因应该归功于以下两个方面：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1，自己经不起诱惑，在忙着为出版社写书，不过写了很久才写三章，综合发现写书是一个良心活。要想写得一般比较容易；要想写得深入浅出确实需要花费很大的时间和精力；经过慎重思考，还是决定先缓一缓写书的进度，继续为大家书写一些技术相关的文章，分享一些自己浅薄的心得，希望能在帮助他人的同时也能提高自己！&lt;/p&gt;&lt;p&gt;2，由于自己比较懒，没事的时候也会享受一下生活，毕竟除了技术以外，身边还有很多重要的事情需要我们去关注。人生应该在忙碌的时候懂得放松，在压抑的时候应该让自己多一些期盼！生活本来就是让自己过得快乐，没有必要活的那么累，人生本来就很短暂，这个世界的快节奏让我们变得越来越累，越来越机器化，周而复始的工作，每天如一的动作都会让我们感觉到厌倦，也许生活本可以过得开心和愉悦才是！&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;回到正题，由于之前在编程领域也徘徊了一些时间，所以对其他技术平台也有一些涉猎，但始终没有建树,也许是天资愚笨，也许是太懒。之后几年才把自己定格并专注于微软平台。自认在面向对象及面向服务领域有一定的造诣，熟悉设计模式、TDD、极限编程、领域驱动、架构设计、敏捷开发和项目管理。对WinForm、 ASP.NET、WPF、WCF、WF、Silverlight 、Biztalk、Windows Azure及云计算方面有一定的看法和见解，于是总结了大型架构的45点重要事项，本来是想把它写细一点，但越写越庞大，所以一直没有把这几篇文章发布出来，今天先精简一个思路，文章后面有空再续，希望对大家能有所帮助。&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1.思想决定论      &lt;br /&gt;2.市场与前景       &lt;br /&gt;3.需求压倒一切       &lt;br /&gt;5.规范、流程与敏捷       &lt;br /&gt;6.基础开发平台与工具       &lt;br /&gt;7.基础框架及资源       &lt;br /&gt;8.逻辑架构       &lt;br /&gt;9.物理搭建       &lt;br /&gt;10.选择具体的技术       &lt;br /&gt;11.快速搭建平台       &lt;br /&gt;12.构建控件开发库       &lt;br /&gt;13.框架及源码剖析       &lt;br /&gt;14.UI处理       &lt;br /&gt;15.面向对象设计与实现       &lt;br /&gt;16.面向方面思想       &lt;br /&gt;17.耦合隔离       &lt;br /&gt;18.通信编程       &lt;br /&gt;19.企业ESB与SOA       &lt;br /&gt;20.SSO设计       &lt;br /&gt;21.缓存体系设计       &lt;br /&gt;22.多线程与并行处理       &lt;br /&gt;23.同步与异步构架       &lt;br /&gt;24.权限系统设计       &lt;br /&gt;25.异常及日志框架设计       &lt;br /&gt;26.传统设计与ORM取舍       &lt;br /&gt;27.自定义控件开发       &lt;br /&gt;28.数据结构、算法与优化       &lt;br /&gt;29.数据库与文件       &lt;br /&gt;30.数据分析与处理       &lt;br /&gt;31.多国语言与多设备支持       &lt;br /&gt;32.数据库拆分之道       &lt;br /&gt;33.数据库分离之道       &lt;br /&gt;34.数据库同步之道       &lt;br /&gt;35.全方位测试       &lt;br /&gt;36.多重环境部署       &lt;br /&gt;37.SEO与SEM       &lt;br /&gt;38.服务器操作系统与Web服务器       &lt;br /&gt;39.部署与更新       &lt;br /&gt;40.分布式及负载均衡       &lt;br /&gt;41.安全重于泰山       &lt;br /&gt;42.健康监控与信息反馈处理       &lt;br /&gt;43.在线错误调试与处理       &lt;br /&gt;44.时刻关注与维护更新       &lt;br /&gt;45.慎重考虑云平台&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;诚然，由于圣殿骑士才识浅薄，所以以上观点只是个人的看法与心得，遗漏和错误之处也请见谅。其实做技术久了也会慢慢厌倦技术并逐渐淡化技术本身所带来的激情，在和一些技术朋友的交流中也都颇有同感。前段时间写WPF系列的时候被有些朋友抱怨说文章太长，用鼠标拖滚动条就把手拖累了，我想这些朋友有点夸大其词了:-D，不过自己仔细想想:读者看着比较吃力，这间接表示我阐述问题的思路和语言还有待提高，把简单的事情复杂化了。虽然没有朋友直接这样说，但我也时刻在反思这个问题，如何才能把所要讲的技术贯穿到每个读者的知识树上呢？毕竟每个人知识功底参差不齐，这也是我在公司培训的难点和重点。我想只有以后逐渐强化自身的技术功底和语言阐述能力，这样才能真正做到游刃有余!&lt;/p&gt;&lt;p&gt;这里需要强调的是：之前花大篇幅讲的知识点确实是我个人认为比较重要的概念，所以才不遗余力的反复强调，在此也请看得头晕的朋友海涵。后面我想我会尽力写好每一篇文章，这篇就一改长文风格，缩减阐述语言，充分调动大家思考和讨论的积极性，同时有高见的朋友也请指教！&lt;/p&gt;&lt;p&gt;最后也附上几年积累并总结的十条心得：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;1， 学会学习、内外兼修；     &lt;br /&gt;2， 轻重缓急、井然有序；      &lt;br /&gt;3， 谦虚谨慎、竭诚待物；      &lt;br /&gt;4， 记录成长、勤能补挫；      &lt;br /&gt;5， 换位思考、将心比心；      &lt;br /&gt;6， 认识本质、避免浮躁；      &lt;br /&gt;7， 保持理想、孜孜不懈；      &lt;br /&gt;8， 学会合作、团队意识；      &lt;br /&gt;9， 交流分享、有容乃大；      &lt;br /&gt;10，面对现实、享受生活；&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;这十条心得是自己对技术或者生活或者人生的一些感悟，如果大家仔细看，或许能找到共鸣。从下一篇开始我们继续深入探讨相关技术问题，所以暂且会把写书的进度先缓一缓，毕竟相对于写书，我更喜欢和大家共同探讨和交流，有交流才会不断进步。可能之后的文章还是会走长文路线，因为这样写起来自己会有一气呵成且静心的感觉，虽然花的时间比较长，但个人还是比较执着和乐意去写，不为别的，就为生命中的那一份坚持！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/KnightsWarrior/aggbug/1857836.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/21/1857836.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/KnightsWarrior/archive/2010/10/20/1856255.html</id><title type="text">自动更新组件分享</title><summary type="text">众所周知，对于一般的软件开发，在开始的时候都会有一个技术选型的阶段，最大的选型就是首先要确定是选择Client/Server模式还是 Browser/Server模式。综合而论：两者各有优劣，在很多方面都不能被对方互相取代，如在适用Internet、维护工作量等方面，B/S比C /S要强很多；但在运行速度、数据安全、人机交互等方面，B/S就远不如C/S那么强大。所以综上所述，凡是C/S的强项，便是B/S的弱项，反之亦然。由于今天讨论的是自动更新组件，所以接下来我们就往这方面细讲，既然C/S模式在运行速度、数据安全、人机交互有这么多的优点，尤其是客户端技术日益发展的今天，如何解决客户端的部署与自动升级问题便是一个非常重要的问题。</summary><published>2010-10-20T00:37:00Z</published><updated>2010-10-20T00:37:00Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><link rel="alternate" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/20/1856255.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/20/1856255.html"/><content type="html">&lt;p&gt;&lt;strong&gt;一. 摘要&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;前两天在博客上发布了一篇英文的自动更新组件文章&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/18/1854502.html"&gt;Release a AutoUpdater tool&lt;/a&gt;，那么在这篇文章中，我们也对其功能进行一些简单说明，这个组件非常简单，所以大家可以下载进行一些改进。众所周知，对于一般的软件开发，在开始的时候都会有一个技术选型的阶段，最大的选型就是首先要确定是选择Client/Server模式还是Browser/Server模式。综合而论：两者各有优劣，在很多方面都不能被对方互相取代，如在适用Internet、维护工作量等方面，B/S比C/S要强很多；但在运行速度、数据安全、人机交互等方面，B/S就远不如C/S那么强大。所以综上所述，凡是C/S的强项，便是B/S的弱项，反之亦然。由于今天讨论的是自动更新组件，所以接下来我们就往这方面细讲，既然C/S模式在运行速度、数据安全、人机交互有这么多的优点，尤其是客户端技术日益发展的今天，如何解决客户端的部署与自动升级问题便是一个非常重要的问题。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二. 本文提纲 &lt;/strong&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;middot; 1.摘要 &lt;/p&gt;&lt;p&gt;&amp;middot; 2.本文提纲 &lt;/p&gt;&lt;p&gt;&amp;middot; 3.为什么不使用ClickOnce&lt;/p&gt;&lt;p&gt;&amp;middot; 4.简要介绍&lt;/p&gt;&lt;p&gt;&amp;middot; 5.项目中如何使用&lt;/p&gt;&lt;p&gt;&amp;middot; 6.具体效果&lt;/p&gt;&lt;p&gt;&amp;middot; 7.维护与下载&lt;/p&gt;&lt;p&gt;&amp;middot; 8.总结&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;strong&gt;三. 为什么不使用ClickOnce&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在前面的摘要中我们简单介绍了自动更新功能的重要性，在这一小节里我们来谈一下为什么不使用微软给我们提供的自动更新组件ClickOnce，大家都知道ClickOnce给我们提供了很多功能：简单说来，ClickOnce 应用程序就是任何使用 ClickOnce 技术发布的 Windows 窗体或控制台应用程序。可以采用三种不同的方法发布 ClickOnce 应用程序：从网页发布、从网络文件共享发布或是从媒体（如 CD-ROM）发布。ClickOnce 应用程序既可以安装在最终用户的计算机上并在本地运行（即使当计算机脱机时也可以运行），也可以仅以联机模式运行，而不在最终用户的计算机上永久安装任何内容。ClickOnce 应用程序可以自行更新；这些应用程序可以在较新版本变为可用时检查较新版本，并自动替换所有更新的文件。开发人员可以指定更新行为；网络管理员也可以控制更新策略，如将更新标记为强制性的。最终用户或管理员还可以对更新进行回滚，使应用程序恢复到早期的版本。&lt;/p&gt;&lt;p&gt;从上面大家可以看出ClickOnce 无疑是微软对Client/Server模式部署的最佳解决方案，但正是因为它的功能特别强大而且又要使用相当简单，所以在产品的封装上就特别严实，基本上就暴露了一些简单的操作接口，这样就无形把一些定制化的操作拒之于门外，比如：&lt;/p&gt;&lt;p&gt;1，用户不能自己指定安装路径。&lt;/p&gt;&lt;p&gt;2，对自动更新流程不能做定制化的操作。&lt;/p&gt;&lt;p&gt;3，对自动更新的UI不能定制化的设计。&lt;/p&gt;&lt;p&gt;正因为这几个原因，所以很多企业都会做一些定制化的组件来实现自动更新的功能,基于此，我们这里也实现了一个非常简单的自动更新组件.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;四. 简要介绍&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;其实自动更新的原理很简单，分析起来无非就是简单的几步操作，当然实现方式也是大同小异，这里我们就选一种较简单的方式:&lt;/p&gt;&lt;p&gt;1.启动主程序，主程序里面调用升级程序，升级程序连接到IIS或者FTP。&lt;/p&gt;&lt;p&gt;2.升级程序获取服务器端XML配置文件中新版本程序的更新日期或版本号或文件大小。&lt;/p&gt;&lt;p&gt;3.升级程序获取原有客户端应用程序的最近一次更新日期或版本号或文件大小，然后两者进行比较；如果新版本日期&amp;gt;原有程序的最新日期，则提示用户是否升级；或如果新版本版本号&amp;gt;原有程序的版本号，则提示用户是否升级；再或如果新版本文件大小&amp;gt;原有程序的文件大小，则提示用户是否升级。本文主要采用一般的做法，就是通过版本号来进行对比。&lt;/p&gt;&lt;p&gt;4.如果用户选择升级，则获取下载文件列表；&lt;/p&gt;&lt;p&gt;5.在本地建立与远程IIS或者FTP相应的临时目录，然后下载到这个临时目录文件下；&lt;/p&gt;&lt;p&gt;6.删除旧的主程序，拷贝临时文件夹中的文件到相应的位置；&lt;/p&gt;&lt;p&gt;8.结束升级流程并重新启动主程序。&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;根据前面的流程，我们可以简单设计如下的项目：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/autoupdatersolution_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="autoupdatersolution" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/autoupdatersolution_thumb.png" border="0" alt="autoupdatersolution" width="644" height="525" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图1&lt;/p&gt;&lt;p&gt;具体类介绍：&lt;/p&gt;&lt;p&gt;IAutoUpdater.cs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 提供外部调用的接口&lt;/p&gt;&lt;p&gt;AutoUpdater.cs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 该组件的主操作类&lt;/p&gt;&lt;p&gt;Autoupdater.config&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本地配置文件&lt;/p&gt;&lt;p&gt;DownloadConfirm.cs&amp;nbsp;&amp;nbsp;&amp;nbsp; 提示是否有更新页面&lt;/p&gt;&lt;p&gt;DownloadProgress.cs&amp;nbsp;&amp;nbsp;&amp;nbsp; 下载进度页面&lt;/p&gt;&lt;p&gt;CommonUnitity.cs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一些常用功能&lt;/p&gt;&lt;p&gt;Config.cs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当更新完毕之后需要更新Config,所以这里需要一个提供序列化的Config类&lt;/p&gt;&lt;p&gt;ConstFile.cs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一些常量文件&lt;/p&gt;&lt;p&gt;DownloadFileInfo.cs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 需要下载的文件实体类&lt;/p&gt;&lt;p&gt;LocalFile.cs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本地文件实体类&lt;/p&gt;&lt;p&gt;RemoteFile.cs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 远程文件实体类&lt;/p&gt;&lt;p&gt;UpdateFileList.cs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本地的实体类集合&lt;/p&gt;&lt;p&gt;代码非常简单，具体可以下载进行查看，所以这里就不做过多阐述。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;五. 项目中如何使用&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;第一步：Host更新的版本到服务器&lt;/p&gt;&lt;p&gt;如果需要让客户端获取最新的版本，首先我们需要开发人员编译源代码并生成文件，然后拷贝到FTP或者IIS目录下，运行一个自动生成XML文件的程序，把所有的文件都自动生成到一个XML文件，详细见下图：&lt;/p&gt;&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;&lt;div id="codeSnippet" class="csharpcode"&gt;&lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;&lt;div id="codeSnippet" class="csharpcode"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-18%2023-10-25_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-18 23-10-25" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-18%2023-10-25_thumb.png" border="0" alt="2010-10-18 23-10-25" width="849" height="153" /&gt;&lt;/a&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图2&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第二步：配置本地的Config&lt;/p&gt;&lt;p&gt;经过第一步的流程，这一步要做的就是配置本地的Config用于监测并下载远程IIS或者FTP下需要更新的文件，具体如下图所示：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-18%2023-13-10_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-18 23-13-10" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-18%2023-13-10_thumb.png" border="0" alt="2010-10-18 23-13-10" width="848" height="158" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图3&lt;/p&gt;&lt;p&gt;第三步：修改主程序&lt;/p&gt;&lt;p&gt;首先把AutoUpdater这个DLL引入我们的主项目，然后在主项目中添加如下代码，当然你可以根据自己的需要进行书写，这个DLL提供了两个外部接口，一个接口用于判断是否有更新及下载，另一个接口则是用于更新出错时进行回滚操作，具体代码如下：&lt;/p&gt;&lt;!--CRLF--&gt;      #region check and download &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; version program&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; bHasError = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br/&gt;      IAutoUpdater autoUpdater = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; AutoUpdater();&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br/&gt;      {&lt;br/&gt;          autoUpdater.Update();&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (WebException exp)&lt;br/&gt;      {&lt;br/&gt;          MessageBox.Show("&lt;span style="color: #8b0000;"&gt;Can not find the specified resource&lt;/span&gt;");&lt;br/&gt;          bHasError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (XmlException exp)&lt;br/&gt;      {&lt;br/&gt;          bHasError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br/&gt;          MessageBox.Show("&lt;span style="color: #8b0000;"&gt;Download the upgrade file error&lt;/span&gt;");&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (NotSupportedException exp)&lt;br/&gt;      {&lt;br/&gt;          bHasError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br/&gt;          MessageBox.Show("&lt;span style="color: #8b0000;"&gt;Upgrade address configuration error&lt;/span&gt;");&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (ArgumentException exp)&lt;br/&gt;      {&lt;br/&gt;          bHasError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br/&gt;          MessageBox.Show("&lt;span style="color: #8b0000;"&gt;Download the upgrade file error&lt;/span&gt;");&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (Exception exp)&lt;br/&gt;      {&lt;br/&gt;          bHasError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br/&gt;          MessageBox.Show("&lt;span style="color: #8b0000;"&gt;An error occurred during the upgrade process&lt;/span&gt;");&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;finally&lt;/span&gt;&lt;br/&gt;      {&lt;br/&gt;          &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (bHasError == &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;)&lt;br/&gt;          {&lt;br/&gt;              &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br/&gt;              {&lt;br/&gt;                  autoUpdater.RollBack();&lt;br/&gt;              }&lt;br/&gt;              &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (Exception)&lt;br/&gt;              {&lt;br/&gt;                 &lt;span style="color: #008000;"&gt;//Log the message to your file or database&lt;/span&gt;&lt;br/&gt;              }&lt;br/&gt;          }&lt;br/&gt;      }&lt;br/&gt;      #endregion&lt;p&gt;使用就是这么简单，更详细的操作，大家可以下载源码，也正因为它的简单，所以大家可以对其修改以满足具体项目的需求。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;六. 具体效果&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;当我们运行主程序（WinForm或者WPF），如果服务器上有最新的版本，就会弹出如下页面进行提示并让用户选择是否更新。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-13%2018-05-02_4.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-13 18-05-02" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-13%2018-05-02_thumb_1.png" border="0" alt="2010-10-13 18-05-02" width="646" height="376" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图4&lt;/p&gt;&lt;p&gt;当用户不需要更新时，可以选择Skip按钮跳过并继续主程序流程，反之则进入如下页面。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-13%2018-05-41_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-13 18-05-41" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-13%2018-05-41_thumb.png" border="0" alt="2010-10-13 18-05-41" width="650" height="402" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图5&lt;/p&gt;&lt;p&gt;在下载的过程中，用户可以选择Cancel停止下载并重新回到主流程。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;七. 维护与下载&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;该组件已经托管到CodePlex，所以大家可以到上面下载其源代码，具体地址：&lt;a title="http://autoupdater.codeplex.com/" href="http://autoupdater.codeplex.com/"&gt;http://autoupdater.codeplex.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-18%2022-10-52_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-18 22-10-52" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/16441ce0d1fe_14F7C/2010-10-18%2022-10-52_thumb.png" border="0" alt="2010-10-18 22-10-52" width="665" height="514" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图6&lt;/p&gt;&lt;p&gt;&lt;strong&gt;八. 总结&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我们这篇文章简单的讲解了一个简单的自动更新组件，由于它比较简单而且功能单一，所以没有花费大量的篇幅进行论述，感兴趣的读者可以下载其源码。后面我会把自己开发的一套MVVM框架也托管上去，由于目前对Silverlight的支持还不太好，所以正在持续做相关的改进，其中借鉴了一些其他优秀框架的思想并且融入了一些实际应用场景，所以到时也希望大家能够多多指教！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/KnightsWarrior/aggbug/1856255.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/20/1856255.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/KnightsWarrior/archive/2010/10/18/1854502.html</id><title type="text">Release a AutoUpdater tool</title><summary type="text">Fixing bugs and adding new features is a part of developing software applications. From my experience, sending application updates to users is also a critical part of developing applications, especially when the user has no advanced knowledge of computers. In the Internet era today, the software developer must make application deployment and updating easier and often m</summary><published>2010-10-18T08:05:00Z</published><updated>2010-10-18T08:05:00Z</updated><author><name>圣殿骑士</name><uri>http://www.cnblogs.com/KnightsWarrior/</uri></author><link rel="alternate" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/18/1854502.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/18/1854502.html"/><content type="html">&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Fixing bugs and adding new features is a part of developing software applications. From my experience, sending application updates to users is also a critical part of developing applications, especially when the user has no advanced knowledge of computers. In the Internet era today, the software developer must make application deployment and updating easier and often makes automatic application updates to do this.I already searched through the internet on this topic, but not much seems suited to my needs. So, I tried to create one myself. This sample application is developed in C# as a library with the project name &amp;ldquo;AutoUpdater&amp;rdquo;. The DLL &amp;ldquo;AutoUpdater&amp;rdquo; can be used in a C# Windows application(WinForm and WPF).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;About the features &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;There are certain features about the AutoUpdater: &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1,Easy to implement and use.    &lt;br /&gt;2,Application automatic re-run after checking update.     &lt;br /&gt;3,Update process transparent to the user .     &lt;br /&gt;4,To avoid blocking the main thread using multi-threaded download.     &lt;br /&gt;5,Ability to upgrade the system and also the auto update program.     &lt;br /&gt;6,A code that doesn't need change when used by different systems and could be compiled in a library.     &lt;br /&gt;7,Easy for user to download the update files.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The following UI&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;There are two pages and very pretty simple,just as follows:&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/ShareaAutoUpdatertool_DFC0/2010-10-13%2018-05-02_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-13 18-05-02" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/ShareaAutoUpdatertool_DFC0/2010-10-13%2018-05-02_thumb.png" border="0" alt="2010-10-13 18-05-02" width="760" height="442" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Figure 1&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/ShareaAutoUpdatertool_DFC0/2010-10-13%2018-05-41_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="2010-10-13 18-05-41" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/ShareaAutoUpdatertool_DFC0/2010-10-13%2018-05-41_thumb.png" border="0" alt="2010-10-13 18-05-41" width="762" height="472" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Figure 2&lt;/p&gt;&lt;p&gt;&lt;strong&gt;How to use?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In the program that you want to be auto updateable, you just need to call the AutoUpdate function in the Main procedure. The AutoUpdate&amp;nbsp; function will check the version with the one read from a file located in a Web Site/FTP. If the program version is lower than the one read the program downloads the auto update program and launches it and the function returns True, which means that an auto update will run and the current program should be closed. The auto update program receives several parameters from the program to be updated and performs the auto update necessary and after that launches the updated system.&lt;/p&gt;      #region check and download &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; version program&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; bHasError = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br/&gt;      IAutoUpdater autoUpdater = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; AutoUpdater();&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br/&gt;      {&lt;br/&gt;          autoUpdater.Update();&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (WebException exp)&lt;br/&gt;      {&lt;br/&gt;          MessageBox.Show("&lt;span style="color: #8b0000;"&gt;Can not find the specified resource&lt;/span&gt;");&lt;br/&gt;          bHasError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (XmlException exp)&lt;br/&gt;      {&lt;br/&gt;          bHasError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br/&gt;          MessageBox.Show("&lt;span style="color: #8b0000;"&gt;Download the upgrade file error&lt;/span&gt;");&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (NotSupportedException exp)&lt;br/&gt;      {&lt;br/&gt;          bHasError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br/&gt;          MessageBox.Show("&lt;span style="color: #8b0000;"&gt;Upgrade address configuration error&lt;/span&gt;");&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (ArgumentException exp)&lt;br/&gt;      {&lt;br/&gt;          bHasError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br/&gt;          MessageBox.Show("&lt;span style="color: #8b0000;"&gt;Download the upgrade file error&lt;/span&gt;");&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (Exception exp)&lt;br/&gt;      {&lt;br/&gt;          bHasError = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br/&gt;          MessageBox.Show("&lt;span style="color: #8b0000;"&gt;An error occurred during the upgrade process&lt;/span&gt;");&lt;br/&gt;      }&lt;br/&gt;      &lt;span style="color: #0000ff;"&gt;finally&lt;/span&gt;&lt;br/&gt;      {&lt;br/&gt;          &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (bHasError == &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;)&lt;br/&gt;          {&lt;br/&gt;              &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br/&gt;              {&lt;br/&gt;                  autoUpdater.RollBack();&lt;br/&gt;              }&lt;br/&gt;              &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (Exception)&lt;br/&gt;              {&lt;br/&gt;                 &lt;span style="color: #008000;"&gt;//Log the message to your file or database&lt;/span&gt;&lt;br/&gt;              }&lt;br/&gt;          }&lt;br/&gt;      }&lt;br/&gt;      #endregion&lt;p&gt;That&amp;rsquo;s all and just enjoy it!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;About the solutions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The application is pretty simple,just contains two pages and some helper classes.&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/ShareaAutoUpdatertool_DFC0/autoupdatersolution_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="autoupdatersolution" src="http://images.cnblogs.com/cnblogs_com/KnightsWarrior/WindowsLiveWriter/ShareaAutoUpdatertool_DFC0/autoupdatersolution_thumb.png" border="0" alt="autoupdatersolution" width="652" height="531" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Figure 3&lt;/p&gt;&lt;p&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Author: 圣殿骑士（Knights Warrior） &lt;/li&gt;&lt;li&gt;Email:&amp;nbsp; &lt;a href="mailto:KnightsWarrior@msn.com"&gt;KnightsWarrior@msn.com&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Website:&amp;nbsp; &lt;a href="http://www.cnblogs.com/KnightsWarrior/"&gt;http://www.cnblogs.com/KnightsWarrior/&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://knightswarrior.blog.51cto.com/"&gt;http://knightswarrior.blog.51cto.com/&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Create Date: 5/8/2010 &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;you can download the tool via &lt;a title="http://autoupdater.codeplex.com/" href="http://autoupdater.codeplex.com/"&gt;http://autoupdater.codeplex.com/&lt;/a&gt;,If in doubt please contact me,Thanks!&lt;/p&gt;&lt;img src="http://www.cnblogs.com/KnightsWarrior/aggbug/1854502.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/KnightsWarrior/archive/2010/10/18/1854502.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
