<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_WizardWu 编程网</title><subtitle type="text">一位台湾的程序员，研究 OOD、.NET 平台在企业信息化之应用、WCF &amp; 工作流、性能调优、数据库。</subtitle><id>http://feed.cnblogs.com/blog/u/39220/rss</id><updated>2011-12-22T09:23:31Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/39220/rss"/><entry><id>http://www.cnblogs.com/WizardWu/archive/2011/10/01/2197147.html</id><title type="text">探讨 T-SQL 的 EXISTS、EXCEPT、INTERSECT 算符</title><summary type="text">本帖先探讨 IT 人的职涯规划，再回到技术面，研究 T-SQL 的 UNION、EXISTS、EXCEPT、INTERSECT 运算符。</summary><published>2011-10-01T14:09:00Z</published><updated>2011-10-01T14:09:00Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/WizardWu/archive/2011/10/01/2197147.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/archive/2011/10/01/2197147.html"/><content type="html">&lt;p&gt;&lt;font face="Times New Roman"&gt;本帖先探讨 IT 人的职涯规划，再回到技术面，研究 T-SQL 的 UNION、EXISTS、EXCEPT、INTERSECT 运算符。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;之前有园友提到：「DBA 了解业务是非常必要的」，确实如此。不管您担任的是 IT 的哪种职务，都应深入了解所任职公司的业务和流程，结合既有的 IT 专长，发展出自己在公司的「不可替代性」，甚至去思考老板、公司的好高高层们，想要的是什么？ 若您是担任 MIS 或 DBA，每天辛勤努力修机器、备份数据库、维护网络状态、研究最新的前台和 .NET 技术，却无法让老板了解你每天在忙什么，则你的地位，可能远不如一位很懂业务和流程的人，虽然他只会写些 SQL 句子，却能每天产出老板和主管想看的报表，老板不能没有他，他也就创造了自己的不可替代性。 当然做项目的软件公司，和一般产业的信息部门又有所不同，这里只是举例。&lt;br /&gt;&lt;br /&gt;那么该学什么技术最保值呢？有没有什么 IT 技术像会计学一样，学一套就能吃一辈子？前台 UI 技术日新月异、层出不穷，感觉自己再也跟不上年轻人熬夜学 ASP.NET 4,5,6,7,8 ...、Silverlight 5,6,7,8,9 ...？ 若要论技术的保值性，将 SQL 和数据库学到精通，或许是不错的选择。除了技术变化性比较小 (至少不会像某些技术会忽然推翻旧版本)，往上钻研可研究 BI、OLAP、Data Mining、报表、当顾问，往下钻研可深入学 SQL 语句、软件项目开发、备份还原和监控，横向钻研可学习操作系统、Storage、性能优化 .... 等等，至少就技术的「保值性」而言，学一套能「撑」较久，甚至大半辈子，也较有机会接触公司的核心业务和流程 (把公司的业务逻辑都写进存储过程里，公司从此不能没有你)。&lt;/p&gt;&#xD;
&lt;p&gt;当然这里只是举例，并非鼓吹大家都该往此方向投入学习，就像有人说程序员最后都要升级 SA、PM，但这应视个人性格、兴趣、所在的产业而论，并没有标准的答案。但话说回来，要精通 SQL 的撰写也非易事，其为易学难精的功夫，如笔者以前曾经转贴的一篇陈年好文「&lt;a href="http://www.cnblogs.com/WizardWu/archive/2009/01/29/1381275.html" target="_blank"&gt;程序员真情忏悔录&lt;/a&gt;」也曾提到这些特性：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #808080"&gt;做应用软件的人真的没价值吗？有些靠应用软件赚了不少钱的朋友开始偷笑了。软件必须加上专业知识，才能够发挥价值；换句话说，如果您真的「只会写代码」，&lt;/span&gt;&lt;span style="color: red"&gt;却没有配合各种领域的专业知识&lt;/span&gt;&lt;span style="color: #808080"&gt; ，「编程」这项技能本身根本毫无价值可言。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #808080"&gt;就很像你的计算机装了浏览器，但却没有对外联机的网络一样。如果没有网络本身，浏览器一点价值也没有，更不需要一家公司大费周章地利用平台优势去整倒另外一家公司 。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #808080"&gt;-你老觉得真正的高手应该精通各门各派的技术 (?)，如果你会 XML，他不会，你就觉得你比他厉害。你觉得他的履历上写的技能太少，证照太少，所以你认为你比他优秀？&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;span style="color: #808080"&gt;有人认为写 Java 程序应该善用工具，用 UltraEdit 根本是重新造轮子的行为，所以一开始就学 JBuilder (或 Visual Studio) 的使用者，其实他用 JBuilder 写了老半天 GUI 程序，哪天回头叫他用文本编辑器写个简单的 Frame + Button 他却写不出来，因为他从没弄懂过 Java 的事件处理模型。他只会不断地：选择组件 -&amp;gt; 放在容器里 -&amp;gt; 调整位置和大小 -&amp;gt; 调整属性 -&amp;gt; 按两下 -&amp;gt; 填写事件处理函数，成为一个名副其实的「代码女工」。&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;span style="color: #808080"&gt;有人觉得他精通各家厂商的数据库，所以看不起那些只会下 SQL 命令或是只会写 stored procedure 的人，因为他可是精通 ODBC、JDBC、ADO、ADO.NET 各种程序的写法。问题是，一个精通 SQL 的专家，和只会写 SQL 语句的人，在数据库表格交互参考、数据量很大的时候，要从中取出我们需要的内容，&lt;/span&gt;&lt;span style="color: #ff0000"&gt;所下的 SQL 指令在效率上，是几秒钟和几个小时的差别。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #808080"&gt;SQL 也是个专门学问，要能够巧妙地操作它，&lt;/span&gt;&lt;span style="color: red"&gt;必须下非常多功夫做研究，&lt;/span&gt;&lt;span style="color: #ff0000"&gt;而且一研究可能就是十几年&lt;/span&gt;&lt;span style="color: #808080"&gt;。如果贵公司的项目老是苦于数据库访问的性能不佳，你猜老板会花钱找一个有能力彻底改善所有 SQL 语句中性能问题的稀有专家，还是再找一个号称他什么都会，结果一点用场也派不上的「数据库女工」？ 我们常常看到某人列出他的履历，好像会很多就是很厉害。但是当我们完全深入一项技术时 (喔，我是说你真正下过苦功的时候)，通常我们会越来越感觉到自己的渺小。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;说偏了，回归技术面，以下才是本帖的主题。&lt;/p&gt;&#xD;
&lt;p&gt;-------------------------------------------------&lt;br /&gt;本帖的示例下载：&lt;br /&gt;&lt;a href="http://files.cnblogs.com/WizardWu/111001.zip"&gt;http://files.cnblogs.com/WizardWu/111001.zip&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;SQL Server 2008 R2 的 AdventureWorks 数据库下载：&lt;br /&gt;&lt;a href="http://msftdbprodsamples.codeplex.com/releases/view/55926" target="_blank"&gt;http://msftdbprodsamples.codeplex.com/releases/view/55926&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msftdbprodsamples.codeplex.com/" target="_blank"&gt;http://msftdbprodsamples.codeplex.com/&lt;/a&gt;&lt;br /&gt;---------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;strong&gt;The EXISTS Operator&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;EXISTS 可称之为运算符，有些书称它为关键词。 EXISTS 和 IN 关键词很类似，但仍有些不同，EXISTS 使用时不会返回数据，而是返回简单的 TRUE / FALSE。如下示例 &lt;span style="color: #3366ff"&gt;[1]&lt;/span&gt;，即使子查询返回 NULL，用 EXISTS 也会得到 TRUE：&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;USE&lt;/span&gt;&amp;nbsp;AdventureWorks2008&amp;nbsp;;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;DepartmentID,&amp;nbsp;Name&amp;nbsp;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;HumanResources.Department&amp;nbsp;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;EXISTS&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;)&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;EXISTS 和 IN 在很多情况下可查到相同的结果 &lt;span style="color: #3366ff"&gt;[1]&lt;/span&gt;，两个关键词的用途有些类似，因此网络上常有些 EXISTS 和 IN 谁效率较好的讨论串 &lt;span style="color: #3366ff"&gt;[2]&lt;/span&gt;，此处不再赘述。 以下我们改探讨 EXISTS 和 JOIN 的比较，下方是书上的两个示例 &lt;span style="color: #3366ff"&gt;[7]&lt;/span&gt;，两者的执行结果相同，第一个示例是 EXISTS 搭配「嵌套查询 (nested query)」，第二个示例语法看起来较简洁，是传统大家习惯用的 join 写法：&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&amp;nbsp;e.BusinessEntityID,&amp;nbsp;&amp;nbsp;FirstName,&amp;nbsp;&amp;nbsp;LastName&lt;br /&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;HumanResources.Employee&amp;nbsp;&amp;nbsp;e&lt;br /&gt;&lt;span style="color: #808080"&gt;JOIN&lt;/span&gt;&amp;nbsp;&amp;nbsp;Person.Person&amp;nbsp;&amp;nbsp;pp&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;&amp;nbsp;&amp;nbsp;e.BusinessEntityID&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;pp.BusinessEntityID&lt;br /&gt;&lt;span style="background-color: #c0c0c0; color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="background-color: #c0c0c0; color: red"&gt;EXISTS&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="background-color: #c0c0c0"&gt;&amp;nbsp;&amp;nbsp;(&lt;/span&gt;&lt;span style="background-color: #c0c0c0; color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="background-color: #c0c0c0"&gt;&amp;nbsp;&amp;nbsp;BusinessEntityID&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="background-color: #c0c0c0; color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="background-color: #c0c0c0"&gt;&amp;nbsp;&amp;nbsp;HumanResources.JobCandidate&amp;nbsp;&amp;nbsp;jc&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="background-color: #c0c0c0; color: #0000ff"&gt;WHERE&lt;/span&gt;&lt;span style="background-color: #c0c0c0"&gt;&amp;nbsp;&amp;nbsp;e.BusinessEntityID&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: #c0c0c0; color: #808080"&gt;=&lt;/span&gt;&lt;span style="background-color: #c0c0c0"&gt;&amp;nbsp;jc.BusinessEntityID);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&#xD;
&lt;fieldset&gt;&lt;legend style="padding-bottom: 3px; margin: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px"&gt;上方示例、下方示例，执行结果皆为：&lt;/legend&gt;&lt;br /&gt;&lt;span&gt;EmployeeID　　FirstName　　LastName&lt;/span&gt;&lt;br /&gt;&lt;span&gt;-----------　　------------　　------------- &lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　212　　　　　Peng　　　　 Wu&lt;/span&gt;&lt;br /&gt;&lt;span&gt;　　274　　　　　Stephen　　 Jiang&lt;/span&gt; &#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span&gt;(2 row(s) affected)&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/fieldset&gt; &lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&amp;nbsp;e.BusinessEntityID,&amp;nbsp;&amp;nbsp;FirstName,&amp;nbsp;&amp;nbsp;LastName&lt;br /&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;HumanResources.Employee&amp;nbsp;&amp;nbsp;e&lt;br /&gt;&lt;span style="color: #808080"&gt;JOIN&lt;/span&gt;&amp;nbsp;&amp;nbsp;Person.Person&amp;nbsp;&amp;nbsp;pp&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;&amp;nbsp;&amp;nbsp;e.BusinessEntityID&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;pp.BusinessEntityID&lt;br /&gt;&lt;span style="background-color: #c0c0c0; color: #808080"&gt;JOIN&lt;/span&gt;&lt;span style="background-color: #c0c0c0"&gt;&amp;nbsp;&amp;nbsp;HumanResources.JobCandidate&amp;nbsp;&amp;nbsp;jc&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #c0c0c0; color: #0000ff"&gt;ON&lt;/span&gt;&lt;span style="background-color: #c0c0c0"&gt;&amp;nbsp;&amp;nbsp;e.BusinessEntityID&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: #c0c0c0; color: #808080"&gt;=&lt;/span&gt;&lt;span style="background-color: #c0c0c0"&gt;&amp;nbsp;jc.BusinessEntityID;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;两个示例虽然结果相同，但 EXISTS 的性能会较好 (书上说的) &lt;span style="color: #3366ff"&gt;[7]&lt;/span&gt;。 当我们使用 EXISTS 关键词时，SQL Server 不会用 full row-by-row join，而是在记录当中搜寻，当它找到第一个符合条件的记录时，就会立即停止后续搜寻的动作，并标示为 TRUE，表示不需要再往下找了；反观 inner join 则不会有此种标示的动作。&lt;/p&gt;&#xD;
&lt;p&gt;此外，NOT EXISTS 也有此种标示的功能。当 NOT EXISTS 找到符合条件的数据时，同样也会标示，但标示为 FALSE，表示不需要再往下找了。&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;除了此一性能差别外，EXISTS 和 join-based 在查询时，各方面并无二致。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;table border="0" cellspacing="1" cellpadding="1" width="500" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;Using EXISTS in Other Ways &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;有时您会看到有些人执行 CREATE 前，会加一些古怪的语句，如下：&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;IF&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;EXISTS&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;sysobjects&amp;nbsp;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;id&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #ff00ff"&gt;object_id&lt;/span&gt;(N&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;[Sales].[SalesOrderHeader]&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #808080"&gt;AND&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff00ff"&gt;OBJECTPROPERTY&lt;/span&gt;(id,N&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;IsUserTable&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #0000ff"&gt;DROP&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000"&gt;Sales&lt;/span&gt;&lt;span style="color: #ff0000"&gt;]&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000"&gt;SalesOrderHeader&lt;/span&gt;&lt;span style="color: #ff0000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000"&gt;Sales&lt;/span&gt;&lt;span style="color: #ff0000"&gt;]&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000"&gt;SalesOrderHeader&lt;/span&gt;&lt;span style="color: #ff0000"&gt;]&lt;/span&gt;&amp;nbsp;(&lt;br /&gt;...&lt;br /&gt;...&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;他们使用 sys.objects、sys.databases，或 INFORMATION_SCHEMA 检视 (view)，目的都一样，想在执行 CREATE 前先看看某个对象是否已存在。 但同样是用 EXISTS 做事先的判断，我有更好的写法，请参考以下创建数据库的示例：&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;USE&lt;/span&gt;&amp;nbsp;master&lt;br /&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;IF&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;EXISTS&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;True&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;sys.databases&amp;nbsp;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;name&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;DBCreateTest&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #0000ff"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;DATABASE&lt;/span&gt;&amp;nbsp;DBCreateTest&lt;br /&gt;&lt;span style="color: #0000ff"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;ELSE&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;PRINT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;此数据库已经存在。跳过了&amp;nbsp;CREATE&amp;nbsp;DATABASE&amp;nbsp;语句&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;END&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;第一次执行此语句时，若没有 DBCreateTest 数据库，则创建它；第二次执行时，由于该数据库已存在，因此会印出自定义的提示信息。 因此，仅用一点小技巧，可避免掉不必要的 DROP 动作被执行，这会让您公司的产品在被安装时更有效率。&lt;/p&gt;&#xD;
&lt;p&gt;EXISTS 是很方便的关键词，有时可让查询语句执行得更有效率，有时则可简化 SQL 语句。&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;strong&gt;The INTERSECT and EXCEPT Operators&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;接下来介绍的 INTERSECT 和 EXCEPT 关键词，在 SQL Server 和其他厂牌数据库多半都支持。 INTERSECT 和 EXCEPT 在处理两个 result set 时，和 UNION 关键词很类似。 在 MSDN、TechNet 上虽然有对这两个关键词作解释 &lt;span style="color: #3366ff"&gt;[3], [6]&lt;/span&gt;，但半机器的翻译有些不易理解，建议参考下列取自书上的图文示例 &lt;span style="color: #3366ff"&gt;[7]&lt;/span&gt;，可让人一目了然：&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;&lt;span style="background-color: #ffff99"&gt;UNION&lt;/span&gt;： 将多个「结果集 (result set)」的「行 (row)」合并，作为单个结果集返回，并移除重复的行。若有重复的行，只留下一个。&lt;/li&gt;&lt;li&gt;&lt;span style="background-color: #ffff99"&gt;UNION ALL&lt;/span&gt;： 将多个「结果集 (result set)」所有的行合并，不论是否有重复的行。&lt;/li&gt;&lt;li&gt;&lt;span style="background-color: #ffff99"&gt;EXCEPT&lt;/span&gt;： 提取只在 EXCEPT 左侧存在，但右侧不存在的行，参考下图 1。用更口语化的说法：「只给我 A 里才有，但 B 里没有的行」。&lt;/li&gt;&lt;li&gt;&lt;span style="background-color: #ffff99"&gt;INTERSECT&lt;/span&gt;： 只提取两个结果集里，都存在的行。 INTERSECT 很类似 inner join，但 INTERSECT 并不会对特定的「列 (column)」去做处理。 &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;由于上述关键词，不会对特定的「列」去做处理，因此在使用上必须符合某些原则 &lt;span style="color: #3366ff"&gt;[3]&lt;/span&gt;，例如：所有查询中的列数和列的顺序必须相同、数据类型必须兼容。&lt;br /&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/111001_01.jpg" width="455" height="303" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 1　UNION 中若有重复的行，会被移除，只留下一个&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在看本文最后的完整比较示例前，我们先了解 EXCEPT 和 INTERSECT 的基本语法。 &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;table border="0" cellspacing="1" cellpadding="1" width="500" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;EXCEPT&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;EXCEPT 用法如下，简单易懂：&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #c0c0c0"&gt;&lt;em&gt;&amp;lt;table or tabular result&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #c0c0c0"&gt;EXCEPT&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #c0c0c0"&gt;&lt;em&gt;&amp;lt;table or tabular result with same number of columns and type as top query&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;table with same number of columns and type as query or tabular result top&gt;&#xD;
&lt;p&gt;同样的查询需求，我们改用 NOT EXISTS 的写法，也能得到和 EXCEPT 写法相同的结果，用法如下 &lt;span style="color: #3366ff"&gt;[1], [7]&lt;/span&gt;。 本文最后会有完整的示例。 &lt;br /&gt;&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #808080"&gt;&amp;lt;&lt;/span&gt;base&amp;nbsp;query&lt;span style="color: #808080"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;EXISTS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;table&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;or&lt;/span&gt;&amp;nbsp;result&amp;nbsp;&lt;span style="color: #0000ff"&gt;with&lt;/span&gt;&amp;nbsp;same&amp;nbsp;&lt;span style="color: #0000ff"&gt;number&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;of&lt;/span&gt;&amp;nbsp;columns&amp;nbsp;&lt;span style="color: #808080"&gt;and&lt;/span&gt;&amp;nbsp;type&amp;nbsp;&lt;span style="color: #0000ff"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;top&lt;/span&gt;&amp;nbsp;query&lt;span style="color: #808080"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&amp;lt;&lt;/span&gt;base&amp;nbsp;query&amp;nbsp;first&amp;nbsp;&lt;span style="color: #0000ff"&gt;column&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&amp;lt;&lt;/span&gt;comparison&amp;nbsp;&lt;span style="color: #0000ff"&gt;table&lt;/span&gt;&amp;nbsp;first&amp;nbsp;&lt;span style="color: #0000ff"&gt;column&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000"&gt;,&amp;nbsp;...&lt;/span&gt;&lt;span style="color: #ff0000"&gt;]&lt;/span&gt;)&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;tbody&gt;&lt;/tbody&gt;&lt;/p&gt;&lt;/table&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="500" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;INTERSECT&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;p&gt;至于 INTERSECT 的语法也一样简单易懂，用法和 EXCEPT、UNION 也都类似，如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;em&gt;&lt;span style="background-color: #c0c0c0"&gt;&amp;lt;table or tabular result&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/em&gt;&lt;span style="background-color: #c0c0c0"&gt;INTERSECT&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #c0c0c0"&gt;&lt;em&gt;&amp;lt;table or tabular result with same number of columns and type as top query&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;同样的查询需求，我们改用&amp;nbsp;EXISTS 的写法，也能得到和 INTERSECT 写法相同的结果，用法如下 &lt;span style="color: #3366ff"&gt;[1], [7]&lt;/span&gt;。 本文最后会有完整的示例。&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #808080"&gt;&amp;lt;&lt;/span&gt;base&amp;nbsp;query&lt;span style="color: #808080"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;EXISTS&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;table&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;or&lt;/span&gt;&amp;nbsp;result&amp;nbsp;&lt;span style="color: #0000ff"&gt;with&lt;/span&gt;&amp;nbsp;same&amp;nbsp;&lt;span style="color: #0000ff"&gt;number&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;of&lt;/span&gt;&amp;nbsp;columns&amp;nbsp;&lt;span style="color: #808080"&gt;and&lt;/span&gt;&amp;nbsp;type&amp;nbsp;&lt;span style="color: #0000ff"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;top&lt;/span&gt;&amp;nbsp;query&lt;span style="color: #808080"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&amp;lt;&lt;/span&gt;base&amp;nbsp;query&amp;nbsp;first&amp;nbsp;&lt;span style="color: #0000ff"&gt;column&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&amp;lt;&lt;/span&gt;comparison&amp;nbsp;&lt;span style="color: #0000ff"&gt;table&lt;/span&gt;&amp;nbsp;first&amp;nbsp;&lt;span style="color: #0000ff"&gt;column&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000"&gt;,&amp;nbsp;...&lt;/span&gt;&lt;span style="color: #ff0000"&gt;]&lt;/span&gt;)&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;此外，INTERSECT 和 EXCEPT 可同时混搭使用，但 INTERSECT 运算符会优先于 EXCEPT&amp;nbsp;&lt;span style="color: #3366ff"&gt;[&lt;/span&gt;&lt;span style="color: #3366ff"&gt;6]&lt;/span&gt;&lt;span style="color: #000000"&gt;：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;TableA&amp;nbsp;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;EXCEPT&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;TableB&amp;nbsp;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;INTERSECT&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;TableC&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;strong&gt;Comparing EXCEPT and INTERSECT with Their EXISTS and NOT EXISTS Equivalents&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;以下的示例，我们将演示本帖前述的所有内容，先看 EXCEPT、INTERSECT 的示例，再看与他们俩对等的 NOT EXISTS、EXISTS 写法示例 (不同写法，但会返回相同的结果集)。&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('86edeb6b-3687-4cb2-b37b-84359b32e665')"&gt;&lt;img style="display: none" id="code_img_opened_86edeb6b-3687-4cb2-b37b-84359b32e665"  onclick="cnblogs_code_hide('86edeb6b-3687-4cb2-b37b-84359b32e665',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &#xD;
&lt;div id="cnblogs_code_open_86edeb6b-3687-4cb2-b37b-84359b32e665" &gt;&#xD;
&lt;div&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;Create&amp;nbsp;our&amp;nbsp;test&amp;nbsp;tables&amp;nbsp;and&amp;nbsp;populate&amp;nbsp;them&amp;nbsp;with&amp;nbsp;a&amp;nbsp;few&amp;nbsp;relevant&amp;nbsp;rows&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008080"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt;&amp;nbsp;UnionTest1&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;(&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;idcol&amp;nbsp;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff00ff"&gt;IDENTITY&lt;/span&gt;,&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;col2&amp;nbsp;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold"&gt;3&lt;/span&gt;),&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;);&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt;&amp;nbsp;UnionTest2&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;(&lt;br /&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;idcol&amp;nbsp;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff00ff"&gt;IDENTITY&lt;/span&gt;,&lt;br /&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;col4&amp;nbsp;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;(&lt;span style="color: #800000; font-weight: bold"&gt;3&lt;/span&gt;),&lt;br /&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;&amp;nbsp;);&lt;br /&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;INSERT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;INTO&lt;/span&gt;&amp;nbsp;UnionTest1&amp;nbsp;&lt;span style="color: #0000ff"&gt;VALUES&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;AAA&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;),(&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;BBB&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;),(&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;CCC&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;INSERT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;INTO&lt;/span&gt;&amp;nbsp;UnionTest2&amp;nbsp;&lt;span style="color: #0000ff"&gt;VALUES&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;CCC&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;),(&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;DDD&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;),(&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;EEE&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080"&gt;16&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;17&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;18&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;PRINT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;测试&amp;nbsp;1,&amp;nbsp;Source&amp;nbsp;and&amp;nbsp;content&amp;nbsp;of&amp;nbsp;both&amp;nbsp;tables:&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;19&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;20&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&amp;nbsp;SourceTable,&amp;nbsp;col2&amp;nbsp;&lt;span style="color: #0000ff"&gt;AS&lt;/span&gt;&amp;nbsp;Value&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest1&lt;br /&gt;&lt;span style="color: #008080"&gt;21&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;UNION&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;ALL&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;22&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000; font-weight: bold"&gt;2&lt;/span&gt;,&amp;nbsp;col4&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest2;&lt;br /&gt;&lt;span style="color: #008080"&gt;23&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;24&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;25&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;PRINT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;测试&amp;nbsp;2,&amp;nbsp;Results&amp;nbsp;with&amp;nbsp;classic&amp;nbsp;UNION&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;26&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;27&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col2&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest1&lt;br /&gt;&lt;span style="color: #008080"&gt;28&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;UNION&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;29&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col4&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest2;&lt;br /&gt;&lt;span style="color: #008080"&gt;30&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;31&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;32&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;PRINT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;测试&amp;nbsp;3-1,&amp;nbsp;Results&amp;nbsp;with&amp;nbsp;EXCEPT&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;33&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;34&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col2&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest1&lt;br /&gt;&lt;span style="color: #008080"&gt;35&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;EXCEPT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;36&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col4&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest2;&lt;br /&gt;&lt;span style="color: #008080"&gt;37&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;38&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;39&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;PRINT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;测试&amp;nbsp;3-2,&amp;nbsp;Equivilent&amp;nbsp;of&amp;nbsp;EXCEPT&amp;nbsp;but&amp;nbsp;using&amp;nbsp;NOT&amp;nbsp;EXISTS&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;40&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;41&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col2&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest1&amp;nbsp;ut1&lt;br /&gt;&lt;span style="color: #008080"&gt;42&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;NOT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;EXISTS&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;43&lt;/span&gt;&amp;nbsp;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col4&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest2&amp;nbsp;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;col4&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;ut1.col2);&lt;br /&gt;&lt;span style="color: #008080"&gt;44&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;45&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;46&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;PRINT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;测试&amp;nbsp;4-1,&amp;nbsp;Results&amp;nbsp;with&amp;nbsp;INTERSECT&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;47&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;48&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col2&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest1&lt;br /&gt;&lt;span style="color: #008080"&gt;49&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;INTERSECT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;50&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col4&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest2;&lt;br /&gt;&lt;span style="color: #008080"&gt;51&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;52&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;53&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;PRINT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;测试&amp;nbsp;4-2,&amp;nbsp;Equivilent&amp;nbsp;of&amp;nbsp;INTERSECT&amp;nbsp;but&amp;nbsp;using&amp;nbsp;EXISTS&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;54&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;55&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col2&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest1&amp;nbsp;ut1&lt;br /&gt;&lt;span style="color: #008080"&gt;56&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;EXISTS&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;57&lt;/span&gt;&amp;nbsp;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col4&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest2&amp;nbsp;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&amp;nbsp;col4&amp;nbsp;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&amp;nbsp;ut1.col2);&lt;br /&gt;&lt;span style="color: #008080"&gt;58&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;59&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;60&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;PRINT&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;&lt;span style="color: #ff0000"&gt;测试&amp;nbsp;5,&amp;nbsp;INTERSECT&amp;nbsp;运算符优先于&amp;nbsp;EXCEPT&lt;/span&gt;&lt;span style="color: #ff0000"&gt;'&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;61&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col2&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest1&lt;br /&gt;&lt;span style="color: #008080"&gt;62&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;EXCEPT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;63&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col2&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest1&lt;br /&gt;&lt;span style="color: #008080"&gt;64&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;INTERSECT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;65&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&amp;nbsp;col4&amp;nbsp;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&amp;nbsp;UnionTest2;&lt;br /&gt;&lt;span style="color: #008080"&gt;66&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;67&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;68&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;Clean&amp;nbsp;up&amp;nbsp;after&amp;nbsp;ourselves&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;69&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008080"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;DROP&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt;&amp;nbsp;UnionTest1;&lt;br /&gt;&lt;span style="color: #008080"&gt;70&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;DROP&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt;&amp;nbsp;UnionTest2;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;fieldset&gt;&lt;legend style="padding-bottom: 3px; margin: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px"&gt;执行结果：&lt;/legend&gt;&lt;br /&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td valign="bottom"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/111001_02.jpg" width="156" height="140" /&gt;&lt;br /&gt;&lt;span style="font-size: 10pt"&gt;测试 1 结果&lt;/span&gt;　　　　　　&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td valign="bottom"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/111001_03.jpg" width="80" height="121" /&gt;&lt;br /&gt;&lt;span style="font-size: 10pt"&gt;测试&amp;nbsp;2 结果&lt;/span&gt;　　　&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td valign="bottom"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/111001_04.jpg" width="77" height="64" /&gt;&lt;br /&gt;&lt;span style="font-size: 10pt"&gt;测试&amp;nbsp;3-1、3-2 结果&lt;/span&gt;　&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td valign="bottom"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/111001_05.jpg" width="77" height="44" /&gt;&lt;br /&gt;&lt;span style="font-size: 10pt"&gt;测试&amp;nbsp;4-1、4-2 结果&lt;/span&gt;　&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td valign="bottom" colspan="2"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/111001_06.jpg" width="78" height="66" /&gt;&lt;br /&gt;&lt;span style="font-size: 10pt"&gt;测试&amp;nbsp;5 结果&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/fieldset&gt; &lt;br /&gt;如您所见，测试 3-1、3-2 的结果相同，测试 4-1、4-2 的结果也相同，但 SQL Server 的「评估的执行计划」很不同，且 EXCEPT / INTERSECT 的「查询开销」会比 NOT EXISTS / EXISTS 大很多，如同上例中，测试 3-1 比 3-2 的性能差，测试 4-1 比 4-2 性能差。而且经我测试 (书籍作者&amp;nbsp;[7])，大多数的情形，用 EXISTS 的写法，性能都比 EXCEPT / INTERSECT 要好。 &lt;br /&gt;&lt;br /&gt;&#xD;
&lt;p&gt;虽然如此，但我们不该完全舍弃 EXCEPT / INTERSECT 的使用，因为他们的语法简洁、容易阅读。因此在您的 SQL 语句中，除非两种写法的性能差距很大，不然我仍建议使用 EXCEPT / INTERSECT 写法，以便项目后续的维护。若论 EXISTS 和 EXCEPT / INTERSECT 哪一种写法较好，则属见仁见智的问题，端视您的数据量、执行环境、实测两种写法的效率差距，来决定要用哪一种写法。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc"&gt;参考文档： &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[1] EXISTS (Transact-SQL)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms188336.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ms188336.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[2] SQL 中 IN 和 EXISTS 用法的区别？&lt;br /&gt;&lt;a href="http://topic.csdn.net/u/20090715/10/ec21e6cc-7265-4c44-a35c-8a0003e73978.html" target="_blank"&gt;http://topic.csdn.net/u/20090715/10/ec21e6cc-7265-4c44-a35c-8a0003e73978.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[3] EXCEPT 和 INTERSECT (Transact-SQL)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms188055.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ms188055.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[4] UNION (Transact-SQL)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms180026.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ms180026.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[5] 与其他 Transact-SQL 语句一起使用 UNION、EXCEPT 和 INTERSECT&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms191523.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ms191523.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[6] 使用 EXCEPT 和 INTERSECT 执行半联接操作&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms191255.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ms191255.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;p&gt;&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc"&gt;参考书籍： &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[7] Professional Microsoft SQL Server 2008 Programming, Chapter 3&lt;br /&gt;&lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/Professional-Microsoft-SQL-Server-2008-Programming.productCd-0470257024.html" target="_blank"&gt;http://www.wrox.com/WileyCDA/WroxTitle/Professional-Microsoft-SQL-Server-2008-Programming.productCd-0470257024.html&lt;/a&gt;&lt;br /&gt;http://www.ppurl.com/pdfpreview/?skey=AQQHNgokAXRXMVA7UAxQP1Z0XTkJYwBtB2ZUZQI6UzQ%3D&amp;amp;page=0&lt;/p&gt;&#xD;
&lt;p&gt;&lt;p&gt;&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc"&gt;相关文章： &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[8] 探讨 .NET 4 新增的 SortedSet 类 (.NET 平台的 EXCEPT、INTERSECT)&lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/06/17/1759297.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2010/06/17/1759297.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/WizardWu/aggbug/2197147.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2011/10/01/2197147.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/WizardWu/archive/2011/01/15/1936076.html</id><title type="text">WCF 笔记 (3) - 懶人验证法与 MessageContract</title><summary type="text">实作最简单的 WCF 懶人验证方式，透过 SoapHeader 或 MessageContract 传送用户名、密码，以调用 WCF 服务。</summary><published>2011-01-14T21:46:00Z</published><updated>2011-01-14T21:46:00Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/WizardWu/archive/2011/01/15/1936076.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/archive/2011/01/15/1936076.html"/><content type="html">&lt;p&gt;&lt;font face="Times New Roman"&gt;实作最简单的 WCF 懶人验证方式，透过 SoapHeader 或 MessageContract 传送用户名、密码，以调用 WCF 服务。本帖最后，还附一个利用 MessageContract 处理表单提交的示例。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;-------------------------------------------------&lt;br /&gt;本帖的示例下载点：&lt;br /&gt;&lt;a href="http://files.cnblogs.com/WizardWu/101115.zip"&gt;http://files.cnblogs.com/WizardWu/101115.zip&lt;/a&gt;&lt;br /&gt;(执行本示例，需要 Visual Studio 2008，不需要数据库)&lt;br /&gt;---------------------------------------------------&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;我们都知道，WCF 有一套很完整的安全机制，例如可透过 SSL 保障传输层的安全、透过 Federation 加密和数位签章来保护信息本身、使用 Certificate 以跨域或跨平台传送凭证，甚至 WCF 4 还支持新的 WIF 框架以实现 SSO (Single Sign On) 单点登录 &lt;span style="color: #0000ff"&gt;[3]&lt;/span&gt;。&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;但若我们在企业的 Intranet 或局域网中，没有安全顾虑时 (信任自己公司或部门没有那么无聊的员工)，只想用最简单的明文 username、password 验证 (安全后果自负)，难道也非得创建：证书、SSL、&amp;#8230;及一堆安全性的配置，才能调用 ClientCredentials.UserName.UserName、ClientCredentials.UserName.Password 这些 API 吗？&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;我以前曾在论坛问过此问题 (听说问过相同问题的人很多)：&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;WCF 用户名、密码验证的设置问题：&lt;br /&gt;&lt;a href="http://topic.csdn.net/u/20101024/18/1e491713-46a1-412d-859b-453e49dad672.html?seed=181740069&amp;amp;r=69308273" target="_blank"&gt;http://topic.csdn.net/u/20101024/18/1e491713-46a1-412d-859b-453e49dad672.html?seed=181740069&amp;amp;r=69308273&lt;/a&gt;&lt;br /&gt;&lt;a href="http://space.cnblogs.com/q/19235/" target="_blank"&gt;http://space.cnblogs.com/q/19235/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;结论：最简单的做法，是不使用 ClientCredentials，直接把 username、password&amp;nbsp;添加到 SOAP Header 中，来实现身份验证。有兴趣的人可参考：&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;WCF进阶:为每个操作附加身份信息&lt;br /&gt;&lt;a href="http://www.cnblogs.com/jillzhang/archive/2010/04/11/1709397.html" target="_blank"&gt;http://www.cnblogs.com/jillzhang/archive/2010/04/11/1709397.html&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;在传统的 Web Service 也有同样的做法，可参考以下这篇文章。若 Web Service 有安全性顾虑的话，可使用 WSE (Web Services Enhancements) 来加强安全性。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;简单的 WebService 安全：&lt;br /&gt;&lt;a href="http://www.cnblogs.com/kuyijie/archive/2011/01/08/1930795.html" target="_blank"&gt;http://www.cnblogs.com/kuyijie/archive/2011/01/08/1930795.html&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;font face="Times New Roman"&gt;&#xD;
&lt;p&gt;&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;SOAP Header - 懶人验证法&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;前述 jillzhang 他用 SOAP Header 传递用户名、密码的做法： &lt;br /&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc"&gt;Server-side :&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
--&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;IService.cs&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;[ServiceContract]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;interface&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IService&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[OperationContract]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;getData(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;value);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('3b6985b4-7c76-4a7b-8017-d6f7768f4799')"&gt;&#xD;
&lt;br/&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Service&amp;nbsp;:&amp;nbsp;IService&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;getData(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;value)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;username&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;""&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;pwd&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;""&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OperationContext.Current.IncomingMessageHeaders.FindHeader(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;username&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;http://tempuri.org&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;username&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OperationContext.Current.IncomingMessageHeaders.GetHeader&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(index).ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OperationContext.Current.IncomingMessageHeaders.FindHeader(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;pwd&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;http://tempuri.org&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;pwd&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OperationContext.Current.IncomingMessageHeaders.GetHeader&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(index).ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.Format(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;您输入了:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;value&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;,&amp;nbsp;&amp;lt;br&amp;gt;&amp;nbsp;帐号:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;username&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;,&amp;nbsp;密码:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;pwd);&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;span style="color: #000000"&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&lt;span style="color: #000000"&gt;&#xD;
&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc"&gt;Client-side :&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('98e86363-b08a-4b96-8e70-8737143fbe95')"&gt;&#xD;
&lt;br/&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel.Channels;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;partial&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;_Default&amp;nbsp;:&amp;nbsp;System.Web.UI.Page&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Page_Load(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServiceReference1.ServiceClient&amp;nbsp;svc&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ServiceReference1.ServiceClient();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(OperationContextScope&amp;nbsp;scope&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OperationContextScope(svc.InnerChannel))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;MessageHeader&amp;nbsp;header&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;MessageHeader.CreateHeader(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;username&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;http://tempuri.org&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;WizardWu&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&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;OperationContext.Current.OutgoingMessageHeaders.Add(header);&lt;br /&gt;&lt;br /&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;header&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;MessageHeader.CreateHeader(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;pwd&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;http://tempuri.org&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&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;OperationContext.Current.OutgoingMessageHeaders.Add(header);&lt;br /&gt;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;res&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;svc.getData(&lt;/span&gt;&lt;span style="color: #800080"&gt;10&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&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;Response.Write(res);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/110115_01.jpg" width="222" height="87" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 1　执行画面&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;MessageContract 实际应用 1 - 懶人验证法&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;&lt;br /&gt;同样的身份验证功能，我们也可透过 MessageContract 类 &lt;span style="color: #0000ff"&gt;[5] &lt;/span&gt;来处理，将其包装得更漂亮，亦即可指定 SOAP envelope 的结构，然后就可用 message 作为参数或返回类型，并且在不修改默认 SOAP envelope 本身的情况下，来控制 SOAP body 内容序列化的信息。&lt;/p&gt;&#xD;
&lt;p&gt;MessageContract (消息契约) 对格式化 SOAP 消息，提供了有效的控制。虽然在许多情况下，DataContract (数据契约) 已提供了用户需要的大部分控制，但若需要更灵活地控制，可再加上 MessageContract 来辅助处理，如：允许用户将指定的类型映射到 SOAP 消息，并添加定制的 SOAP Header &lt;span style="color: #0000ff"&gt;[&lt;/span&gt;&lt;span style="color: #0000ff"&gt;7]&lt;/span&gt;&lt;span style="color: #0000ff"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;以下为 MCTS 70-503&amp;nbsp;WCF 认证，微软官方教程书籍 &lt;span style="color: #0000ff"&gt;[6]&lt;/span&gt; 所述：&lt;/p&gt;&#xD;
&lt;p&gt;Data contracts enable you to define the structure of the data that will be sent in the body of your SOAP messages, either in the &lt;span style="color: #ff0000"&gt;inbound (request)&lt;/span&gt; messages or in the &lt;span style="color: #ff0000"&gt;outbound (response)&lt;/span&gt; messages. WCF Message contracts take it one step higher, when you use a Message contract as both the operation &lt;span style="color: #ff0000"&gt;parameter type&lt;/span&gt; and the &lt;span style="color: #ff0000"&gt;return type&lt;/span&gt;, you gain control over the entire SOAP message and not just over the structure of the data in the body. The following are the primary reasons you might want to use Message contracts :&lt;/p&gt;&#xD;
&lt;p&gt;* To control how the SOAP message body is structured and, ultimately, how it is serialized.&lt;br /&gt;* To supply and access custom headers.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;用 MessageContract 并透过其可「包装」的特性，我们可包装欲传递的用户名、密码，以及包装从服务器返回的信息，如下代码的 ContactInfoRequestMessage、ContactInfoResponseMessage 自定义类&amp;nbsp;(将这些类、接口都写在同一个 .cs 文件里，是不好的设计模式，这里只是为了演示方便)：&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc"&gt;Server-side :&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('27e9ae30-5d4f-464e-8c1e-1839a8318855')"&gt;&#xD;
&lt;br/&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Runtime.Serialization;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;[ServiceContract]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;interface&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IService&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[OperationContract()]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[FaultContract(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;))]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ContactInfoResponseMessage&amp;nbsp;GetProviderContactInfo(ContactInfoRequestMessage&amp;nbsp;reqMsg);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[DataContract]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ContactInfo&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[DataMember()]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;PhoneNumber;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[DataMember()]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;EmailAddress;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[MessageContract(IsWrapped&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;)]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ContactInfoRequestMessage&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[MessageHeader()]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;id;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[MessageHeader()]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;pwd;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[MessageContract(IsWrapped&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;)]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ContactInfoResponseMessage&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[MessageBodyMember()]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ContactInfo&amp;nbsp;ProviderContractInfo;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('661125ac-dc33-4374-82b4-0b61133d0571')"&gt;&#xD;
&lt;br/&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Service&amp;nbsp;:&amp;nbsp;IService&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;username&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;WizardWu&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;pwd&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ContactInfoResponseMessage&amp;nbsp;GetProviderContactInfo(ContactInfoRequestMessage&amp;nbsp;reqMsg)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;((reqMsg.id&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;!=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;username)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;||&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(reqMsg.pwd&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;!=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;pwd))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;const&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;msg&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;用户名、密码输入错误~~&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;throw&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FaultException&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(msg);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;返回信息。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;透过&amp;nbsp;MessageContract&amp;nbsp;包装&amp;nbsp;ContactInfoResponseMessage&amp;nbsp;自定义类及其成员，&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;并包装真正存储数据的&amp;nbsp;DataContract&amp;nbsp;自定义类&amp;nbsp;ContactInfo&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ContactInfoResponseMessage&amp;nbsp;respMsg&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ContactInfoResponseMessage();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;respMsg.ProviderContractInfo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ContactInfo();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;respMsg.ProviderContractInfo.EmailAddress&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;test@mail.com&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;respMsg.ProviderContractInfo.PhoneNumber&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;0512-67891234&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;respMsg;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc"&gt;Client-side :&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('021f524e-2e5d-4d63-af05-af34c76e1a00')"&gt;&#xD;
&lt;br/&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;partial&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;_Default&amp;nbsp;:&amp;nbsp;System.Web.UI.Page&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Page_Load(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServiceReference1.ServiceClient&amp;nbsp;svc&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ServiceReference1.ServiceClient();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;透过&amp;nbsp;MessageContract&amp;nbsp;包装&amp;nbsp;ContactInfoRequestMessage&amp;nbsp;自定义类及其成员，让使用者输入用户名、密码&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&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;ServiceReference1.ContactInfo&amp;nbsp;ci&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;svc.GetProviderContactInfo(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;WizardWu&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123456&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&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;Response.Write(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;电子邮件：&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ci.EmailAddress&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;lt;br&amp;gt;&amp;nbsp;电话号码：&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ci.PhoneNumber);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(FaultException&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;Response.Write(ex.Detail);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;印出「用户名、密码输入错误~~」&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(Exception&amp;nbsp;ex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;Response.Write(ex.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/110115_02.jpg" width="349" height="93" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 2　执行画面，输入了正确的用户名、密码，便可从 Server-side 取得想要的信息 (邮件、电话号码) &lt;/span&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/110115_03.jpg" width="368" height="69" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 3　执行画面，输入了错误的用户名、密码&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;NOTE: Message contracts must be used all or none&lt;/strong&gt;&lt;br /&gt;There isn't any partial usage of Message contracts. After you introduce a Message contract into an operation's signature, you must use a Message contract as the "only" &lt;span style="color: #ff0000"&gt;parameter type&lt;/span&gt; "and" as the &lt;span style="color: #ff0000"&gt;return type&lt;/span&gt; of the operation. This is in contrast with the more typical scenario in which you have a &lt;span style="color: #ff0000"&gt;parameter list&lt;/span&gt; or &lt;span style="color: #ff0000"&gt;return value composed of Data contracts or serializable types.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Supplying Custom Headers&lt;/strong&gt;&lt;br /&gt;You might sometimes need to send along private elements in your SOAP messages, and defining Message contracts supports this. Two common reasons for doing this are that :&lt;br /&gt;* You have your own security mechanism in place, so you need to pass along your own authentication token in a private SOAP header.&lt;br /&gt;* Consumers of your service might have to include some sort of license key (例如上方示例的用户名和密码) to access the service at run time. In such cases, a SOAP header is a reasonable place for such a field.&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;MessageContract 实际应用 2 - 订单提交&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;p&gt;接下来我们看 MessageContract 在实务上的另一种应用 - 网上书店的订单处理 &lt;span style="color: #0000ff"&gt;[7]&lt;/span&gt;。本例中，定义了包含订书信息的 MessageContract，其会在 Server-side 和 Client-side 之间传递。如下 IService.cs 的代码，这个 BookOrder 的 message，成员包含一个消息头，和五个消息体。&lt;/p&gt;&#xD;
&lt;p&gt;头部包含了书的 ISBN 号，体包含了订单提交者的信息。订单提交后，会将此消息传递至 WCF Service，经过处理后，会把订单编号 (00012345678) 传回到客户端浏览器中显示。&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;示例的核心，在于 Service.cs 里的 WCF 服务，若系统将来需要修改 Server-side 逻辑，直接修改即可，不需要重新编译。若有宿主 (Host) 应用程序，也不用修改该个宿主应用程序。&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc"&gt;Server-side :&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('2e4a6721-ad42-45d4-a595-0ec17ba622cd')"&gt;&#xD;
&lt;br/&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Runtime.Serialization;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;[ServiceContract]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;interface&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IService&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[OperationContract]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;InitiateOrder();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[OperationContract()]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BookOrder&amp;nbsp;PlaceOrder(BookOrder&amp;nbsp;request);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[OperationContract]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FinalizeOrder();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[MessageContract(IsWrapped&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;)]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;BookOrder&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;isbn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;quantity;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;firstname;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;lastname;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;address;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ordernumber;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;BookOrder()&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;BookOrder(BookOrder&amp;nbsp;message)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.isbn&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;message.isbn;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.quantity&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;message.quantity;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.firstname&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;message.firstname;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.lastname&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;message.lastname;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.address&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;message.address;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;this.ordernumber&amp;nbsp;=&amp;nbsp;message.ordernumber;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[MessageHeader]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ISBN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;isbn;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;isbn&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;value;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[MessageBodyMember(Order&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Quantity&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;quantity;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;quantity&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;value;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[MessageBodyMember(Order&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FirstName&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;firstname;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;firstname&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;value;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[MessageBodyMember(Order&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;LastName&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;lastname;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;lastname&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;value;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[MessageBodyMember(Order&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;4&lt;/span&gt;&lt;span style="color: #000000"&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Address&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;address;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;address&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;value;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[MessageBodyMember(Order&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OrderNumber&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ordernumber;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&amp;nbsp;ordernumber&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;value;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('339e851d-afb1-4d97-afe4-7531bd291a4e')"&gt;&#xD;
&lt;br/&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Service&amp;nbsp;:&amp;nbsp;IService&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IService.InitiateOrder()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;开始处理订单...&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;进度显示「开始处理订单...」&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;BookOrder&amp;nbsp;PlaceOrder(BookOrder&amp;nbsp;request)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;here&amp;nbsp;you&amp;nbsp;could&amp;nbsp;do&amp;nbsp;something&amp;nbsp;with&amp;nbsp;the&amp;nbsp;information&amp;nbsp;passed&amp;nbsp;in&amp;nbsp;to&amp;nbsp;place&amp;nbsp;the&amp;nbsp;order.&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BookOrder&amp;nbsp;response&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;BookOrder(request);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response.OrderNumber&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;00012345678&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;系统给的订单编号&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;response;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IService.FinalizeOrder()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;您的订单已订购成功！&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;进度显示「您的订单已订购成功！」&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc"&gt;Client-side :&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('f4d8cc3f-4477-498a-a39f-e637290b2c89')"&gt;&#xD;
&lt;br/&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
--&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;form&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="form1"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ISBN:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="TextBox_isbn"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;数量:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="TextBox_quantity"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;名字:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="TextBox_firstname"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;姓氏:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="TextBox_lastname"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;地址:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="TextBox_address"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;订单编号(由系统自动带入):&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="TextBox_ordernumber"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;ReadOnly&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;BackColor&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Silver"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;br&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Button&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Button1"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;Text&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="提交订单"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;onclick&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Button1_Click"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Label&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Label_Progress"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;ForeColor&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Red"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Label&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;form&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('7560f90a-a075-4fff-be41-f6288f158d38')"&gt;&#xD;
&lt;br/&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/&gt;&#xD;
&lt;br/&gt;&#xD;
--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;partial&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;_Default&amp;nbsp;:&amp;nbsp;System.Web.UI.Page&amp;nbsp;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Page_Load(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&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;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Button1_Click(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServiceReference1.ServiceClient&amp;nbsp;svc&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ServiceReference1.ServiceClient();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServiceReference1.BookOrder&amp;nbsp;bo&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ServiceReference1.BookOrder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bo.ISBN&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;TextBox_isbn.Text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bo.Quantity&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Convert.ToInt32(TextBox_quantity.Text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bo.FirstName&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;TextBox_firstname.Text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bo.LastName&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;TextBox_lastname.Text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bo.Address&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;TextBox_address.Text;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;Label_Progress.Text&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;svc.InitiateOrder();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;进度显示「开始处理订单...」&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&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;ServiceReference1.BookOrder&amp;nbsp;reply&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;((ServiceReference1.IService)svc).PlaceOrder(bo);&lt;br /&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;TextBox_ordernumber.Text&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;reply.OrderNumber;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;Server-side&amp;nbsp;系统给的订单编号&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&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;Label_Progress.Text&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;svc.FinalizeOrder();&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;进度显示「您的订单已订购成功！」&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(Exception&amp;nbsp;ex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;Label_Progress.Text&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;订购过程发生错误！&amp;lt;br&amp;gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ex.Message;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/110115_04.jpg" width="382" height="236" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 4　执行画面，订单提交成功的画面&lt;/span&gt; &#xD;
&lt;p&gt;&lt;br /&gt;此示例中，用户在表单里填写的信息，会借由「消息头 (MessageHeader)」和「消息体 (MessageBodyMember)」传送。提交后，系统会返回一个订单编号。若提交成功，最后会有反馈信息，可让用户知道已正确提交了订单。&lt;/p&gt;&#xD;
&lt;p&gt;此例还可加入其他应用，提交后除了返回一个订单编号，还可再扩展来完成更多工作，如：验证书籍库存数量是否足够、查找书名信息 ...等。&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;相关文章&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;[1] WCF分布式安全开发实践(10):消息安全模式之自定义用户名密码:Message_UserNamePassword_WSHttpBinding&lt;br /&gt;&lt;a href="http://www.cnblogs.com/frank_xl/archive/2009/08/12/1543867.html" target="_blank"&gt;http://www.cnblogs.com/frank_xl/archive/2009/08/12/1543867.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[2] WCF问题(10):如何配置不启用安全的WCF服务？&lt;br /&gt;&lt;a href="http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/e5d6e169-bb86-43df-8b13-9d4bead33cba" target="_blank"&gt;http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/e5d6e169-bb86-43df-8b13-9d4bead33cba&lt;/a&gt;&lt;br /&gt;&lt;a href="http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/2f95f41c-430d-495a-b55b-245922fc63fe" target="_blank"&gt;http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/2f95f41c-430d-495a-b55b-245922fc63fe&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[3] WCF 4 安全性和 WIF 简介 &lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/10/04/1841793.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2010/10/04/1841793.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[4] Security - SSL (繁体中文)&lt;br /&gt;&lt;a href="http://sites.google.com/site/stevenattw/dot-net/wcf/security-SSL" target="_blank"&gt;http://sites.google.com/site/stevenattw/dot-net/wcf/security-SSL&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[5] MessageContractAttribute 类&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagecontractattribute.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagecontractattribute.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms732038.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ms732038.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;参考书籍&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;[6] MCTS 70-503 - Microsoft .NET 3.5 Windows Communication Foundation, Chapter 1&lt;br /&gt;&lt;a href="http://www.silverlightchina.net/html/download/books/2009/1110/235.html" target="_blank"&gt;http://www.silverlightchina.net/html/download/books/2009/1110/235.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[7] Professional WCF Programming, Chapter 6&lt;br /&gt;&lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/Professional-WCF-Programming-NET-Development-with-the-Windows-Communication-Foundation.productCd-0470089849.html" target="_blank"&gt;http://www.wrox.com/WileyCDA/WroxTitle/Professional-WCF-Programming-NET-Development-with-the-Windows-Communication-Foundation.productCd-0470089849.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&lt;img src="http://www.cnblogs.com/WizardWu/aggbug/1936076.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2011/01/15/1936076.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/WizardWu/archive/2011/01/09/1931361.html</id><title type="text">小公司的 ERP 或数据库, 该用 PC 还是 Server</title><summary type="text">客户很穷或老板很小气，公司的网站、ERP 或数据库，是否可改用 PC 取代 Server？大型企业、国营企业、金融业不会有上述问题，不过为数众多的中小型企业、中小型项目，您就要有能力帮他们评估。</summary><published>2011-01-09T12:09:00Z</published><updated>2011-01-09T12:09:00Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/WizardWu/archive/2011/01/09/1931361.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/archive/2011/01/09/1931361.html"/><content type="html">&lt;p&gt;&lt;font face="Times New Roman"&gt;客户很穷或老板很小气，公司的网站、ERP 或数据库，是否可改用 PC 取代 Server？大型企业、国营企业、金融业不会有上述问题，不过为数众多的中小型企业、中小型项目，您就要有能力帮他们评估。也欢迎大家分享自己的经验和看法。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;&lt;br /&gt;目录：&lt;br /&gt;(一) 综合观念&lt;br /&gt;(二) ERP 系统，该用 PC 还是 Server&lt;br /&gt;(三) 数据库服务器，该用 PC 还是 Server&lt;/font&gt;&lt;/p&gt;&lt;font face="Times New Roman"&gt;&#xD;
&lt;p&gt;&lt;br /&gt;本文可视为以下几篇帖子的延伸阅读：&lt;/p&gt;&#xD;
&lt;p&gt;(一) 论地震、雷击和个人数据备份 (IDE、SATA、SCSI 与 SAS)&lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2008/07/24/1250836.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2008/07/24/1250836.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;(二) 30 分钟快快乐乐学 SQL Performance Tuning&lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2008/10/27/1320055.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2008/10/27/1320055.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;(三) 网站性能越来越差怎么办？ &lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2009/01/03/1367527.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2009/01/03/1367527.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;(四) 用 IIS 7、ARR 與 Velocity 建设高性能的大型网站&lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2009/05/16/1458108.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2009/05/16/1458108.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;(五) 网站性能优化 - 数据库及服务器架构篇&lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2009/09/22/1571499.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2009/09/22/1571499.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;(一) 综合观念&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;服务器的应用一般来说，最多是用在网站的服务，像互联网上有各式各样的服务，如: 在线游戏、入口网站、购物网站、音乐下载...等等。每一个用户在计算机前轻轻地点击鼠标，代表着后端数以百计的服务器同时运作，并且将使用者的需求，经由一连串复杂的计算，最后将成果呈现在他们面前。有关网络上应用服务器大致的分类及建议规格 &lt;span style="color: #0000ff"&gt;[1]&lt;/span&gt;，兹列举如下：&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;1. &lt;span style="background-color: #ffff99"&gt;邮件服务器：&lt;/span&gt;基本上邮件服务器的应用非常简单，CPU 及内存都不需要太好的规格，比较重要的是硬盘的选择。邮件服务器的软件工作比较简单，因此可以使用单 CPU 的机器，搭配 4 GB 的内存，使用 RAID Card，搭配 4 颗硬盘做个 RAID，以保存数据为主。除非使用人数多到一定数量，例如 500 人以上，才会建议增加 CPU 及内存的规格。&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;2. &lt;span style="background-color: #ffff99"&gt;防毒、防垃圾邮件服务器：&lt;/span&gt;基本上这一类的服务器，不会是用户自行安装，一般都是软件公司开发各自的软件，再将软件安装在服务器上，以整套提供给客户居多。这样的机器，硬件并非重点，软件的性能才是主要的考量。以一般的售价来讲，硬件应该占不到 1/3。硬件的需求等级跟邮件服务器差不多。&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;3. &lt;span style="background-color: #ffff99"&gt;网站服务器：&lt;/span&gt;网站服务器可分为「公司内部用」，或提供给「外部使用者使用」。若为「公司内部用」，其硬件也是基本款就可以，当然若是大公司、多达百人以上的规模，且有在使用公司内部入口网站 (EIP) 的话，又另当别论了。但若是给「外部使用者使用」的话，架构上就要有所不同。假设公司是一个购物网站，每天有几万人造访，这时要考虑的已不是单一服务器的规格问题，而是整个架构的问题，服务器的硬件一般来说要双 CPU 机种，搭配 4 GB 或是 8 GB 内存，简单的一颗硬盘就可以了，要不然就是两颗硬盘做个简单的 Mirror RAID。但是网站的服务，应由一整个服务器群集 (Server Farm) 来担任，在这些服务器群集的前端，必须有一台服务器担任 Load Balancing (负载均衡) 装置，负责监控服务器群集中所有服务器的负载，以决定一旦有流量进入时，要将其导向哪一台特定的服务器，也因此每一台服务器并不需要有双电源等多余的规格。即使服务器停止运作，因为前端的负载均衡机器仍继续在动作，就不会将流量导至没有响应的服务器。换言之，网站服务器重要的是服务器的数量，而不是单一服务器的能力。&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;4. &lt;span style="background-color: #ffff99"&gt;数据库服务器：&lt;/span&gt;服务器里面最重要的就是数据库服务器了，数据库等同公司的命脉，也是一家公司最重要的资产。双 CPU 甚至 4 CPU 会是比较推荐的机种，内存也应有 32 GB 以上，甚至到 128 GB 或是 256 GB，端看数据量的大小。硬盘部分更是重要，稳定性高的 SAS 硬盘是比较好的选择，且一定要搭配 SAS Raid Card，一方面增加数据存储的稳定性，一方面加快数据处理的速度。但是基于安全性的考虑，数据备份的观念绝对要有，因为资料是无价的，多备份几份还是比较安全一点。数据库服务器是我唯一认为会需要双电源的服务器。&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;5. &lt;span style="background-color: #ffff99"&gt;PROXY 服务器：&lt;/span&gt;PROXY 服务器一般就是利用大量的内存，做一个缓存的服务器，加快使用者在网页访问时的速度，一般就是用 32 GB 到 64 GB 左右的内存。若为双 CPU 机种，一颗硬盘即可。&lt;/p&gt;&#xD;
&lt;p&gt;一般服务器零件的挑选，CPU 很少用到多高的等级，入门款一般就够了，内存则要看是哪一种服务器的使用来决定。硬盘部分，由于 SAS 还是具有高转速、高稳定的特性，在比较重要的工作上，还是倾向用 SAS 硬盘，SATA 则是容量取胜。至于电源方面，一般单电源就可以了，但是其实市场上有不少人喜欢用双电源机种，认为双电源多了一层的保护，其实也不尽然。双电源机种一般比单电源机种贵了上万元 (台币)，其实电源的故障机率一般是在 2 % 左右，且即使是双电源机种，电源内部与机器接头的地方，还是只有一组，不见得能提供多少的保护。其实一个大型网站的架设，还是整体架构需要比较多心思，必须做到每一台服务器都能够容许错误 (HA, High-available ; Failover)，才不会因为单点的故障造成整个服务都停摆。如果以金额来计算，光是 20 台服务器采用双电源架构，成本至少要多出 20 万元左右 (台币)，以这样的金额，足以部署大约 4 到 5 台的服务器了。所以双电源的采用，其实有时候是一种浪费。&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;6. &lt;span style="background-color: #ffff99"&gt;文件服务器：&lt;/span&gt;顾名思义，其实文件服务器就是拿来当作文件的存放与分享，因此注重的是数据的安全性，应考虑的是硬盘的采用，并做好数据的备份，至于 CPU 及内存则是其次了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;(二) ERP 系统，该用 PC 还是 Server&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;问题：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;使用人数不多的 ERP 系统，约 50 人以内 (有同时在线的可能)，机器为 AP Server + SQL Server 共两台，应注重哪些规格？&lt;/p&gt;&#xD;
&lt;p&gt;survey 的结果是 workflow 算是吃系统资源很重的系统。那 AP server 的 CPU 等级？有需要规划 SSD 吗？&lt;/p&gt;&#xD;
&lt;p&gt;数据库用 SQL Server，存储方面会考虑用 4 颗硬盘做 Raid 0 + 1，至于硬盘的等级还在评估，有合适的建议吗？&lt;br /&gt;补充一下，小公司，老板下令，希望能用自己组装的 PC。&lt;/p&gt;&#xD;
&lt;p&gt;----------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;回答一：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;常常有人拿「自组 PC」跟「品牌 SERVER」来比。&lt;br /&gt;单以性能来讲，4 万元的 PC 跟 10 几万元 (台币) 的品牌 SERVER 差不多，但这个性能能持续多久 ?&lt;br /&gt;因为 SERVER 是要 24 HR 开机的，自组 PC 能 24 HR 开机多久 ?&lt;br /&gt;品牌 SERVER 可以保证 24 HR 开机 5 ~ 7 年，性能仍跟开始一样 !&lt;br /&gt;更不用说品牌 SERVER 有良好的售后服务、稳定性 !&lt;/p&gt;&#xD;
&lt;p&gt;AP server 是计算用的，所以 CPU 等级要够 !&lt;/p&gt;&#xD;
&lt;p&gt;----------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;回答二：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我个人经验，给您一些建议。&lt;/p&gt;&#xD;
&lt;p&gt;SQL Server 的 CPU，建议「频率」不用高，但核数越多越好。内存尽量加，一定要用磁盘阵列卡, 系统 x64 的才能发挥内存管理能力, 网络卡好一点。&lt;/p&gt;&#xD;
&lt;p&gt;AP Server 的 CPU 建议双核就好，频率能多高就多高，内存 2 G 够用就好，磁盘单颗 SSD 容量不用太大，网络卡好一点。&lt;/p&gt;&#xD;
&lt;p&gt;最后良心建议，品牌 Server 老实讲，若你会杀价不会贵到哪去。而且重要的是系统零组件，彼此的「电气」兼容性要高，不然初期看不出来，好像没差，但是一两年后出现莫名的硬件错误就不好玩了。&lt;/p&gt;&#xD;
&lt;p&gt;----------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;回答三：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;虽然大部分的资深 IT 专家, 都不赞同楼主的做法, 不过, 人家也只是拿钱办事, 真正要被教育的应该是出钱的老板. 如果木已成舟, 我们怎么说也无法改变老板的想法. 但是在此, 还是要提醒楼主该思考一下这些事情 :&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;1. 如何厘清软件与硬件的责任分界?&lt;/p&gt;&#xD;
&lt;p&gt;如果今天 ERP 上线跑, 结果性能远不如预期, 你要求软件公司改善, 软件公司却说:「这都是你硬件的问题, 要不然, 你看我们其他客户都跑得好好的...」, 请问你该怎么办?&lt;/p&gt;&#xD;
&lt;p&gt;通常在第一次导入一个不熟悉的系统时, 势必要有一个经验熟练的顾问, 提供你软硬件搭配的建议规模, 也就是 sizing 作业 (Server+Storage sizing spec). 这个顾问不一定是谁, 如果你有经验, 可以自己估, 你没经验, 可以叫软件公司估, 两边都不敢估, 可以外聘第三方顾问来估. &lt;/p&gt;&#xD;
&lt;p&gt;但是, 估算的人, 就要扛下这个责任, 将来硬件跑不动, 要负责把它调整到可以动, 而且不能多花钱.&lt;/p&gt;&#xD;
&lt;p&gt;以楼主目前的描述, 我看不出来是谁要来负这个责任? 这样, 万一将来因为硬件因素而导入失败, 你可以对软件公司说: 「我不要验收」吗?&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;2. 贵公司导入 ERP 之后, 能允许停机多久?&lt;/p&gt;&#xD;
&lt;p&gt;「大公司」的 ERP 可能是 24 hr 运转, 完全不能停机 ; 楼主老板自许「小公司」, 不知能停多久?&lt;br /&gt;一般的状况通常是: ERP 停机多久, 生产线就停产多久. 所以等于问老板: 你能容忍生产线停多久?&lt;/p&gt;&#xD;
&lt;p&gt;使用品牌服务器, 都有硬件到场维修保固, 一来换东西不用钱, 二来维修人员是到场服务, 不需要 IT 人员自己跑出去买, 三来最重要的: 可以保证修复的时间. 不论你买的保固是 5x8 或 7x24, 四小时到场或是 NBD 隔日到场, 通常在 24 hr 之内, 都可以恢复运转.&lt;/p&gt;&#xD;
&lt;p&gt;自己组的话, 你就要自己担负这个维修责任, 东西坏了要先请款采购. 送维修的话, 除了要自己送, 还得等上至少一周以上才会回来..... 生产线可以停一周吗?.... 不能的话, 你有权限可以下紧急采购吗?... 又不能的话, 你有那个胆量去说服上级主管, 帮你签紧急采购吗?....&lt;/p&gt;&#xD;
&lt;p&gt;就算真的可以, 从你下紧急采购到财务部同意拨款, 中间要花多少时间? 要浪费你多少口舌去解释?&lt;/p&gt;&#xD;
&lt;p&gt;如果买紧急采购回来的零件, 装上去之后才发现: 嗯? 原来不只这个坏掉, 还有其他的也坏了?...&lt;/p&gt;&#xD;
&lt;p&gt;最大的问题是: 通常 DIY 零件的同型号库存, 原厂只会备 1 ~ 2 年 (服务器备品库存至少 5 年, 且只要你续签保固, 就会继续备下去), 如果不幸你的主板故障, 结果买不到同款主板, 必须换新时, 你的 RAM / CPU 旧规格还可以上得去吗? 就算上得去, 你的 OS 能正常开机吗?&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;3. 合理的硬件投资应该是多少?&lt;/p&gt;&#xD;
&lt;p&gt;老板以「小公司」为借口, 来压低 IT 预算, 代表老板还无法充分体会 IT 所带来的工作效率提升.&lt;/p&gt;&#xD;
&lt;p&gt;以我的「小」客户为例 :&lt;/p&gt;&#xD;
&lt;p&gt;* 松x路某贸易公司, 30~40 人, 全部的服务器都是 IBM.&lt;br /&gt;* 博x区某物流配销商, 40~60 人, 10 台服务器大部分是 Asus, 但核心业务的软件都用 IBM&lt;br /&gt;* 北县某电子 OEM 公司, 100人, 几台 DIY 主机, 一台 HP. 上个月又采购了 4 台 Dell&lt;br /&gt;* 信x区某电子维修公司, 40 人, ERP / SQL 主机全部都使用 IBM&lt;br /&gt;* 北县某设计装潢公司, 20 人, 以前用两台 IBM 主机, 去年又买一台 Dell 主机&lt;br /&gt;* ......&lt;/p&gt;&#xD;
&lt;p&gt;还有太多太多「小」公司, 虽然它们也会混用 DIY 主机, 但只要是公司关键业务, 一定用品牌服务器.&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;一般如果客户对 ERP 没有概念的话, 我会先请客户这样估算费用 :&lt;br /&gt;1 : 2 : 7 = 硬件 : 软件 : 顾问&lt;/p&gt;&#xD;
&lt;p&gt;有些软件公司可能会将软件和顾问全包, 或是顾问的程度不需要那么重的话 :&lt;br /&gt;3 : 7 = 硬件 : 软件 + 顾问&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;----------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;回答四：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;补充一些些 ~&lt;/p&gt;&#xD;
&lt;p&gt;通常~ 在公司引进 ERP 之后，ERP 就会变成维持公司运转的基石。&lt;br /&gt;你先想想，也估算看看 ERP 一天会跑多少表单。&lt;/p&gt;&#xD;
&lt;p&gt;若 ERP 故障停机，这些表单有可能全部转为人工操作，能在正常时间内解决？&lt;/p&gt;&#xD;
&lt;p&gt;若发生在出货前夕 ? 该出货却没出货、客户转单，你要负责 ?&lt;br /&gt;若刚好发生在月底结帐时 ?&lt;br /&gt;...&lt;br /&gt;难道你要说明，系统停摆是因为老板要用 DIY PC 的方式来架构 ERP 的吗 ?&lt;/p&gt;&#xD;
&lt;p&gt;总而言之 ~ 你不被砍死才怪 !&lt;/p&gt;&#xD;
&lt;p&gt;建议你 ... 最好不要用「玩玩看、经验学习的心态」来处理 ERP。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;(三) 数据库服务器，该用 PC 还是 Server&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;问题：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;公司现行的 DB Server 是安装在一台 PC 上，目前不太够力。老板要我采购一台，我比较困扰的是，我该选个高档的 PC 来用，还是选所谓的服务器呢? 我上过 DELL 的网站，感觉如果我不是非得选 Xeon 的话，PC 与 Server 价钱差不多(吧?) 各位可以给个建议吗?&lt;/p&gt;&#xD;
&lt;p&gt;目前的需求是，RAM 至少 8G，硬盘要 1 TB 以上。CPU 当然愈快愈好，但我搞不太清楚，是 i7 快呢，还是 XEON 5500 ? 还是根本不能比? 还有，DELL 的 Server 评价如何? 上网买 Server，还有别的选择吗?&lt;/p&gt;&#xD;
&lt;p&gt;还有，备份的 solution, 好像大部份都是用磁带，但听说还原时很麻烦。老板要我买蓝光刻录机来做备份， 请问这个方案有没有什么缺点? 有没有其他的建议?&lt;/p&gt;&#xD;
&lt;p&gt;----------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;回答一：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当 Server 的必要条件有几个:&lt;/p&gt;&#xD;
&lt;p&gt;1. ECC RAM (能自动修正内存错误)&lt;br /&gt;2. Redundant Power Supply (备用电源)&lt;br /&gt;3. Remote KVM Console (能远程操作 BIOS, 遥控开机)&lt;br /&gt;4. 7x24 or 5x8 / 四小时到场维修服务 (保固内, 可当场免费换新品)&lt;/p&gt;&#xD;
&lt;p&gt;先具备以上的条件, 再来挑其他甚么: CPU 够不够快, 硬盘够不够大等, 细节的问题....&lt;br /&gt;CPU 再快, 硬盘再大, 若是动不动就给你来个当机, 或是没料可以换, 公司业务还是停摆.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;备份的问题要从长计议 :&lt;br /&gt;您要在线备份? 还是停机备份?&lt;br /&gt;数据库要如何备份? 在线快照备份? 还是先产生 .bak 文件再来备份? 还是要停机下来备份?&lt;br /&gt;您要用哪一套备份软件来备份? 它可以支持用 BR-ROM 蓝光的设备备份吗?&lt;/p&gt;&#xD;
&lt;p&gt;备份最简单的方式, 有人是用 MS SQL Server 本身的 backup 备份成 bak 文件, 再用 rar 压缩, 然后人工刻录成光盘.&lt;br /&gt;如果数据量不大, 这样的作业模式还可以应付. 只是要随时注意数据库长大的速度, 预先想好备案.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;此外, 选 PC 或 Server, 还有一个很大的不同点: 厂商备品的库存周期.&lt;/p&gt;&#xD;
&lt;p&gt;通常 Server 的零件, 至少都保证库存 5 年, 不用担心因为更换了不同型号的零件, 造成无法开机的情况. 但若是 PC, 其汰换周期太快, 通常只会库存 1 ~ 2 年的零件, 将来如果故障无法取得相同零件时, 维修人员自己要承担软硬件不兼容的风险.&lt;/p&gt;&#xD;
&lt;p&gt;如果跟大厂买 Server 的话, 只要您有续买硬件保固, 不管几年, 保固期内原厂都可以保证有备品可以更换, 即使备品型号不同, 原厂也会保证换上去一定可以动, 或是告诉你要如何调整 (原厂工程师会到现场来帮你换好). 这可以省掉你自己东试西试所浪费的一大堆时间和金钱, 还不一定保证可以修好上线.&lt;/p&gt;&#xD;
&lt;p&gt;----------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;回答二：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;不管是 server 跟 pc 都要有备援的方案.&lt;/p&gt;&#xD;
&lt;p&gt;如果预算足够选 server 比较好, 至少还有售后服务. 选 pc 也不是不能运作, 但是 MIS 要有足够的能力 DIY 各项设置与硬件修复.&lt;/p&gt;&#xD;
&lt;p&gt;小弟以及朋友工作的公司, 都因为预算的问题, 有的系统买 server 有的买 pc, 买 server 真的比较耐操吗 ?&lt;br /&gt;个人的答案是不一定, 但是就整个未来的扩充, 以及整合来说, 是比较有制度化的.&lt;/p&gt;&#xD;
&lt;p&gt;而且如果你有好的维护厂商在的时候, 无论 server 的大小事都可以找到人帮忙解决.&lt;/p&gt;&#xD;
&lt;p&gt;老板不管你买什么机器回来, 只要求服务不要中断, 一但当机了要多久才回复, 这些都要考虑进去.&lt;/p&gt;&#xD;
&lt;p&gt;现在的个人 pc 性能也不错, RAM 也可到 12 G, 提供一般服务是足够, 但是你买的硬盘可以撑多少年呢 ? 出了问题数据救援怎么做 ? 各种状况都要自己来.&lt;/p&gt;&#xD;
&lt;p&gt;除非预算差太多, 不然不建议买 pc 来做.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;----------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;回答三：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;买 Server 买安心.... &lt;br /&gt;有几个原因 PC 是比不上 Server 的...&lt;/p&gt;&#xD;
&lt;p&gt;1. I/O, Server 的 I/O 设计考虑和 PC 不同, 相同的应用, 用 Server 的反应速度就是比 PC 快.&lt;/p&gt;&#xD;
&lt;p&gt;2. 系统架构设计不同, PC 是当机就算了, 了不起重新开机, Server 当机是大事, 少则造成 IT 人员被砍头, 重则造成公司营运上的损失. 也有公司因 Server 当掉, 造成严重损失, 严重到关门大吉的...&lt;/p&gt;&#xD;
&lt;p&gt;3. Server 是着重在持续运作, 所以相关设计考量不同.&lt;/p&gt;&#xD;
&lt;p&gt;虽然有些 Server 说是低价位, 和 PC 价格差异不大, 但这些 Server 充其量只能当作高阶 PC 使用, 真要派上 Server 的场合, 还是要考虑价位较合理的 Server.&lt;/p&gt;&#xD;
&lt;p&gt;另外是备援机制, 这不是单单看蓝光光盘的存储容量而已. &lt;br /&gt;现在方案很多了, 磁带方式不一定 C/P 值高. SATA 硬盘很便宜, 要省钱用 NAS, 扩充性也很方便.&lt;br /&gt;蓝光刻录的光盘片不便宜, 重点是备份速度、安全性及成本.&lt;/p&gt;&#xD;
&lt;p&gt;----------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;回答四：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;数据库，我建议还是服务器比较好，看起来你们的规模应该不大，单 CPU 应该够用，搭配 8 GB ECC 的内存 (能自动修正内存错误)，一张 RAID Card。&lt;br /&gt;500 GB 硬盘做个 RAID 5 差不多够用了。要不就是硬盘用 SAS 300 或 146 GB。另外再多买一颗 1 TB 硬盘做个简单备份。&lt;br /&gt;其实要看你的数据量，应该不大，一阵子备份到硬盘，再隔一阵子刻录光盘出来，其实就差不多了。&lt;/p&gt;&#xD;
&lt;p&gt;----------------------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;回答五：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;要上线服务的当然选服务器，尤其是数据库。&lt;/p&gt;&#xD;
&lt;p&gt;想想 PC 虽然便宜，但它保固只有一年，而且可能不到一年就找不到相同的零件了。&lt;br /&gt;当它故障时，你要换一个不一样规格的零件，维护的人应该会疯掉，例如 RAID Card 故障、主版故障，找不到同型号。&lt;/p&gt;&#xD;
&lt;p&gt;现在大厂的服务器都有三年保固，至少你在这三年内不用烦恼零件的问题。&lt;/p&gt;&#xD;
&lt;p&gt;而且现在少花点钱老板不会感谢你，但出问题时你的解决时间是老板斤斤计较的，或许当天老板还会怪你为何当初不买好一点的。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;相关资料：&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;[1] iServer 新杰资讯科技公司：&lt;br /&gt;&lt;a href="http://www.iserver.com.tw/" target="_blank"&gt;http://www.iserver.com.tw/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[2] iThome - iT 邦帮忙 论坛：&lt;br /&gt;&lt;a href="http://ithelp.ithome.com.tw/" target="_blank"&gt;http://ithelp.ithome.com.tw/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.ithome.com.tw/" target="_blank"&gt;http://www.ithome.com.tw/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[3] 资享科技 (数据备份)：&lt;br /&gt;&lt;a href="http://www.estorage-isb.com/" target="_blank"&gt;http://www.estorage-isb.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[4] ServerBank - IT 直销通路、硬件采购专家：&lt;br /&gt;&lt;a href="http://www.serverbank.com.tw/" target="_blank"&gt;http://www.serverbank.com.tw/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[5] 网站性能优化 - 数据库及服务器架构篇：&lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2009/09/22/1571499.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2009/09/22/1571499.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[6] 其他：&lt;/p&gt;&#xD;
&lt;p&gt;Load-Balanced Cluster（负载平衡群集）： &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms978730.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ms978730.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms978730.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/ms978730.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Server Clustering（服务器群集）：&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-gb/library/ms998414(zh-cn).aspx" target="_blank"&gt;http://msdn.microsoft.com/en-gb/library/ms998414(zh-cn).aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Installing Network Load Balancing (NLB) on Windows Server 2008：&lt;br /&gt;&lt;a href="http://blogs.msdn.com/clustering/archive/2008/01/08/7024154.aspx" target="_blank"&gt;http://blogs.msdn.com/clustering/archive/2008/01/08/7024154.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/WizardWu/aggbug/1931361.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2011/01/09/1931361.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/WizardWu/archive/2010/12/15/1906015.html</id><title type="text">双屏开发</title><summary type="text">本帖提出用双屏和宽屏幕显示器建置开发环境的 13 种 Patterns，以微软 Visual Studio 为例。</summary><published>2010-12-14T19:41:00Z</published><updated>2010-12-14T19:41:00Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/WizardWu/archive/2010/12/15/1906015.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/archive/2010/12/15/1906015.html"/><content type="html">&lt;p&gt;又到了年终，辛苦了一年，不妨买台宽屏幕显示器犒赏自己，搭配旧有的显示器，可来玩玩双屏开发。以下是用双屏或宽屏显示器建置开发环境的 13 种 Patterns，以 Visual Studio 为例，帮助您建立快乐的程序人生。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;测试环境：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;硬件：&lt;br /&gt;(1) ASUS VK266H 的 16:10 显示器、1920 x 1200 分辨率&lt;br /&gt;(2) ASUS VH242H 的 16:9 显示器、1920 x 1080 分辨率&lt;br /&gt;(3) 支持双屏的显卡&lt;/p&gt;&#xD;
&lt;p&gt;软件：&lt;br /&gt;(1) Windows Server 2003 R2 + Visual Studio 2008&lt;br /&gt;(2) Windows Server 2008 R2 + Visual Studio 2010&lt;br /&gt;(3) 双屏辅助软件 UltraMon v3.0.10&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-00.jpg" width="429" height="223" /&gt;&amp;nbsp; &#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;font face="Verdana"&gt;一、 单一台宽屏显示器的玩法: &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&lt;span style="background-color: #ffff99"&gt;玩法 1. - 中英文并列在线浏览 MSDN Library&lt;/span&gt; &#xD;
&lt;p&gt;如下图，在线 MSDN 可让我们自己设置呈现方式。若屏幕够大或分辨率够高的话，可选择以中英文并列的方式来阅读。因 MSDN 多数是以机器自动翻译，少数再辅以真人校对，常会出现翻译得不知所云，甚至译误的情形。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-01-01.jpg" width="285" height="97" /&gt;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-01-02.jpg" width="445" height="374" /&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td colspan="2"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-01-03.jpg" width="700" height="333" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 2. - Visual Studio 2008/2010 - 代码(.cs)/画面(ASPX)、代码(.cs)/画面(XAML) 并列&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如下图，若屏幕够大或分辨率够高的话，可开启 Visual Studio 内置的功能「新建垂直选项卡组」，让 IDE 编辑器呈现左右并列、前台设计和后台代码并列的方式，以方便开发工作，不用再像以前必须用 Ctrl+Tab 切换页签。&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-02-01.jpg" width="393" height="290" /&gt;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-02-02.jpg" width="600" height="329" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;font face="Verdana"&gt;二、 双屏 (Dual Monitor) 的玩法:&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 3. - 屏幕 A 执行 Visual Studio， 屏幕 B 查询 MSDN 或网络&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;让开发和查询资料的动作，分置在两个显示器工作，避免频繁地切换画面。&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-02-02.jpg" width="600" height="329" /&gt;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-01-03.jpg" width="700" height="333" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 4. - 屏幕 A 执行 Visual Studio， 屏幕 B 显示执行结果&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;让开发工作和执行结果，分置在两个显示器，避免频繁地切换画面。不论是开发 ASP.NET、WPF、Silverlight、Mobile、... 等项目，都可如此应用。&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-02-02.jpg" width="600" height="329" /&gt;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-04-01.jpg" width="472" height="245" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 5. - 屏幕 A 显示 Visual Studio 的编辑器或设计器，屏幕 B 显示 Visual Studio 的其他「窗口 / 窗格 (pane)」&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;让开发工作，和辅助的窗格 (如：属性窗格、类视图窗格），分置在两个显示器。如下图的鼠标拖拽功能，在 VS 2008 即已提供。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-05-01.jpg" width="460" height="558" /&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;p&gt;我们可将 VS 2010 里的 .cs 等代码编辑文件，或属性、类视图等窗格，拖拽到屏幕 A 或屏幕 B 的任意位置。Visual Studio 会记住文件保存时最后的屏幕位置，当我们关闭项目、下次再打开时，文件仍会自动恢复到上次保存时的布局。&lt;/p&gt;&#xD;
&lt;fieldset&gt;&lt;legend style="padding-bottom: 3px; margin: 0px; padding-left: 5px; padding-right: 5px; padding-top: 0px"&gt;窗格回复位置教学&lt;/legend&gt;若要把已拖出的窗格，自动回到 Visual Studio 编辑器的原本位置，只要按着 Ctrl 键，再双击窗格的标题栏即可；或如下图，在该窗格的标题栏单击鼠标右键，选择「以选项卡式文档停靠」。&lt;/fieldset&gt; &lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-05-02.jpg" width="487" height="233" /&gt; &lt;br /&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 6. - 屏幕 A 显示 Visual Studio 的编辑器或设计器，屏幕 B 显示其他的代码文件&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;类似玩法 5，只是屏幕 B 显示的不是窗格，而是独立的代码文件 (此功能要 VS 2010 才支持，VS 2008 不支持)。如下图，我们将 .aspx 文件放在主 IDE 窗口中，然后将一个 .aspx.cs 后台代码文件和另一个单独的 .cs 类文件，移到了另一个屏幕上。&lt;/p&gt;&#xD;
&lt;p&gt;比较可惜的是，VS 2010 仍无法拆分同一个解决方案中的两个项目，至不同的屏幕上。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-06-01.jpg" width="700" height="415" /&gt; &lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 7.&amp;nbsp; - 屏幕 A 开发 Server-side 项目，屏幕 B 开发 Client-side 项目&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如下图的 WCF 服务器端项目，和调用此服务的客户端项目。有些人可能喜欢将这些项目拆分来开发，而非集成在 Visual Studio 的同一个解决方案中处理。&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-07-01.jpg" width="600" height="387" /&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-07-02.jpg" width="600" height="419" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 8. - 屏幕 A 执行 Visual Studio， 屏幕 B 执行 SQL Server 等数据库&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;可把数据库管理工具、Profiler 监测工具、SQL 语句执行工具、IIS ...等程序，移至屏幕 B 来操作，以方便测试 SQL 语句、查找记录、维护索引...等。&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-02-02.jpg" width="600" height="329" /&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-08-01.jpg" width="700" height="470" /&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 9. - 屏幕 A 执行 Visual Studio， 屏幕 B 执行报表开发工具&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如下图，Crystal Reports 报表的设计工作，可和 Visual Studio 分开来处理。让双方用不同的屏幕设计各自的画面，最后执行时再合而为一。&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-02-02.jpg" width="600" height="329" /&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-09-01.jpg" width="600" height="451" /&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 10. - 屏幕 A 执行 Visual Studio， 屏幕 B 显示 UML Tool&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;一边浏览或设计 UML 的 Sequence Diagram、Class Diagram，一边写代码。&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-02-02.jpg" width="600" height="329" /&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-10-01.jpg" width="600" height="354" /&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 11. - 屏幕 A 执行 Visual Studio 的共用类库项目，屏幕 B 执行调用此类库的主项目&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;两种项目的性质不同，功能和维护需求也不同，拆分来处理或许是较好的做法。&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-11-01.jpg" width="650" height="322" /&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-11-02.jpg" width="650" height="452" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 12. - 屏幕 A 阅读电子书，屏幕 B 查英文单词&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-12-01.jpg" width="500" height="418" /&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-12-02.jpg" width="500" height="374" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&#xD;
&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;玩法 13. - 娛樂&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;花钱搞双屏，真正的目的当然在娱乐。双屏可同时上网又同时观看视频，或玩 Game 又同时看股票。&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-13-01.jpg" width="500" height="284" /&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-13-02.jpg" width="500" height="379" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;font face="Verdana"&gt;三、 双屏辅助软件 UltraMon:&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;Windows XP/2003/2008 操作系统自带的显示器设置功能，本身已支持双屏，且如下图，我们可直接以鼠标拖拉图示，调整两个屏幕的相关位置、对应高低，或交换主屏幕和副屏幕，避免两个显示器的高度或尺寸不同，造成操作不便。&lt;/p&gt;&#xD;
&lt;table&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-14.jpg" width="584" height="320" /&gt;&amp;nbsp;&lt;/td&gt;&#xD;
&lt;td&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-15.jpg" width="254" height="411" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;另我在此推荐一款能加强双屏功能的软件 - UltraMon。如下图，它除了可让两台屏幕设置不同的壁纸、屏幕保护程序，还可设置各种切换屏幕相关的 Hot Keys，让我们更方便用键盘达成许多功能，例如：将窗口丢到另一台屏幕、将窗口放大到横跨两个屏幕，或将鼠标定位在另一台屏幕的中心点 ...等等，且此软件可支持至少 10 台显示器的控制。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101215-16.jpg" width="880" height="527" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;font face="Verdana"&gt;后记：&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;宽屏幕 24&amp;nbsp;寸 16:9 的显示器，屏幕高度反而比传统 19 寸 4:3 普屏显示器，可视高度少一公分；而 26 寸 16:10 的显示器，屏幕高度则足足比 24 寸 16:9 显示器要高出四公分。若是要用来写代码，建议买 16:10 或传统 4:3 的显示器，可减少垂直滚动条上下拉动的次数；而 16:9 宽屏显示器，虽然是未来主流，但仅适合游戏或看电影、娱乐之用。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;计算机用的 LCD 屏幕，价格已越来越便宜，上周我还在商场看到已有 32 寸 16:9 的超大显示器。但过大的屏幕，恐怕只适合娱乐，不适合用来编程。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;table border="0" cellspacing="1" cellpadding="1" width="900" bgcolor="#c1e680"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&lt;font face="Verdana"&gt;相关资料：&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&lt;p&gt;[1] VS 2010 和 .NET 4.0 系列之《多显示器支持》篇&lt;br /&gt;&lt;a href="http://kb.cnblogs.com/page/55537/" target="_blank"&gt;http://kb.cnblogs.com/page/55537/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[2] Download UltraMon&lt;br /&gt;&lt;a href="http://www.realtimesoft.com/ultramon/download.asp" target="_blank"&gt;http://www.realtimesoft.com/ultramon/download.asp&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[3] 双屏输出与显卡&lt;br /&gt;&lt;a href="http://changyang319.pixnet.net/blog/post/13074745" target="_blank"&gt;http://changyang319.pixnet.net/blog/post/13074745&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;hr color="#cccc00" width="95%" /&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/WizardWu/aggbug/1906015.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/12/15/1906015.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/WizardWu/archive/2010/10/04/1841793.html</id><title type="text">WCF 4 安全性和 WIF 简介</title><summary type="text">本帖简介 .NET 新一代的 Windows Identity Foundation (WIF) 框架，及其与 WCF 的协同运用。文后提供两本 WCF 4 书籍、一本 WIF 书籍的下载地址，及许多网络上的学习资源。</summary><published>2010-10-03T17:45:00Z</published><updated>2010-10-03T17:45:00Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/WizardWu/archive/2010/10/04/1841793.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/archive/2010/10/04/1841793.html"/><content type="html">&lt;p&gt;本帖简介 .NET 新一代的 Windows Identity Foundation (WIF) 框架，及其与 WCF 的协同运用。文后提供两本 WCF 4 书籍、一本 WIF 书籍的下载地址，及许多网络上的学习资源。&lt;/p&gt;&#xD;
&lt;p&gt;本帖并非要详述 WIF 的功能细节，事实上&lt;span style="color: red"&gt;重点在文后的 30 多项学习资源&lt;/span&gt;，提供网友将来需要学习时作为参考。不然此等新技术，等到它普及不知要多少年后。一般传统产业、非软件公司的 IT 部门，可能到现在连 WCF、WF 都没听过，小弟我还知道台湾某些金融业的开发部门，还在用 .NET 1.1 / VS 2003 开发，系统只求稳定即可；至于新技术...，浅尝学习一下即可 (除非时间太多)，重点在于怎么搭配产业 know-how 和企业的需求，以作导入与否的评估。&lt;/p&gt;&#xD;
&lt;p&gt;书籍下载地址，请参考文后「学习资源」的 &lt;span style="color: #0000ff"&gt;[3]&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;[31]&lt;/span&gt;。本帖后续也简单介绍「Programming WCF 4 (Wrox)」这本书第九章里，与 WIF 有关的部分内容。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101004_01.jpg" width="128" height="160" /&gt;&amp;nbsp;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101004_01b.jpg" width="206" height="445" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 1　书籍封面及目录&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;若您下载「Programming WCF 4 (Wrox)」书上的代码，发现编译时找不到「Microsoft.IdentityModel 程序集」，那是因为您的 Windows 尚未安装 WIF。只要去微软的网站下载和安装 &lt;span style="color: #0000ff"&gt;[7]&lt;/span&gt; (安装文件仅约 1.5 MB)，Visual Studio 2008/2010 即可正确编译。以下是 WIF 安装的系统需求：&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------&lt;br /&gt;WIF 安装需要下列操作系统之一：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Windows 7（32 位或 64 位）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Windows Server 2008 R2 （64 位）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Windows Server 2008 + Service Pack 2 （32 位或 64 位）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Windows Vista + Service Pack 2 （32 位或 64 位）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Windows Server 2003 + Service Pack 2 （32 位或 64 位）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Windows Server 2003 R2 （32 位或 64 位）&lt;/p&gt;&#xD;
&lt;p&gt;WIF 需要有下列 .NET 版本或更高之版本：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * .NET 3.5 + Service Pack 1&lt;br /&gt;------------------------------------------------------ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;至于 Windows Identity Foundation (WIF) 为何物？我曾在今年年初的「&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/03/14/1685590.html" target="_blank"&gt;dotNET Framework 4 新版 API 和命名空间&lt;/a&gt;」一文中 &lt;span style="color: #0000ff"&gt;[2]&lt;/span&gt; 有稍微提到，当时并提供 .NET 4 的海报 pdf 下载，其类库在 .NET 4 新建的内容如下图 2，除此之外的命名空间应是在 .NET 3.5 时代即已存在 &lt;span style="color: #0000ff"&gt;[6]&lt;/span&gt;。&lt;br /&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101004_02.jpg" width="520" height="485" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 2　WIF 在 .NET 4 里新加入的命名空间和类&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Windows Identity Foundation (WIF, Windows 身份验证基础)，先前代号为 Geneva 框架。若要用最简单的几句话来介绍，其为微软 .NET 平台的一个身份标识新框架，它将 WS-Trust 和 WS-Federation 协议抽象化，帮助开发者从应用程序中排除掉身份验证的处理，只用单一的编程模式和工具，即可构建基于「声明」的身份验证、授权、及其他安全功能，改善开发者生产力 (避免过去应用程序复杂的认证过程)、增强程序安全性、提供协同合作性，以在 Azure 云端，或非云端的 ASP.NET 与 WCF 应用程序，实现「单点登陆 (SSO)」、个性化、联合化、强验证、身份验证委托，以及其他验证功能。 WIF 可便捷地将非云端应用程序迁移至 Windows Azure (从身份验证的角度），反之亦然 &lt;span style="color: #0000ff"&gt;[10]&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;[16]&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;在 WIF 中，除了更容易实现单点登录，且应用程序不用再负责以下操作 &lt;span style="color: #0000ff"&gt;[4]&lt;/span&gt;：&lt;/p&gt;&#xD;
&lt;p&gt;*&amp;nbsp; 对用户进行身份验证。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp; 存储用户帐户和密码。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp; 调用企业目录以查看用户标识的详细信息。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp; 从其他平台或公司，与既有的标识系统集成。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;WIF 可用于任何使用 .NET 3.5 SP1、.NET 4 的 Web 应用程序或 Web 服务。但 WIF 只是微软的「联合身份标识」软件系列的一部分。「联合身份标识」包含三种组件：Active Directory Federation Services (ADFS) V2 (之前称为「Geneva」服务器)、Windows CardSpace、WIF。 这三种组件共同构成了微软基于「声明」的新访问平台其核心。&lt;/p&gt;&#xD;
&lt;p&gt;对于使用 WIF 的 WCF 服务，开发者不再需要用典型 WCF 身份验证和授权行为初始化 ServiceHost 实例。WIF 取代了这些行为，并提供更简洁的方式进行一般的安全配置、身份验证设置 &lt;span style="color: #0000ff"&gt;[5]&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;[17]&lt;/span&gt;。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;ServiceHost 类 (.NET 4、.NET 3.5)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.servicehost.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/system.servicemodel.servicehost.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.servicehost%28VS.90%29.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/system.servicemodel.servicehost%28VS.90%29.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;WSTrustServiceHost 类&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ee735268.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ee735268.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101004_03.jpg" width="450" height="144" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 3　WIF 的 WSTrustServiceHost 类，继承自 WCF 的 ServiceHost 类，并添加了「安全令牌服务 Security Token Service (STS)」的功能&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;WIF 框架提供了用于托管 STS 实例的自定义 ServiceHost 类型 WSTrustServiceHost。下方代码说明了如何在自托管环境中构造 WSTrustServiceHost 类型 &lt;span style="color: #0000ff"&gt;[20]&lt;/span&gt;：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101004_04.jpg" width="972" height="349" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 4　书中第九章的示例，用 STS 项目、WSTrustServiceHost 类的实例，做 WCF 的自托管 (Self-hosting)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;书上也有对「安全令牌服务 (STS, Security Token Service)」和「安全声明标记语言 (SAML, Security Assertions Markup Language)」的介绍。若搭配 MSDN Magazine 的图片和中文说明，会更容易了解 &lt;span style="color: #0000ff"&gt;[19]&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101004_05.jpg" width="633" height="441" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 5　STS 实现了 WS-Trust 规格，可处理不同&lt;font style="background-color: #ffff99"&gt;类型&lt;/font&gt;凭据的身份验证，以颁发出安全令牌，大幅简化 ASP.NET、WCF 等不同应用程序中的验证和授权代码&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;书上和 MSDN Magazine 也有提到，用 STS 达到跨域做单点登录的议题 &lt;span style="color: #0000ff"&gt;[19]&lt;/span&gt;。在联合方案中 (Federation Authentication)，STS 可在两个或多个安全域之间建立信任关系，以便用户可以对管理其凭据的域进行身份验证，同时仍可获得另一个域中资源的访问权限，如下图 6。因为 STS 会对其中一个域 B 的用户，在进行身份验证后，颁发携带声明的 SAML 安全令牌，里面包含了被验证用户的身份标识、用户的访问权限，然后此令牌会作为 Cookie 返回到浏览器，如上图 5；之后当用户浏览至域 A 中的 Web 应用程序，会将 SAML 令牌作为 Cookie 进行传递，此时由于两个域中的 STS 存在信任关系，域 A 中的 STS 会信任此令牌的签名。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/101004_06.jpg" width="508" height="356" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 6　使用 STS 达到跨 Domain 做 SSO (Single Sign On)，无需再跨多个应用程序和域维护用户凭据&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;通过使用诸如 Active Directory Federation Server (ADFS) 和 WIF 的联合安全平台，在域之间添加新的信任关系也变得更加容易。将应用程序扩展到企业实体内的其他域，甚至扩展到外部合作伙伴的域也变得更容易 &lt;span style="color: #0000ff"&gt;[17]&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;另附带一提，微软云计算 Windows Azure AppFabric 服务，包含 Access Control、AppFabric Service Bus 两大服务功能。前者 (ACS, Access Control Service) 对用户访问的安全权限控制，也与 STS、SAML Token、声明式的授权有关，以避免某些复杂的验证过程。 Azure 应用程序取得 Token 其步骤大致如下：&lt;/p&gt;&#xD;
&lt;ol&gt;&lt;li&gt;用户将它的 SAML Token (Security Assertions Markup Language) 传送给 Access Control Service。&lt;/li&gt;&lt;li&gt;STS (Security Token Service) 依据规则，产生新的 SAML Token。&lt;/li&gt;&lt;li&gt;在访问控制内的 STS，将新产生的 Token 传送给客户端。&lt;/li&gt;&lt;li&gt;客户端再将新产生的 Token 传送给应用程序 (如上图 5 的 WCF、ASP.NET、...)&lt;/li&gt;&lt;li&gt;应用程序就依据这个 Token，来决定用户的权限为何、能做什么、...等等。&lt;/li&gt;&lt;/ol&gt;&#xD;
&lt;p&gt;----------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;附注：名词解释 1&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/magazine/cc948343.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/magazine/cc948343.aspx&lt;/a&gt; &lt;span style="color: #0000ff"&gt;[18]&lt;/span&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ee748490.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ee748490.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;安全令牌服务 (STS) &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;安全令牌服务 (STS) 是用于根据 WS-Trust 和 WS-Federation 协议构建、签署和颁发安全令牌的服务组件。实施这些协议需要进行大量的工作，但 WIF 能为您完成所有这些工作，让那些不精通协议的人很容易即可启动并运行 STS。 您可以使用云 STS (如 LiveID STS)、预先构建的 STS (如 Active Directory Federation Service (AD FS) 2.0)，或者如果想要颁发自定义令牌或提供自定义身份验证或授权，则可以使用 WIF 构建自己的自定义 STS。借助 WIF 即可轻松地构建自己的 STS。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;安全令牌服务允许进一步合并安全逻辑的工具。STS 的典型任务是验证用户，随后创建可以包含声明的安全令牌。客户端必须首先使用 STS 进行验证，然后将返回的令牌转发到客户端希望进行通信的服务。&lt;/p&gt;&#xD;
&lt;p&gt;因为 STS 了解服务 (该信息是令牌请求的一部分)，所以它可以进行集中授权并预先生成服务所需的声明。这样声明转换完全不需要在服务端点进行，它可以通过 STS 集中完成。当系统复杂到一定程度时，它可以大幅简化安全基础结构。&lt;/p&gt;&#xD;
&lt;p&gt;当多个信任域联合时，安全令牌服务也是重要的基础结构组件。通过在多个令牌服务间建立信任，您可以跨越服务所能使用的信任边界交换安全令牌。&lt;/p&gt;&#xD;
&lt;p&gt;WCF 具备支持前述方案的自动客户端/服务端，以及编写 STS 所需的所有基类。但正确实现所有 WS-* 相关规范是一项非常复杂的任务。您应该购买商业 STS 或使用更高级别的工具包 (例如：Zermatt) 编写自定义规范。即将面世的 Microsoft Active Directory 联合身份验证服务版本旨在为 WCF 提供功能完备的 STS。&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;附注：名词解释 2&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/security/aa570351.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/security/aa570351.aspx&lt;/a&gt; &lt;span style="color: #0000ff"&gt;[11]&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/windowsserver2008/en/us/ad-fs-2-overview.aspx" target="_blank"&gt;http://www.microsoft.com/windowsserver2008/en/us/ad-fs-2-overview.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;Active Directory Federation Services 2.0 (ADFS 2.0)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Active Directory Federation Services 2.0 是对于 Active Directory 的一个新拓展，它使得 Active Directory 成为了对于那些具有声明意识的应用程序的基础设施。 通过 Security Token Service (STS), AD FS 2.0 使得 Active Directory的用户可以验证那些具有声明意识的应用程序，并为担当关于那些用户的声明 (属性) 的&amp;#8220;权威人士&amp;#8221;，无论用户信息储存于 Active Directory, SQL数据库，还是其他存储。作为一个联合服务，AD FS 2.0 提供了为联合关系的单点管理。使用例如 SAML 2.0 此类的工业标准协议，可以实现从合作伙伴组织或云端，Active Directory 用户的单点登陆。&lt;br /&gt;&amp;nbsp;&lt;br /&gt;开发者可同时使用 ACS、WIF，以及 AD FS v2 来开发网络服务，其结合了 Active Directory 安全性与功能性，灵活性，定制的访问控制规则，简便的紧密结合的开发体验。&lt;/p&gt;&#xD;
&lt;p&gt;----------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #339966"&gt;学习资源：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[1] Claims 认证详解(1)&lt;br /&gt;&lt;a href="http://www.cnblogs.com/time-is-life/archive/2010/09/24/1834045.html" target="_blank"&gt;http://www.cnblogs.com/time-is-life/archive/2010/09/24/1834045.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/microsoft.identitymodel.claims.claim.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/microsoft.identitymodel.claims.claim.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[2] dotNET Framework 4 新版 API 和命名空间、API 海报下载&lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/03/14/1685590.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2010/03/14/1685590.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[3] WCF 4 书籍下载&lt;br /&gt;Programming WCF 4 (Wrox)&lt;br /&gt;Programming WCF Services, 3rd.Edition (O'Reilly, Aug 2010)&lt;br /&gt;&lt;a href="http://www.silverlightchina.net/html/download/books/2010/0920/1945.html" target="_blank"&gt;http://www.silverlightchina.net/html/download/books/2010/0920/1945.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.silverlightchina.net/html/download/books/2010/0817/1770.html" target="_blank"&gt;http://www.silverlightchina.net/html/download/books/2010/0817/1770.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://silverlightchina.net/index.html" target="_blank"&gt;http://silverlightchina.net/index.html&lt;/a&gt;&lt;br /&gt;出版社的书籍介绍、代码下载&lt;br /&gt;&lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/Professional-WCF-4-Windows-Communication-Foundation-with-NET-4.productCd-0470563141.html" target="_blank"&gt;http://www.wrox.com/WileyCDA/WroxTitle/Professional-WCF-4-Windows-Communication-Foundation-with-NET-4.productCd-0470563141.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://oreilly.com/catalog/9780596805494/" target="_blank"&gt;http://oreilly.com/catalog/9780596805494/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[4] Windows Identity Foundation 介绍&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ee748475.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ee748475.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ee748484.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ee748484.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ee517291.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ee517291.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ee748508.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ee748508.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[5] WCF 应用程序与 WIF 兼容性&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ee517294.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ee517294.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[6] Microsoft.IdentityModel 类库、命名空间 (Windows Identity Foundation)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ee709285.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ee709285.aspx&lt;/a&gt;&lt;br /&gt;WSTrustServiceHost 类&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/microsoft.identitymodel.protocols.wstrust.wstrustservicehost.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/microsoft.identitymodel.protocols.wstrust.wstrustservicehost.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[7] Windows Identity Foundation 安装程序下载 (四种版本，安装后才能编译书上第九章的示例)&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=EB9C345F-E830-40B8-A5FE-AE7A864C4D76" target="_blank"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=EB9C345F-E830-40B8-A5FE-AE7A864C4D76&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=eb9c345f-e830-40b8-a5fe-ae7a864c4d76&amp;amp;displayLang=zh-cn" target="_blank"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=eb9c345f-e830-40b8-a5fe-ae7a864c4d76&amp;amp;displayLang=zh-cn&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/evalcenter/dd440951.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/evalcenter/dd440951.aspx&lt;/a&gt;&lt;br /&gt;系统需求:&lt;br /&gt;&lt;a href="http://support.microsoft.com/Default.aspx?kbid=974405" target="_blank"&gt;http://support.microsoft.com/Default.aspx?kbid=974405&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[8] Active Directory Federation Services 2.0 RTW 下载 (2010/05/05)&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/evalcenter/ee476597.aspx" target="_blank"&gt;http://technet.microsoft.com/en-us/evalcenter/ee476597.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=118C3588-9070-426A-B655-6CEC0A92C10B" target="_blank"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=118C3588-9070-426A-B655-6CEC0A92C10B&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=118C3588-9070-426A-B655-6CEC0A92C10B&amp;amp;displayLang=zh-cn" target="_blank"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=118C3588-9070-426A-B655-6CEC0A92C10B&amp;amp;displayLang=zh-cn&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=118c3588-9070-426a-b655-6cec0a92c10b&amp;amp;displaylang=en" target="_blank"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=118c3588-9070-426a-b655-6cec0a92c10b&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[9] Active Directory Federation Services 2.0 homepage (Windows Server 2008 R2)&lt;br /&gt;&lt;a href="http://www.microsoft.com/windowsserver2008/en/us/ad-fs-2-overview.aspx" target="_blank"&gt;http://www.microsoft.com/windowsserver2008/en/us/ad-fs-2-overview.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[10] Windows Identity Foundation (WIF) 正式发布&lt;br /&gt;&lt;a href="http://www.cnblogs.com/shanyou/archive/2009/12/02/WIF.html" target="_blank"&gt;http://www.cnblogs.com/shanyou/archive/2009/12/02/WIF.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cnblogs.com/shanyou/category/72906.html" target="_blank"&gt;http://www.cnblogs.com/shanyou/category/72906.html&lt;/a&gt;&lt;br /&gt;Web 单点登录系统&lt;br /&gt;&lt;a href="http://blog.csdn.net/shanyou/archive/2010/02/28/5372233.aspx" target="_blank"&gt;http://blog.csdn.net/shanyou/archive/2010/02/28/5372233.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[11] Windows Identity Foundation 官网 (英文, 有许多资源和文档可下载)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/security/aa570351.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/security/aa570351.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[12] WIF Support for Windows Server 2003&lt;br /&gt;&lt;a href="http://blogs.msdn.com/card/archive/2009/12/18/announcing-wif-support-for-windows-server-2003.aspx" target="_blank"&gt;http://blogs.msdn.com/card/archive/2009/12/18/announcing-wif-support-for-windows-server-2003.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[13] download Microsoft&amp;#8217;s Identity and Access Management Platform Whitepapers &lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9ca5c685-3172-4d8f-81cb-1a59bdc9f7e3&amp;amp;displaylang=en" target="_blank"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9ca5c685-3172-4d8f-81cb-1a59bdc9f7e3&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;Active Directory Federation Services 2.0, Windows Identity Foundation &amp;amp; Windows CardSpace comprise an identity &amp;amp; access solution to help developers and IT professionals simplify access to applications and other systems with an open claims-based model.&lt;/p&gt;&#xD;
&lt;p&gt;[14] WIF Workshop 7: WIF and WCF (2010/06/23, 在线影片, 印度腔很重)&lt;br /&gt;&lt;a href="http://channel9.msdn.com/Shows/Identity/WIF-Workshop-7-WIF-and-WCF" target="_blank"&gt;http://channel9.msdn.com/Shows/Identity/WIF-Workshop-7-WIF-and-WCF&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[15] Claims based access platform (CBA), code-named Geneva (MSDN Forum)&lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/Geneva/threads" target="_blank"&gt;http://social.msdn.microsoft.com/Forums/en-US/Geneva/threads&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[16] Windows身份验证基础(Windows Identity Foundation) 常见问题解答 :&lt;br /&gt;什么是 Windows身份验证基础(Windows Identity Foundation (WIF)) ?&lt;br /&gt;Windows Azure 平台可以使用 WIF 吗 ？&lt;br /&gt;什么是 Active Directory Federation Services 2.0 (ADFS 2.0) ?&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/azchina/archive/2010/03/04/windows-windows-identity-foundation.aspx" target="_blank"&gt;http://blogs.msdn.com/b/azchina/archive/2010/03/04/windows-windows-identity-foundation.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[17] 通过 WIF 实现基于声明的授权 (MSDN Magazine, 11 月 2009)&lt;br /&gt;什么是「安全令牌服务 (STS)」？&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/magazine/ee335707.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/magazine/ee335707.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[18] 基于 WCF 服务中的授权 (MSDN Magazine, 10 月 2008)&lt;br /&gt;什么是「安全令牌服务 (STS)」？&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/magazine/cc948343.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/magazine/cc948343.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[19] Geneva 框架：构建基于声明的 WCF 服务的更好方法 (MSDN Magazine, 12 月 2008)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/magazine/dd278426.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/magazine/dd278426.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[20] Geneva 框架：构建自定义安全令牌服务 (MSDN Magazine, 1 月 2009)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/magazine/dd347547.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/magazine/dd347547.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[21] WCF 应用程序兼容性、如何在 WCF 服务上启用 WIF&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ee517294.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ee517294.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[22] 构建 WCF 信赖方应用程序 (TechNet)&lt;br /&gt;&lt;a href="http://207.46.16.252/zh-cn/library/ee748476.aspx" target="_blank"&gt;http://207.46.16.252/zh-cn/library/ee748476.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[23] Windows Communication Foundation (MSDN)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/dd456779.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/dd456779.aspx&lt;/a&gt; (WCF 4)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms735119.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/ms735119.aspx&lt;/a&gt; (WCF 3.5)&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/netframework/aa663324.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/netframework/aa663324.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/netframework/aa663324.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[24] Improving Web Services Security: Scenarios and Implementation Guidance for WCF、Download the Guide&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc949034.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/cc949034.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://wcfsecurity.codeplex.com/" target="_blank"&gt;http://wcfsecurity.codeplex.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[25] WIF - Pablo M. Cibraro (aka Cibrax)&lt;br /&gt;&lt;a href="http://weblogs.asp.net/cibrax/archive/tags/WIF/default.aspx" target="_blank"&gt;http://weblogs.asp.net/cibrax/archive/tags/WIF/default.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[26] WCF 分布式安全开发实践、WCF 4.0 新特性体验&lt;br /&gt;&lt;a href="http://www.cnblogs.com/frank_xl/category/203947.html" target="_blank"&gt;http://www.cnblogs.com/frank_xl/category/203947.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cnblogs.com/frank_xl/category/220067.html" target="_blank"&gt;http://www.cnblogs.com/frank_xl/category/220067.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/dd456789.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/dd456789.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[27] WCF 身份验证之用户名密码认证、通信安全&lt;br /&gt;&lt;a href="http://www.cnblogs.com/ejiyuan/category/248002.html" target="_blank"&gt;http://www.cnblogs.com/ejiyuan/category/248002.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[28] WCF 安全 - 迷失code的博客 - 博客园&lt;br /&gt;&lt;a href="http://www.cnblogs.com/viter/tag/WCF/" target="_blank"&gt;http://www.cnblogs.com/viter/tag/WCF/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cnblogs.com/viter/tag/wcf%e5%ae%89%e5%85%a8/" target="_blank"&gt;http://www.cnblogs.com/viter/tag/wcf%e5%ae%89%e5%85%a8/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[29] WCF - Artech - 博客园&lt;br /&gt;&lt;a href="http://www.cnblogs.com/artech/tag/WCF/" target="_blank"&gt;http://www.cnblogs.com/artech/tag/WCF/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[30] MonoTouch, WCF 4 and WIF on iPad ?&lt;br /&gt;&lt;a href="http://forums.monotouch.net/yaf_postst884.aspx" target="_blank"&gt;http://forums.monotouch.net/yaf_postst884.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/Geneva/thread/07cdd622-e02e-43ae-8e48-054e3daabe3a" target="_blank"&gt;http://social.msdn.microsoft.com/Forums/en-US/Geneva/thread/07cdd622-e02e-43ae-8e48-054e3daabe3a&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[31] Programming Windows Identity Foundation 书籍下载 (September, 2010)&lt;br /&gt;a. &lt;a href="http://www.itpub.net/redirect.php?tid=1353990&amp;amp;goto=lastpost" target="_blank"&gt;http://www.itpub.net/redirect.php?tid=1353990&amp;amp;goto=lastpost&lt;/a&gt;&lt;br /&gt;b. &lt;a href="http://www.ebookee.net/Programming-Windows-Identity-Foundation_749877.html" target="_blank"&gt;http://www.ebookee.net/Programming-Windows-Identity-Foundation_749877.html&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://hotfile.com/dl/72955426/3080221/Microsoft.Press.Programming.Windows.Identity.Foundation.Sep.2010.rar_gigatraining.net.html" target="_blank"&gt;http://hotfile.com/dl/72955426/3080221/Microsoft.Press.Programming.Windows.Identity.Foundation.Sep.2010.rar_gigatraining.net.html&lt;/a&gt;&lt;br /&gt;书籍介绍&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0735627185?ie=UTF8&amp;amp;tag=wwwcloudident-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0735627185" target="_blank"&gt;http://www.amazon.com/gp/product/0735627185?ie=UTF8&amp;amp;tag=wwwcloudident-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0735627185&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/vbertocci/archive/2010/07/06/how-wif-wedges-itself-in-the-wcf-pipeline.aspx" target="_blank"&gt;http://blogs.msdn.com/b/vbertocci/archive/2010/07/06/how-wif-wedges-itself-in-the-wcf-pipeline.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[32] A Guide to Claims-Based Identity and Access Control (Patterns &amp;amp; Practices) 书籍介绍 &lt;br /&gt;&lt;a href="http://www.amazon.com/Claims-Based-Identity-Control-Patterns-Practices/dp/0735640599/ref=pd_sim_b_1" target="_blank"&gt;http://www.amazon.com/Claims-Based-Identity-Control-Patterns-Practices/dp/0735640599/ref=pd_sim_b_1&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[33] Exercise 1: Enabling claims based access for an ASP.NET Web Application by generating a local STS&lt;br /&gt;&lt;a href="http://channel9.msdn.com/learn/courses/IdentityTrainingCourse/WebSitesAndIdentity/WebSitesAndIdentityLab/Exercise-1-Enabling-claims-based-access-for-an-ASPNET-Web-Application-by-generating-a-local-STS/" target="_blank"&gt;http://channel9.msdn.com/learn/courses/IdentityTrainingCourse/WebSitesAndIdentity/WebSitesAndIdentityLab/Exercise-1-Enabling-claims-based-access-for-an-ASPNET-Web-Application-by-generating-a-local-STS/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[34] Exercise 2: Using ACS with SAML Tokens&lt;br /&gt;&lt;a href="http://channel9.msdn.com/Learn/Courses/Azure/IdentityAzure/IntroToACSLab/Exercise-2-Using-ACS-with-SAML-Tokens" target="_blank"&gt;http://channel9.msdn.com/Learn/Courses/Azure/IdentityAzure/IntroToACSLab/Exercise-2-Using-ACS-with-SAML-Tokens&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[35] 为什么微软要推 WCF Data Service (REST)&lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2008/12/14/1354490.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2008/12/14/1354490.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[36] Access Control in the Cloud: Windows Azure AppFabric's ACS&lt;br /&gt;&lt;a href="http://www.devproconnections.com/article/net-framework2/Access-Control-in-the-Cloud-Windows-Azure-AppFabric-s-ACS.aspx" target="_blank"&gt;http://www.devproconnections.com/article/net-framework2/Access-Control-in-the-Cloud-Windows-Azure-AppFabric-s-ACS.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[37] OASIS Web Services Federation (WSFED) TC、 WS-Trust 1.3 OASIS Standard&lt;br /&gt;&lt;a href="http://oasis-open.org/committees/tc_home.php?wg_abbrev=wsfed" target="_blank"&gt;http://oasis-open.org/committees/tc_home.php?wg_abbrev=wsfed&lt;/a&gt;&lt;br /&gt;&lt;a href="http://docs.oasis-open.org/ws-sx/ws-trust/200512/ws-trust-1.3-os.html" target="_blank"&gt;http://docs.oasis-open.org/ws-sx/ws-trust/200512/ws-trust-1.3-os.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/WizardWu/aggbug/1841793.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/10/04/1841793.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/WizardWu/archive/2010/09/28/1837198.html</id><title type="text">国际财务报告准则 IFRS 与信息系统</title><summary type="text">台灣的上市、櫃企業，預計 2013 年全面導入國際會計準則 IFRS，由於企業的 ERP (企業資源規劃) 系統必須更換，將引發逾數百億元台幣的商機。</summary><published>2010-09-27T16:00:00Z</published><updated>2010-09-27T16:00:00Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/WizardWu/archive/2010/09/28/1837198.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/archive/2010/09/28/1837198.html"/><content type="html">&lt;p&gt;&lt;span style="color: #339966"&gt;除了技术以外&amp;#8230;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;a href="http://baike.baidu.com/view/1712065.htm" target="_blank"&gt;http://baike.baidu.com/view/1712065.htm&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;&lt;strong&gt;国际财务报告准则 (IFRS)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;全称：International Financial Reporting Standards &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;IFRS 国际财务报告准则简介 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;国际财务报告准则 (IFRS) 是国际会计准则理事会 (IASB) 所颁布的，一项全球公认的易于各国在跨国经济往来时可以执行一个标准的制度， 用于规范全世界范围内的企业或其他经济组织会计运作的指导性原则，使各国的经济利益可在一个标准上得到保护，不至于因参差不一的准则导致不一样的计算方式而产生不必要的经济损失。至今已经推出 41 项，且在不断的修订和完善中。 &lt;/p&gt;&#xD;
&lt;p&gt;这些准则在国际上，按照公众利益，制订和公布在编制财务报表时应遵循的同一会计准则，并促使其在世界范围内被接受和执行。它是全球统一的财务规则，是按照国际标准规范运作的财务管理准则。IASB 并委托专业的会计师团体如国际会计师公会 (AIA) 向专业高级会计师培训。 &lt;/p&gt;&#xD;
&lt;p&gt;中国于 98年加入国际会计准则委员会，并向国际会计准则趋同。根据 WTO 要求，中国开放金融业为标志的前提下，各行各业的行业标准逐渐与国际接轨，因而懂国际财务报告准则 (IFRS) 的人才需求大大增大。&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;a href="http://blog.chinaacc.com/yangbingyong/blog/20100211-1113380420000.html" target="_blank"&gt;http://blog.chinaacc.com/yangbingyong/blog/20100211-1113380420000.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong style="color: #339966"&gt;IFRS 简介&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2010年02月11日&lt;/p&gt;&#xD;
&lt;p&gt;大型企业或许考虑国内资本市场规模，亦或意图拓展国际知名度，常会寻求海外募资挂牌。要进入不同国家的资本市场就要依照各国的相关规范。目前企业于海外募资时，通常需准备多种版本的财务报表以遵循不同国家当地之会计准则，常见的挂牌地点像是美国、香港及新加坡，分别要求出具「美国公认会计原则 (简称 U.S. GAAP)」、香港会计准则及新加坡会计准则或是「国际财务报告准则 (International Financial Reporting Standards，简称 IFRS)」之财务报表。当有海外子公司时，子公司也免不了至少要出具当地法定财务报表 (local statutory reporting) 及按母公司会计基础编制之财务报表两套财务信息。不同的上市要求及当地法定财务报表规定，不仅耗费巨额的跨国资本市场成本，并延宕跨国资金流通之效率。此外，企业也必须要有相当程度的会计专才培养训练以持续追踪会计准则之发展，才有能力准备不同套的财务报表。林林总总皆造成企业沉重的负担。&lt;/p&gt;&#xD;
&lt;p&gt;对跨国性组织来说，IFRS 之采用或许代表着节省成本之重要机会，因为就目前趋势看来，不但许多国家已要求或计划于未来采用 IFRS 编制当地财务报表，全球主要资本市场亦要求或允许企业依据IFRS编制或IFRS调节后之财务报表。因此，企业势必将由此无可避免之趋势中，发展出合理因应之道。故不论公开发行公司系为了财报资讯公告目的，或一般企业依当地法令编制财务报表，全球一致并采用同一套会计准则，将可降低财务报导成本。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;除上所述外，&lt;span style="color: #339966"&gt;企业采用 IFRS 将可由以下几方面获益：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;#8251; 将财务报导政策标准化&lt;/strong&gt;&lt;br /&gt;IFRS 之全面采用可使当地法定财务报表及合并财务报表之会计政策一致，进而促进财务报表信息及税务规划之可比较性。因此，对企业本身、股东及分析师在作跨国企业间之投资决策及绩效评估时提供直接有利的帮助。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;#8251; 资源之更有效利用及取得&lt;/strong&gt;&lt;br /&gt;采 用 IFRS 将可透过共享服务方式，提供发展集中会计帐务处理之机会，使资源能有效利用。此外，亦有助于发展标准化的人员训练程序，消弭不兼容的会计系统，同时可结省依照地方法令编制报表所需支付之额外费用。甚者，有单一套的会计准则，企业可善用全球性之训练及发展计划来提升会计人员之能力。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;#8251; 提升控制&lt;/strong&gt;&lt;br /&gt;许多企业其海外营运机构之当地法定报表系透过人工方式予以转换，对于此种报告之质量，总机构由于对当地法规不近熟稔而致未能完全掌握。全面采用IFRS将对依地方法令编制之报表提供更多的控制，而可减少国外营运机构因会计法规未能遵循而导致之受罚风险。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;#8251; 利于现金管理&lt;/strong&gt;&lt;br /&gt;子公司可发放之股利通常系以当地法定财务报表为计算基准。若当地国会计准则与 IFRS 存在重大差异，由当地国会计准则调节至 IFRS 将对盈余产生极大影响，致母公司无法先行合理进行现金股利之发放规划。若海外子公司当地法定财务报表及母公司合并报表皆采 IFRS，在一致的会计准则下，将可更为妥善规划现金流量。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;亦有看法指出，市场机制终将驱使会计准则转换至IFRS。资本市场为了让投资人在评估位于不同国家之相同产业公司营运绩效时，得有相同之比较基础 (apple-to-apple)，可能会要求同业之主要竞争者依IFRS提供财务信息。&lt;/p&gt;&#xD;
&lt;p&gt;截至目前为止，已有许多企业以 IFRS 为其指引。根据 Deloitte USA 最近的调查显示，近20%的受访者在有机会选择下，将考虑采用 IFRS。近 2/3 的企业将在最近 2~3 年内考虑采用 IFRS。随着愈来愈多的企业对 IFRS 的熟识度及采用率提高，相信企业对IFRS的关注也会持续增加。&lt;/p&gt;&#xD;
&lt;p&gt;另许多全球 500 大企业业已加入追随 IFRS 的行列。在全球 500 大企业中，将近 40 % 之企业目前已遵循 IFRS，而另 40 % 之企业目前系使用 U.S. GAAP。另 20 % 则仍采用当地会计准则；然而，许多大企业之所处国家将在近期内将该国会计准则转换为 IFRS 或与 IFRS 接轨，像是加拿大及日本。随着 以 IFRS 取代各当地国家会计准则的潮流日益兴盛，显示一强而有力的全球趋势－在 2011 年，可能全球多数之大型企业皆将采用 IFRS。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #339966"&gt;全球接受 IFRS 面临之挑战&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;朝向 IFRS 成为全球单一可接受的财务报导准则亦面临某些挑战。对许多企业及财务报告使用者而言，或许最大的挑战在推行成本、教育以及文化方面。相关推行成本及教育将可随着对 IFRS 之了解日益增进而得以获得改善。相较之下，协调多种文化差异及观点对 IFRS 所做相关解释及应用之影响，是较需要时间克服。相同的会计准则于不同文化、政经环境中适用，可能有不同的结果。&lt;/p&gt;&#xD;
&lt;p&gt;对 跨国企业而言，为了须确保 IFRS 于全球之一致应用，而非成为与当地准则之混合版本，企业可能需投入相当之努力于建立政策、修正系统及训练人员上。随着 IFRS 之采用，企业、会计师、主管机关及报表使用者对于财务报表编制之观念亦将有所转换，即必须投入更多的判断、较少依赖细则及明确规范等 IFRS 准则之特殊性。掌握此新方向的会计观念架构，心态上的转变是绝对必要的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #339966"&gt;IFRS 之主要优点&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;复杂性之降低、透明度之提升、可比较性之增加及效率之增进等皆为 IFRS 潜在之优点。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;#8251; 投资人 &lt;/strong&gt;－ 投资方对于高质量之财务信息需求日益增加。有越来越多的投资人将 IFRS 视为是在全球产业基础下进行不同企业间分析的机会。在股东及分析师期盼或需求下，目前尚未提供 IFRS 信息的企业，可能在不久的将来皆须提供该信息。随着对IFRS财务信息之需求愈高，IFRS 普及之范围愈大，将可提供投资人以相同基础之观点下比较财务绩效。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;#8251;&amp;nbsp;资本市场 &lt;/strong&gt;－ 随着 IFRS 之采用，可实现较高的市场效率。单一全球化的会计准则鼓励企业及投资人更加容易接近多元化及跨国的市场。实际上，此举将激励投资并使国际间资本相互流通。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&amp;#8251; 企业 &lt;/strong&gt;－ 在全球化经营下，更有效率的财务报导程序可消除分歧的会计系统，并增加报导的一致性，进而减少成本并促进经营绩效，以及降低因不同准则适用下所导致潜在错误之可能。许多 IFRS 基本原则之应用可将其标准化并集中执行。&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;a href="http://www.chi.com.tw/IFRS.htm" target="_blank"&gt;http://www.chi.com.tw/IFRS.htm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.chi.com.tw/IFRS_switch.htm" target="_blank"&gt;http://www.chi.com.tw/IFRS_switch.htm&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;&lt;strong&gt;IFRS－國際會計準則的轉換 &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;IFRS (International Financial Reporting Standards) 的轉換，不僅僅是會計準則及財務報導改變以 IFRS 方式，也可能由於企業選擇不同的會計政策，導致改變公司的內部作業流程、信息系統、人員、營運管理模式，甚至牽涉財務調度及籌資計劃等等，公司的營運、財務及稅務活動等各層面，最終皆有可能因此而受到影響。&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100927_03.jpg" width="319" height="212" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;依台灣金管會訂定及公佈之『台灣企業採用國際會計準則之推動架構』，上市櫃公司應自 2013 年起採用 IFRS 編製財務報表，而公開發行公司則自 2015 年起適用。不過由於必須要編製前一年度的比較報表，故上市櫃公司在 2012 年，即必須同時編製符合 IFRS 及 ROC GAAP 規範的兩套財務報表。&lt;/p&gt;&#xD;
&lt;p&gt;雖然從現在開始到 2012 年，好像還有很多時間，但因轉換 IFRS 實際牽涉的層面既廣且深，企業若未及早準備，釐清選擇不同會計政策對財務報導的差異，甚至提前進行帳務處理、報表編製，及內部作業流程的模擬；如果臨到實施，才發現有未考慮到的影響事項，牽一髮可能動全身。故企業投入轉換 IFRS 的準備，還是越早開始越好。 &lt;br /&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100927_02.jpg" width="550" height="294" /&gt;&lt;br /&gt;&lt;br /&gt;　　雖然上市櫃及興櫃公司開始採用 IFRS 的時點是在 2013 年，但由於必須要編製前一年度的比較報表，故實際在 2012 年 1 月 1 日即必須進行 IFRS 的開帳，年度並須雙軌維持 IFRS 及 ROC GAAP 兩套帳務。&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong style="color: #339966"&gt;台灣經濟部與資服、會計師產業共組「IFRS推動聯盟」&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2010-08-25&lt;/p&gt;&#xD;
&lt;p&gt;台灣的經濟部工業局，聯合國內資通信服務，以及會計師產業成立「IFRS推動聯盟」，透過培植相關資通信服務、顧問輔導，推動企業導入國際財務報告準則 (IFRS)。 &lt;/p&gt;&#xD;
&lt;p&gt;IFRS 推動聯盟是由工業局，聯合台灣的資通信服務業、會計師公會全國聯合會，及部分企業代表共同成立，會長由資通電腦董事長余宏揚擔任。未來聯盟希望透過 30 家示範企業，培養約 100 家資服業者具備 IFRS 的服務能力，藉此提升台灣業者的服務能力，未來再進一步將觸角延伸至開發中國家的市場。 &lt;/p&gt;&#xD;
&lt;p&gt;金管會去年公佈實施 IFRS 準則，&lt;span style="color: red"&gt;2013 年台灣上市上櫃公司都必須採用，2015 年則擴大至其他公司&lt;/span&gt;，儘管法律時間表已確定，但台灣資服業者對 IFRS 的信息服務能力還不足夠，因此聯盟爭取政府經費補助，與熟悉企業現行會計財報及 IFRS 的會計師產業合作，藉此培養資服業者 IFRS 資通訊服務能力。 &lt;/p&gt;&#xD;
&lt;p&gt;余宏揚表示，企業導入 IFRS 的衝擊，&lt;span style="color: #ff0000"&gt;以收入&lt;strong&gt;認列&lt;/strong&gt;為例，原本 3 個月一次的財報改為 1 個月一次，其他還有合併財報、功能性幣別調整等等&lt;/span&gt;，企業&lt;span style="color: #ff0000"&gt;不只需要調整內部會計作業，也牽涉到 ERP 等 IT 信息系統的調整&lt;/span&gt;，顯示導入 IFRS 需要企業、會計與資服業者共同參與。 &lt;/p&gt;&#xD;
&lt;p&gt;經濟部工業局預估，依金管會要求 2013 年台灣的上市上櫃公司要開始採用 IFRS，企業將投入 700 億元 (台幣) 在會計作業制度的轉換、商業流程及 ERP 信息系統改變，為信息服務業者、硬件業者、會計師產業帶來龐大商機。排除外商可望搶得 550 億元商機，本地業者競爭另外約 150 億元商機。&lt;/p&gt;&#xD;
&lt;p&gt;目前 IFRS 推動聯盟僅獲得工業局計劃補助 2 億元，相較上千家的上市上櫃公司，經費可以說是僧多粥少，每個示範企業案未來獲得的補助不多。余宏揚表示，聯盟除了需要大量的 IFRS 教育訓練協助外，也需要政府單位的加碼補助。 &lt;/p&gt;&#xD;
&lt;p&gt;按金管會要求，雖然 2013 年上市上櫃公司必須採用 IFRS 準則，但&lt;span style="color: red"&gt;在 2012 年就必須先完成現行會計制度和 IFRS 並行的雙軌制&lt;/span&gt;，加入 IFRS 推動聯盟的鼎新公司，便建議企業趁早先瞭解 IFRS 衝擊，2011 年調整兼熟悉 IFRS 運作，才能在 2012 年完成雙軌制並進行 IFRS 切換準備，2013 年全面切換至 IFRS。 &lt;/p&gt;&#xD;
&lt;p&gt;鼎新公司目前已為 TIPTOP 產品的用戶調整參數以迎合 IFRS，約有 40 家已為 IFRS 優化參數，但仍有不少 TIPTOP 用戶未昇級 ERP 系統，其中特別是使用 TIPTOP 5.0 以前版本的企業，無法透過參數調整因應，為此鼎新提供這類客戶模組昇級、TIPTOP 版本昇級、流程在內的全面昇級等不同選擇。 &lt;/p&gt;&#xD;
&lt;p&gt;根據 SAP 先前透露的訊息，目前 SAP 本地用戶只有不到 2 成因應 IFRS 調整 ERP，高達 8 成的 SAP 用戶還未開始準備。綜合鼎新公司的說法，顯示台灣的企業大多未因應 IFRS 開始進行調整。 &lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #339966"&gt;&lt;strong&gt;會計師+系統業 搶IFRS商機 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/strong&gt;&lt;/span&gt;2010.08.26 &lt;/p&gt;&#xD;
&lt;p&gt;台灣上市、櫃企業，預計2013年全面導入國際會計準則 IFRS，由於&lt;span style="color: #ff0000"&gt;企業的 ERP（企業資源規劃）系統必須更換&lt;/span&gt;，將引發逾百億元商機。 &lt;/p&gt;&#xD;
&lt;p&gt;SI (系統整合) 業者認為，目前包括 Oracle、SAP 等國際 ERP 大廠，所合作的台灣的上市、櫃企業，營收約占整體八成比重；相較之下，台系 SI 廠商所開發的 ERP 系統則多為中、小型企業採用，但是企業導入 IFRS 仍可望為台系 SI 業者帶入逾 150 億元商機 (台幣)。 &lt;/p&gt;&#xD;
&lt;p&gt;台灣金管會規定，台灣上市、櫃企業，必須在 2013 年全面導入 IFRS ，加上年度對照報表，2012 年即需編制採用 IFRS 準則的財報，包括會計師公會、SI 信息服務業者與企業，昨 (8/25) 日共同成立「IFRS推動聯盟」，推動企業的轉換工作。 &lt;/p&gt;&#xD;
&lt;p&gt;SI 業者表示，由於導入 IFRS 後，企業將從現行按季揭露財報，改為按月。且除全公司經營績效外，尚需揭露個別部門狀況，因此&lt;span style="color: #ff0000"&gt;企業處理財務信息的量與速度都會拉高，系統的需求將隨之提升&lt;/span&gt;。 &lt;/p&gt;&#xD;
&lt;p&gt;台灣上市、櫃企業總數超過 1,500 家，加上公開發行公司以及中、小型企業在內，潛在的企業用戶市場超過一萬家以上。 &lt;/p&gt;&#xD;
&lt;p&gt;經濟部工業局預估，企業導入 IFRS 所需求的軟、硬體與顧問服務等，總投資金額將上看 700 億元。 &lt;/p&gt;&#xD;
&lt;p&gt;不過 SI 業者認為，由於國際 ERP 大廠已經搶下大型企業的市場，未來導入 IFRS 時國際廠商仍占優勢，預計將搶下約 550 億元商機，台系業者則約可搶下 150 億元大餅。 &lt;/p&gt;&#xD;
&lt;p&gt;業者表示，雖然國際 ERP 大廠擁有市佔率優勢，&lt;span style="color: #ff0000"&gt;但是在地化服務，例如：稅法等，仍以本地廠商較為熟悉&lt;/span&gt;。且本地市場以外，台商持續全球化布局，台系 SI 業者未來也可望外銷 IFRS 相關產品到中國大陸或其他新興市場。 &lt;/p&gt;&#xD;
&lt;p&gt;此外，SI 業者指出，由於導入 IFRS 後，企業所適用的會計準則，則由該公司的簽證會計師主導決定，因此與會計師業合力搶攻 IFRS 商機大餅，亦是後續的發展重點。 &lt;/p&gt;&#xD;
&lt;p&gt;工業局指出，以往國際 ERP 大廠長期握有製造業等大型企業客戶，台系廠商則是以中小型企業為主，不過近年來&amp;nbsp;SAP 等業者也開始往下佈局服務業或小型企業需求，因此希望透過全面導入 IFRS 的需求，推動台系 SI 廠搶下部分大型製造業客戶，避免市場遭到過多侵蝕。&amp;nbsp; &lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/WizardWu/aggbug/1837198.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/09/28/1837198.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/WizardWu/archive/2010/09/14/1825523.html</id><title type="text">以 .NET 创建 Code 39 条码图片 供水晶报表打印</title><summary type="text">教导如何用 C# 创建 Code 39 编码的「条码 (barcode)」图片，以供 ASP.NET + Crystal Reports 水晶报表呈现和打印此条码。本帖提供 ASP.NET 3.5 示例下载。</summary><published>2010-09-13T19:19:00Z</published><updated>2010-09-13T19:19:00Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/WizardWu/archive/2010/09/14/1825523.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/archive/2010/09/14/1825523.html"/><content type="html">&lt;p&gt;&lt;font face="Times New Roman"&gt;教导如何用 C# 创建 Code 39 编码的「条码 (barcode)」图片，以供 ASP.NET + Crystal Reports 水晶报表呈现和打印此条码。本帖提供 ASP.NET 3.5 示例下载。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;-------------------------------------------------&lt;br /&gt;本帖的示例下载点：&lt;br /&gt;&lt;a href="http://files.cnblogs.com/WizardWu/100914.zip"&gt;http://files.cnblogs.com/WizardWu/100914.zip&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font face="Times New Roman"&gt;执行本示例，需要 SQL Server 的 Northwind 数据库，以及 VS 2008 或 IIS，另还需要 Crystal Reports 2008 标准版 (SAP 公司的网站可下载完整的安装程序，无使用限制，但安装前需要输入安装序列号)。&lt;br /&gt;若是 VS 2005/2008 内置的免费简易版 Crystal Reports，由于不具备「动态截取网络图片」的功能、无法抓取既有的条码图片，因此不适用本帖的教学。&lt;br /&gt;---------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Times New Roman"&gt;日前做 ASP.NET 的项目用到 Crystal Reports 水晶报表，必须要能在浏览器中的报表显示和打印条码。原本我&lt;span style="color: red"&gt;采用「字体 (font)」的方式产生条码&lt;/span&gt; (水晶报表内置将某个数据库字段，直接转成条形码的功能)，但后来发现这种做法，&lt;span style="color: red"&gt;布署时必须在每一台客户端的 Windows 上安装特定的条码字体&lt;/span&gt;，如：free3of9 (可免费下载)，才能在客户端浏览器正确显示和打印条码。因此后来弃用这种做法，&lt;span style="color: red"&gt;改用「图片」的方式产生条码。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Times New Roman"&gt;做法是先用 C# 和 .NET 的绘图 API，搭配一维条码最普遍的 Code 39 编码其规则，写一个可创建条码图片的 .ashx (HttpHandler) 或 .aspx，(这个文件放在报表的同一个 ASP.NET 项目里即可，不必发布成 service)。接着在 Crystal Reports 文件里，随便插入一张图片，透过水晶报表标准版才有的「动态截取网络图片」功能 (Visual Studio 内置的免费版水晶报表无此功能)，去抓取这张已创建的条码图片，并要能动态传入参数，以让报表在换页时，条码可跟着变动内容。&lt;/font&gt;&lt;/p&gt;&lt;font face="Times New Roman"&gt;&#xD;
&lt;p&gt;&lt;br /&gt;首先用 C# 和 .NET 的绘图 API，搭配 Code 39 条码的编码规则，写一个可创建条码图片的组件。请参考本帖的下载示例，直接用浏览器开启 Code39Handler.ashx，并透过浏览器的 URL 地址栏，手动输入条码的参数作测试。执行结果和源代码 (这种组件通常是要钱的) 如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100914_01.jpg" width="594" height="143" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 1　用 C# 和 .NET 的绘图 API，搭配 Code 39 编码规则产生的条码图片&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;以下代码，是用 C# 和 .NET 的绘图 API，搭配 Code 39 编码规则产生条码图片 (原版 VB 版作者为台湾的 阿達猴)。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('a9b4ce12-9b87-48ec-b7f3-9aa4f29b222a')"&gt;&lt;img style="display: none" id="code_img_opened_a9b4ce12-9b87-48ec-b7f3-9aa4f29b222a"  onclick="cnblogs_code_hide('a9b4ce12-9b87-48ec-b7f3-9aa4f29b222a',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt; &#xD;
&lt;div id="cnblogs_code_open_a9b4ce12-9b87-48ec-b7f3-9aa4f29b222a" &gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;@&amp;nbsp;WebHandler&amp;nbsp;Language&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;C#&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Class&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Code39Handler&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Web;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Drawing;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Drawing.Imaging;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Drawing.Text;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;用&amp;nbsp;.NET&amp;nbsp;繪圖&amp;nbsp;API，搭配條碼最普遍的&amp;nbsp;Code&amp;nbsp;39&amp;nbsp;編碼規則&amp;nbsp;(一般超商的讀條碼機都可讀)，產生條碼圖檔&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Code39Handler&amp;nbsp;:&amp;nbsp;IHttpHandler&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ProcessRequest&amp;nbsp;(HttpContext&amp;nbsp;context)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;context.Response.ContentType&amp;nbsp;=&amp;nbsp;"text/plain";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;context.Response.Write("Hello&amp;nbsp;World");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;Logic&amp;nbsp;to&amp;nbsp;retrieve&amp;nbsp;the&amp;nbsp;image&amp;nbsp;file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;context.Response.ContentType&amp;nbsp;=&amp;nbsp;"image/jpeg";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;context.Response.WriteFile("MyImage01.jpg");&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mycode&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;context.Request[&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;code&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;字串;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;字元;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;字串&amp;nbsp;=&amp;nbsp;"*-%$*"&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;字串&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;*&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mycode&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;*&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;Code&amp;nbsp;39&amp;nbsp;的特性是前、後置碼會標識「星號(*)」，表示開始和結束&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;畫布高&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;35&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;畫布寬&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;筆y&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;20&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;int&amp;nbsp;筆寬&amp;nbsp;=&amp;nbsp;0;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #000000"&gt;!&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.IsNullOrEmpty(mycode))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;字串.Length&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;13&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;br /&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;Bitmap&amp;nbsp;BMP&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Bitmap(畫布寬,&amp;nbsp;畫布高,&amp;nbsp;System.Drawing.Imaging.PixelFormat.Format32bppPArgb);&lt;br /&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;Graphics&amp;nbsp;G&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Graphics.FromImage(BMP);&lt;br /&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;G.TextRenderingHint&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;TextRenderingHint.AntiAlias;&lt;br /&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;G.Clear(Color.White);&lt;br /&gt;&lt;br /&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;Brush&amp;nbsp;筆刷1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;SolidBrush(Color.White);&lt;br /&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;G.SmoothingMode&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Drawing.Drawing2D.SmoothingMode.HighQuality;&lt;br /&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;G.FillRectangle(筆刷1,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;畫布寬,&amp;nbsp;畫布高);&lt;br /&gt;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;字串.Length;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&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;{&lt;br /&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;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;取得&amp;nbsp;Code&amp;nbsp;39&amp;nbsp;碼的規則&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&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;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;.genBarcode(字串.Substring(i,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;).ToUpper());&lt;br /&gt;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;j&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;j&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;4&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;j&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&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;{&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(字元.Substring(j,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;).Equals(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;0&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;br /&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;{&lt;br /&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;G.DrawLine(Pens.Black,&amp;nbsp;筆x,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆x,&amp;nbsp;筆y);&lt;br /&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;}&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&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;{&lt;br /&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;G.DrawLine(Pens.Black,&amp;nbsp;筆x,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆x,&amp;nbsp;筆y);&lt;br /&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;G.DrawLine(Pens.Black,&amp;nbsp;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆y);&lt;br /&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;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;}&lt;br /&gt;&lt;br /&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;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(字元.Substring(j&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;).Equals(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;0&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;br /&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;{&lt;br /&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;G.DrawLine(Pens.White,&amp;nbsp;筆x,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆x,&amp;nbsp;筆y);&lt;br /&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;}&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&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;{&lt;br /&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;G.DrawLine(Pens.White,&amp;nbsp;筆x,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆x,&amp;nbsp;筆y);&lt;br /&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;G.DrawLine(Pens.White,&amp;nbsp;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆y);&lt;br /&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;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;}&lt;br /&gt;&lt;br /&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;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;end&amp;nbsp;of&amp;nbsp;loop&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(字元.Substring(&lt;/span&gt;&lt;span style="color: #800080"&gt;4&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;).Equals(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;0&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;br /&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;{&lt;br /&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;G.DrawLine(Pens.Black,&amp;nbsp;筆x,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆x,&amp;nbsp;筆y);&lt;br /&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;}&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&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;{&lt;br /&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;G.DrawLine(Pens.Black,&amp;nbsp;筆x,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆x,&amp;nbsp;筆y);&lt;br /&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;G.DrawLine(Pens.Black,&amp;nbsp;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;筆y);&lt;br /&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;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;}&lt;br /&gt;&lt;br /&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;筆x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;end&amp;nbsp;of&amp;nbsp;loop&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;addx&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;13&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;br /&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;G.DrawString(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;-&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Font(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Arial&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;10&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;FontStyle.Italic),&amp;nbsp;SystemBrushes.WindowText,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;PointF(x,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;20&lt;/span&gt;&lt;span style="color: #000000"&gt;));&lt;br /&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;x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;addx;&lt;br /&gt;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;k&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;k&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;mycode.Length;&amp;nbsp;k&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&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;{&lt;br /&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;G.DrawString(mycode.Substring(k,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;),&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Font(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Arial&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;10&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;FontStyle.Italic),&amp;nbsp;SystemBrushes.WindowText,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;PointF(x,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;20&lt;/span&gt;&lt;span style="color: #000000"&gt;));&lt;br /&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;x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;x&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;addx;&lt;br /&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;}&lt;br /&gt;&lt;br /&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;G.DrawString(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;-&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Font(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Arial&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;10&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;FontStyle.Italic),&amp;nbsp;SystemBrushes.WindowText,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;PointF(x,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;20&lt;/span&gt;&lt;span style="color: #000000"&gt;));&lt;br /&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;BMP.Save(context.Response.OutputStream,&amp;nbsp;ImageFormat.Jpeg);&lt;br /&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;G.Dispose();&lt;br /&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;BMP.Dispose();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;br /&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;Bitmap&amp;nbsp;BMP&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Bitmap(畫布寬,&amp;nbsp;畫布高,&amp;nbsp;System.Drawing.Imaging.PixelFormat.Format32bppPArgb);&lt;br /&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;Graphics&amp;nbsp;G&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Graphics.FromImage(BMP);&lt;br /&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;G.TextRenderingHint&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;TextRenderingHint.AntiAlias;&lt;br /&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;G.Clear(Color.White);&lt;br /&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;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;未給參數時顯示的提示內容&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&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;G.DrawString(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;無條碼產生&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Font(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;宋体&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;12&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;FontStyle.Regular),&amp;nbsp;SystemBrushes.WindowText,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;PointF(&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;20&lt;/span&gt;&lt;span style="color: #000000"&gt;));&lt;br /&gt;&lt;br /&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;BMP.Save(context.Response.OutputStream,&amp;nbsp;ImageFormat.Jpeg);&lt;br /&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;G.Dispose();&lt;br /&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;BMP.Dispose();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;規則可參考網址&amp;nbsp;1：&lt;/span&gt;&lt;span style="color: #008000; text-decoration: underline"&gt;http://blog.csdn.net/xuzhongxuan/archive/2008/05/28/2489358.aspx&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;規則可參考網址&amp;nbsp;2：&lt;/span&gt;&lt;span style="color: #008000; text-decoration: underline"&gt;http://blog.163.com/zryou/blog/static/6903184200971704226450/&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;Code&amp;nbsp;39&amp;nbsp;碼的規則。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;Code&amp;nbsp;39&amp;nbsp;碼可使用的字元如下：0~9、A~Z、+、-、*、/、%、$、.&amp;nbsp;及空白字元。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="code"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;genBarcode(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;code)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;switch&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(code)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;0&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;001100100&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;100010100&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;2&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;010010100&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;3&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;110000100&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;4&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;001010100&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;5&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;101000100&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;6&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;011000100&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;7&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;000110100&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;8&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;100100100&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;9&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;010100100&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;A&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;100010010&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;B&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;010010010&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;C&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;110000010&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;D&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;001010010&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;E&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;101000010&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;F&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;011000010&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;G&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;000110010&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;H&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;100100010&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;I&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;010100010&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;J&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;001100010&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;K&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;100010001&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;L&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;010010001&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;M&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;110000001&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;N&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;001010001&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;O&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;101000001&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;P&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;011000001&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Q&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;000110001&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;R&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;100100001&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;S&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;010100001&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;T&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;001100001&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;U&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;100011000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;V&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;010011000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;W&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;110001000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;X&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;001011000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Y&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;101001000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Z&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;011001000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;*&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;001101000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;-&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;000111000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;好像辨識不出來&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;%&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;100101000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;好像辨識不出來&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;$&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;010101000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;好像辨識不出來&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;default&lt;/span&gt;&lt;span style="color: #000000"&gt;:&lt;br /&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;code&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;010101000&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;都不是就印&amp;nbsp;$&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;code;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IsReusable&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;{&lt;br /&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;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;执行 Default.aspx 里的水晶报表，结果如下图 2。条码是图片，不是字体，不必担心客户端的浏览器或打印机无法辨识某种条码字体。另下图 2 里，Employees 表的 EmployeeID 字段在数据库里是 int 类型，其传递至水晶报表默认会被当作 Number 类型，而自动显示小数点及后两位数字。本文后续会提到此问题的解法。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100914_02.jpg" width="896" height="301" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 2　报表换页时，会传入不同的参数内容到我们写的条码组件里，因此条码内容也会跟着变动&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;若您想测试本帖示例，可去 &lt;a href="http://www.sdn.sap.com/irj/boc/downloads" target="_blank"&gt;SAP 公司的官方网站&lt;/a&gt;，下载标准版的 Crystal Reports 2008 软件 (下载页面标识的 Service Pack 版或 V1 版，若文件大小有 300 多至 500 多 MB，表示已内置安装主程序 + 修补程序，并非只有修补程序)。该软件和 Oracle 数据库的策略一样，提供网络下载完整的安装主程序、无使用时间限制或功能限制，但安装 Crystal Reports 前需要输入序列号 (怎么找序列号本文不赘述)。安装过程如下图 3，应加选「数据访问」的 ADO.NET 功能，以配合本帖示例的 ASP.NET 报表做法，透过网站 App_Code 文件夹里，事先定义好要访问的数据库内容的 .xsd (DataSet) 文件，作为设计 Crystal Reports 报表时的数据来源 (.xsd 为 XML 文件，这里面会依您写的 SQL 语句，了解报表要访问哪些表的哪些字段)。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100914_03.jpg" width="432" height="329" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 3　Crystal Reports 2008 安装过程，加选「数据访问」的 ADO.NET 选项&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;如下图 4、图 5，在新建的水晶报表文件里，随便插入一个图片，在上面单击右键选择「设置图形格式」，再选择 Crystal Reports 标准版才有的「图形位置」功能。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100914_04.jpg" width="430" height="175" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 4　在水晶报表里先随便插入一张图片&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100914_05.jpg" width="402" height="355" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 5　Crystal Reports 标准版才有的「图形位置」功能，VS 2005/2008 内置的版本无此功能&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;如下图 6，在水晶报表的「公式编辑器」里，输入以下内容和参数。此处动态传入的参数，会传入上图 1 里，我们事先用 C# 写好的条码生成组件。此例中，参数内容是 Employees 表的 EmployeeID 字段。&lt;span style="color: red"&gt;若您报表里的条码，无法正确透过浏览器呈现，多半是这里的地址、端口号或内容打错&lt;/span&gt;，或此创建条码的服务未正确启用，此时浏览器只会显示原始插入报表的图片，而非条码。&lt;br /&gt;&lt;br /&gt;下图 6、图 7 的公式编辑器里，及本帖提供的下载示例，在引用 Code39Handler.ashx 时站点的 URL 是硬编码的绝对路径，但我们可以改成动态赋值，如下：&lt;br /&gt;"http://" &amp;amp; {&lt;span style="color: red"&gt;?param1&lt;/span&gt;} &amp;amp; "/Code39Handler.ashx?code=" &amp;amp; {Employees.EmployeeID}&lt;br /&gt;&lt;br /&gt;其中 ?param1 是我们从 ASP.NET Code-Behind，以 C# 传入的参数。我们可先用 C# 取得 Web server 机器的 IP 或 Domain Name，将其以字符串参数的方式，传入水晶报表的公式里，即可动态赋值，无须硬编码将 IP 写死在水晶报表的公式里。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100914_06.jpg" width="730" height="279" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 6　公式编辑器里的语法，较类似 VB 或 VB.NET&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;另在上图 2 里，我们提到 EmployeeID 字段，在数据库里的类型是 int，在水晶报表里会被当作 Number 类型，而在条码里自动加上小数点及后两位数字。解决方式如下图 7，用 水晶报表自带的 CStr 函数，将该字段转型成字符串即可。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100914_07.jpg" width="551" height="46" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 7　若报表里的条码，无法正确透过浏览器呈现，多半是这里的地址或内容打错，或这里未改成您 VS 2008 内置 Web server 或 IIS 执行时的正确地址、端口号&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;本文介绍的这种图片条码的做法，&lt;span style="color: red"&gt;不只适用于 Crystal Reports 报表软件才能引用&lt;/span&gt;。理论上，其他厂牌的报表软件、网页程序，只要能链接至这个挂在 IIS 上提供服务的 Code39Handler.ashx 组件，就能在各自的报表或网页中，呈现此图片条码以供浏览和打印。&lt;font face="Times New Roman"&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;/font&gt;附带一提，在布署 ASP.NET 水晶报表至 IIS 时，必须将 IIS 默认目录：&lt;br /&gt;C:\Inetpub\wwwroot\&lt;br /&gt;底下的 aspnet_client 文件夹和里面的文件 (图 8)，一并拷贝至我们的 ASP.NET 网站底下 (图 9)，这样透过 IIS 执行的水晶报表，才能正确显示报表 Toolbar 里的 icon 按钮，并正确展示相关的功能。&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100914_08.jpg" width="295" height="163" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 8　此文件夹在安装完 Crystal Reports 主程序后，内容会自动增加&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100914_09.jpg" width="396" height="235" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 9　ASP.NET 网站布署至 IIS 时，必须一并将 aspnet_client 文件夹拷贝至网站的根目录&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;顺便提醒，水晶报表的打印方式分两种，一是透过报表 Toolbar 自带的打印按钮 (参考上图 2)，二是自己撰码调用 ReportDocument 类的 PrintToPrinter 方法。&lt;br /&gt;&lt;br /&gt;第一种打印方式，才能突破浏览器的安全限制，自动下载 ActiveX 程序以呈现打印预览的窗体，并能自动抓取到客户端的打印机名称。这种做法适合跨互联网打印，或需要在各自办公室里打印的用户。&lt;br /&gt;第二种打印方式，虽然程序客制能力较强，但只能抓取服务器端的打印机名称，因此报表只能在服务器端打印或生成 PDF 文件。这种做法只适合同一个 LAN 或近距离 Intranet 共用打印机的用户。&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/WizardWu/aggbug/1825523.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/09/14/1825523.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/WizardWu/archive/2010/08/13/1798645.html</id><title type="text">快速搞懂 SQL Server 的锁定和阻塞</title><summary type="text">本帖提供两种做法，可避免在 SQL Server 事务锁定时产生的不正常或长时间阻塞，让用户和程序也无限期等待，甚至引起 connection pooling 连接数超过容量。</summary><published>2010-08-12T18:30:00Z</published><updated>2010-08-12T18:30:00Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/WizardWu/archive/2010/08/13/1798645.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/archive/2010/08/13/1798645.html"/><content type="html">&lt;p&gt;本帖提供两种做法，可避免在 SQL Server 事务锁定时产生的不正常或长时间阻塞，让用户和程序也无限期等待，甚至引起 connection pooling 连接数超过容量。 &lt;/p&gt;&#xD;
&lt;p&gt;所谓的「阻塞」，是指当一个数据库会话中的事务，正在锁定其他会话事务想要读取或修改的资源，造成这些会话发出的请求进入等待的状态。&lt;span style="color: red"&gt;SQL Server 默认会让被阻塞的请求无限期地一直等待&lt;/span&gt;，直到原来的事务释放相关的锁，或直到它超时 (根据 SET LOCK_TIMEOUT，本文后续会提到)、服务器关闭、进程被杀死。一般的系统中，偶尔有短时间的阻塞是正常且合理的；但若设计不良的程序，就可能导致长时间的阻塞，这样就不必要地锁定了资源，而且阻塞了其他会话欲读取或更新的需求。遇到这种情况，可能就需要手工排除阻塞的状态，而本文接下来要介绍两种排除阻塞的做法。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;日前公司 server-side 有组件，疑似因撰写时 exception-handling 做得不周全，导致罕见的特殊例外发生时，让 SQL Server 的事务未执行到 cmmmit 或 rollback，造成某些表或记录被「锁定 (lock)」。后来又有大量的 request，要透过代码访问这些被锁定的记录，结果造成了严重的长时间「阻塞」，最后有大量 process (进程)&amp;nbsp;在 SQL Server 呈现「等待中 (WAIT)」的状态。&lt;/p&gt;&#xD;
&lt;p&gt;由于 SQL Server 的「事务隔离级别」默认是 READ COMMITTED (事务期间别人无法读取)，加上 SQL Server 的锁定造成阻塞时，默认是别的进程必须无限期等待 (LOCK_TIMEOUT = -1)。结果这些大量的客户端 request 无限期等待永远不会提交或回滚的事务，并一直占用着 connection pool 中的资源，最后造成 connection pooling 连接数目超载。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
查了一些书，若我们要查询 SQL Server 目前会话中的 lock 超时时间，可用以下的命令：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;SELECT @@LOCK_TIMEOUT&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
执行结果默认为 -1，意即欲访问的对象或记录被锁定时，会无限期等待。若欲更改当前会话的此值，可用下列命令：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;SET LOCK_TIMEOUT 3000&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;后面的 3000，其单位为毫秒，亦即会先等待被锁定的对象 3 秒钟。若事务仍未释放锁，则会抛回如下代号为 1222 的错误信息，可供程序员编程时做相关的逾时处理：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;消息 1222，级别 16，状态 51，第 3 行&lt;/span&gt;&lt;br /&gt;&#xD;
&lt;span style="color: red"&gt;已超过了锁请求超时时段。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;若将 LOCK_TIMEOUT 设置为 0，亦即当欲访问对象被锁定时，完全不等待就抛回代号 1222 的错误信息。此外，此一 SET LOCK_TIMEOUT 命令，影响范例只限当前会话 (进程)，而非对某个表做永久的设置。&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------------- &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
接下来我们在 SSMS 中，开两个会话 (查询窗口) 做测试，会话 A 创建会造成阻塞的事务进程，会话 B 去访问被锁定的记录。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&#xD;
&lt;br/ /&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/ /&gt;&#xD;
&lt;br/ /&gt;&#xD;
--&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;会话&amp;nbsp;A&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;TRAN&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;UPDATE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Orders&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;SET&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;EmployeeID&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;7&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OrderID&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;10248&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;rollback;&amp;nbsp;--故意不提交或回滚&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&#xD;
&lt;br/ /&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/ /&gt;&#xD;
&lt;br/ /&gt;&#xD;
--&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;会话&amp;nbsp;B&lt;/span&gt;&lt;span style="color: #008080"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Orders&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OrderID&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;10248&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;分别执行后，因为欲访问的记录是同一条，按照 SQL Server 「事务隔离级别」和「锁」的默认值，会话 B 将无法读取该条数据，而且会永远一直等下去 (若在现实项目里写出这种代码，就准备被客户和老板臭骂)。&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------------- &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
若将会话 B 先加上 SET LOCK_TIMEOUT 3000 的设置，如下，则会话 B 会先等待 3 秒钟，才抛出代号 1222 的「锁请求已超时」错误信息：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&#xD;
&lt;br/ /&gt;&#xD;
Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;&#xD;
http://www.CodeHighlighter.com/&lt;br/ /&gt;&#xD;
&lt;br/ /&gt;&#xD;
--&gt;&lt;span style="color: #0000ff"&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;会话&amp;nbsp;B&lt;/span&gt;&lt;br /&gt;&#xD;
SET&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;LOCK_TIMEOUT&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;3000&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Orders&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;OrderID&lt;/span&gt;&lt;span style="color: #808080"&gt;=&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold"&gt;10248&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #008080"&gt;--&lt;/span&gt;&lt;span style="color: #008080"&gt;SET&amp;nbsp;LOCK_TIMEOUT&amp;nbsp;-1&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;执行结果：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: red"&gt;消息 1222，级别 16，状态 51，第 3 行&lt;/span&gt;&lt;br /&gt;&#xD;
&lt;span style="color: red"&gt;已超过了锁请求超时时段。&lt;/span&gt;&lt;br /&gt;&#xD;
&lt;span style="color: red"&gt;语句已终止。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------------- &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
另根据我之前写的文章「30 分钟快快乐乐学 SQL Performance Tuning」所述：&lt;br /&gt;&#xD;
&lt;a href="http://www.cnblogs.com/WizardWu/archive/2008/10/27/1320055.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2008/10/27/1320055.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;撰写不当的 SQL 语句，会让数据库的索引无法使用，造成全表扫描或全聚集索引扫描。例如不当的：NOT、OR 算符使用，或是直接用 + 号做来串接两个字段当作 WHERE 条件，都可能造成索引失效，变成全表扫描，除了性能变差之外，此时若这句不良的 SQL 语句，是本帖前述会话 B 的语句，由于会造成全表扫描或聚集索引扫描，因此就一定会被会话 A 的事务阻塞 (因为扫描全表时，一定也会读到 OrderID=10248 这一条会话 A 正在锁定的记录)。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
下方的 SQL 语句，由于 OrderID 字段有设索引，因此下图 1 的「执行计划」，会以算法中的「二分查找法」在索引中快速查找 OrderID=10250 的记录。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;SELECT * FROM Orders WHERE OrderID=10250&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;SELECT * FROM Orders WHERE OrderID=10250 AND ShipCountry='Brazil' &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100813_01.jpg" width="552" height="215" /&gt;&lt;br /&gt;&#xD;
&lt;span style="background-color: #ffff99"&gt;图 1　有正确使用到索引的 SQL 语句，以垂直的方向使用索引。用 AND 算符时，只要有任一个字段有加上索引，就能受惠于索引的好处，并避免全表扫描 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;此时若我们将这句 SQL 语句，当作前述会话 B 的语句，由于它和会话 A 所 UPDATE 的 OrderID=10248 不是同一条记录，因此不会受会话 A 事务未回滚的影响，会话 B 能正常执行 SELECT 语句。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
但若我们将会话 B 的 SQL 语句，改用如下的 OR 算符，由于 ShipCountry 字段没有加上索引，此时会造成聚集索引扫描 (和全表扫描一样，会对整个表做逐条记录的 scan)。如此一来，除了性能低落以外，还会因为在逐条扫描时，读到会话 A 中锁定的 OrderID=10248 那一条记录，造成阻塞，让会话 B 永远呈现「等待中」的状态。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;SELECT * FROM Orders WHERE OrderID=10250 OR ShipCountry='Brazil' &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100813_02.jpg" width="555" height="219" /&gt;&lt;br /&gt;&#xD;
&lt;span style="background-color: #ffff99"&gt;图 2　未正确使用索引的 SQL 语句，以水平的方向使用索引。用 OR 算符时，必须「所有」用到的字段都有加上索引，才能有效使用索引、避免全表扫描&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------------- &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
发生阻塞时，透过以下命令，可看出是哪个进程 session id，阻塞了哪几个进程 session id，且期间经过了多少「毫秒 (ms)」。如下图 3 里 session id = 53 阻塞了 session id = 52 的进程。另透过 SQL Server Profiler 工具，也能看到相同的内容。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;SELECT blocking_session_id, wait_duration_ms, session_id FROM sys.dm_os_waiting_tasks &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100813_03.jpg" width="728" height="382" /&gt;&lt;br /&gt;&#xD;
&lt;span style="background-color: #ffff99"&gt;图 3　本帖前述会话 A 的 UPDATE 语句 (53)，阻塞了会话 B 的 SELECT 语句 (52)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
透过以下两个命令，我们还能看到整个数据库的锁定和阻塞详细信息：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;SELECT * FROM sys.dm_tran_locks &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;EXEC sp_lock &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100813_04.jpg" width="486" height="180" /&gt;&lt;br /&gt;&#xD;
&lt;span style="background-color: #ffff99"&gt;图 4　session id = 52 的 process 因阻塞而一直处于等待中 (WAIT)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
另透过 KILL 命令，可直接杀掉造成阻塞的 process，如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;KILL 53&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------------------------- &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
欲解决无限期等待的问题，除了前述的 SET LOCK_TIMEOUT 命令外，还有更省事的做法，如下，在会话 B 的 SQL 语句中，在表名称后面加上 WITH (NOLOCK) 关键字，表示要求&amp;nbsp; SQL Server，不必去考虑这个表的锁定状态为何，因此也可减少「死锁 (dead lock)」发生的机率。但 WITH (NOLOCK) 不适用 INSERT、UPDATE、DELETE。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;SELECT * FROM Orders WITH (NOLOCK) WHERE OrderID=10248&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
类似的功能，也可如下，在 SQL 语句前，先设置「事务隔离级别」为可「脏读 (dirty read)」。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #339966"&gt;SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED&lt;/span&gt;&lt;br /&gt;&#xD;
&lt;span style="color: #339966"&gt;SELECT * FROM Orders WHERE OrderID=10248&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
两种做法的效果类似，让会话 B 即使读到被锁阻塞的记录，也永远不必等待，但可能读到别人未提交的数据。虽然说这种做法让会话 B 不用请求共享锁，亦即永远不会和其他事务发生冲突，但应考虑项目开发实际的需求，若会话 B 要查询的是原物料的库存量，或银行系统的关键数据，就不适合用这种做法，而应改用第一种做法的 SET LOCK_TIMEOUT 命令，明确让数据库抛回等候逾时的错误代号 1222，再自己写代码做处理。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
------------------------------------------------------------------------------------------- &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
归根究柢，我们在编程时，就应该避免写出会造成长时间阻塞的 SQL 语句，亦即应最小化锁定争用的可能性，以下为一些建议：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
    &lt;li&gt;尽可能让事务轻薄短小、让锁定的时间尽量短，例如把不必要的命令移出事务外，或把一个大量更新的事务，切成多个更新较少的事务，以改善并发性。&lt;/li&gt;&#xD;
    &lt;li&gt;将组成事务的 SQL 语句，摆到一个「批&amp;nbsp;(batch) 处理」，以避免不必要的延迟。这些延迟常由 BEGIN TRAN ... COMMIT TRAN 命令之间的网络 I/O 所引起。&lt;/li&gt;&#xD;
    &lt;li&gt;考虑将事务的 SQL 语句写在一个存储过程内。一般来说，存储过程的执行速度会比批处理的 SQL 语句快，且存储过程可降低网络的流量和 I/O，让事务可更快完成。&lt;/li&gt;&#xD;
    &lt;li&gt;尽可能频繁地认可 Cursor 中的更新，因为 Cursor 的处理速度较慢，会让锁定的时间较长。&lt;/li&gt;&#xD;
    &lt;li&gt;若无必要，使用较宽松的事务隔离级别，如前述的 WITH (NOLOCK) 和 READ UNCOMMITTED。而非为了项目开发方便，全部使用默认的 READ COMMITTED 级别。&lt;/li&gt;&#xD;
    &lt;li&gt;避免在事务执行期间，还要等待用户的反馈或交互，这样可能会造成无限期的持有锁定，如同本帖一开始提到的状况，最后造成大量的阻塞和数据库 connection 被占用。&lt;/li&gt;&#xD;
    &lt;li&gt;避免事务 BEGIN TRAN 后查询的数据，可能在事务开始之前先被引用。&lt;/li&gt;&#xD;
    &lt;li&gt;避免在查询时 JOIN 过多的表 (此指非必要的 JOIN)，否则除了性能较差外，也很容易读到正被锁定或阻塞中的表和字段。&lt;/li&gt;&#xD;
    &lt;li&gt;应注意在一个没有索引的表上，过量的「行锁」，或一些锁定使用了过多的内存和系统资源时，SQL Server 为了有效地管理这些锁定，会尝试将锁定扩展为整个表的「表锁」，此时会很容易造成其他 process 在访问时的阻塞和等待。&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;-------------------------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;本帖尚未提到死锁和其他更进阶的议题，等下次有空再继续泡茶聊天。&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/WizardWu/aggbug/1798645.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/08/13/1798645.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/WizardWu/archive/2010/06/27/1766097.html</id><title type="text">微软 .NET 推出十年回顾</title><summary type="text">自己多年来的学习及工作心得，并回顾 .NET 平台诞生之初的趣闻轶事。</summary><published>2010-06-27T07:04:00Z</published><updated>2010-06-27T07:04:00Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/WizardWu/archive/2010/06/27/1766097.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/archive/2010/06/27/1766097.html"/><content type="html">&lt;p&gt;约&amp;nbsp;10 年前，微软推出了 .NET 1.0 英文版，我当时对编程还是外行人。&lt;br /&gt;&lt;br /&gt;我的 IT 生涯先是从网络管理、Windows Server 2000、SQL Server 2000 学起。考到 MCSE 2000 后，觉得管理网络、修机器，无法发挥创造力，因此后来开始自修 Java。不久后，被微软的疯狂营销所影响，开始接触 .NET 平台。转换平台的原因，除了中文书籍、中文技术文章较多以外，也觉得 Visual Studio 2002 用起来颇顺手。&lt;/p&gt;&#xD;
&lt;p&gt;多年后的今日，提供自己的一些学习和工作心得，给网友们及新手作为参考：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;程序语言、编程技术和开发工具，只是完成某项工作、做某个项目，或学术研究的辅助工具。编程技术虽然重要，但必须搭配其他知识和 know-how，才能彰显出技术的价值，例如开发 ERP 系统，不能不懂：初级会计、成本会计、物料和库存管理、生产制造排程、... 等相关知识。在少有大型软件公司的华人世界，只懂写代码、钻研技术，而无第二、第三专长的人，很难在薪资和职涯上有所突破，参考：&lt;a href="http://www.cnblogs.com/WizardWu/archive/2009/01/29/1381275.html" target="_blank"&gt;程序员真情忏悔录&lt;/a&gt;。&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;不要因为自己学的是 .NET 技术，就盲目崇拜微软的一切，微软推出什么新技术你都拼命学，还到处主动帮微软推广新技术。学习前，应先对这门技术做概略式地了解，并做投资报酬率评估，这门技术的未来发展性、在企业的实用性如何，才决定是否花时间学习。且即使接触新技术，也应该采取「大局观」的学习，逐步了解这门技术未来的发展性、实用性，而非钻研随时可能被淘汰的新技术其代码的支微末节。不论任何伟大的公司，也可能犯下致命的决策错误，参考：&lt;a href="http://news.cnblogs.com/n/70433/" target="_blank"&gt;微软这 10 年犯下的五大错误&lt;/a&gt;、&lt;a href="http://ozzie.net/docs/dawn-of-a-new-day/" target="_blank"&gt;Dawn of&amp;nbsp;a New Day (Ray Ozzie)&lt;/a&gt;。 &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;若要学习架构设计、系统设计，要多阅读国外的书籍和示例，也一定要接触 Java / J2EE / Design Patterns 的书籍，多和 Java 牛人交流，不要将自己绑在 .NET / 3-Tier / PetShop 的圈子里，更不是把 .NET 各种技术都学一遍就叫做懂得设计。有些 J2EEr 大牛，活用 OOAD 设计出来的系统和组件，极具解耦、易串接性、可扩展性，而非单用设计模式的其中一两种而已，有时会多种同时搭配混用。小弟我初见此等高人的设计时，感觉犹如笑傲江湖中所述，刘仲甫初遇骊山仙姥对奕时的仙着。这方面的技巧，即使是国外的 .NET 英文书籍，甚至微软官方 Microsoft Press 介绍架构设计的书籍，我认为也有不足之处。&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;如前所述，若要成为全面性的技术人员、企业不可或缺的人才 (而不像某些软件公司把程序员当作廉价劳工)，必须创造自己的不可替代性。这方面我个人认为，无须每天去钻研最新最火的技术和框架，而是应该「横向」发展和学习，多接触如：财务、会计、商业作帐、产业的供应链、库存管理 (可写成厚厚一本布满数学公式和统计图表的书籍)、工作流、销售和采购、电子商务 (性能和安全性)、...。若能在下班及闲暇之馀，多学习其中一两项，让自己成为「跨领域」的人材，必能造就自己无可取代的身价；而非沦为天天追着新技术跑，履历表和博客上永远只有技术名词和一堆 MCxx 的头衔，或在下一个 10 年的除夕夜，只能独自抱着 .NET 14.0 的原文书在苦读。&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;br /&gt;最后转贴&lt;a href="http://gordonliwei.spaces.live.com/" target="_blank"&gt;李维先生&lt;/a&gt;所着，「&lt;a href="http://www.china-pub.com/19118" target="_blank"&gt;Borland传奇&lt;/a&gt;」书中一段，描述 .NET 在 10 年前诞生的故事，及其创造者 Anders Hejlsberg 的一些趣味故事。&lt;/p&gt;&#xD;
&lt;p&gt;--------------------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Anders Hejlsberg 这位不世出的软件天才，是目前全世界最顶尖的软件技术人员之一。论实现技术，Anders 可能是当世的第一高手，因为他精通程序语言、编译器技术、开发工具、Framework 以及系统架构。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100627_01.gif" width="160" height="160" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;虽然 Anders 没有显赫的学历，无法获得 Turning Awards (即图灵奖，信息科学界最高荣誉的奖项，等同于诺贝尔奖)。但是我认为 Anders 的实力和贡献，绝不输于任何一位 Turning Awards 的得奖人。Anders 是最好的信息实践型人物，在 2001 年，他终于获得了信息界最具权威的信息刊物 Dr. Dobbs' Journal 颁发的 Excellent Programming Awards，以表彰 Anders 为信息界做出的卓越贡献。我想 Anders 应该是许多本身没有高学历或不是计算机信息科系出身的优秀程序员最好的效仿对象。&lt;/p&gt;&#xD;
&lt;p&gt;Anders 精通程序语言、编译器技术、开发工具、Framework 以及系统架构。我虽然知道许多软件界重要的人物和好手，但是尚不知有任何人能像 Anders 一样在这么多领域都能成为大家。下面是笔者整理出 Anders Hejlsberg 到目前为止重要的功绩、贡献以及获颁的重要大奖：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;和 Philippe Kahn 共同创办 Borland 公司&lt;/li&gt;&lt;li&gt;开发出 Turbo Pascal，当时首创的 In-Memory Compiler 震驚了全世界&lt;/li&gt;&lt;li&gt;开发出全世界最畅销的 Pascal 产品，Turbo Pascal (这是许多信息人员学习 Pascal 和 Data Structure 使用的经典产品) 以及 Borland Pascal。Turbo / Borland Pascal 合计销售超过了数百万套。Dr. N. Wirth (Pascal 语言的创始人员) 也应该向 Anders 致敬，表达 Anders 对于 Pascal 语言的贡献。&lt;/li&gt;&lt;li&gt;Anders 使用汇编语言撰写编译器，其功力无人能出其右。创造出了全世界速度最快、品质也是一流的 Pascal 编译器。在 Anders 离开了 Borland 之后，几乎没有人能够修改 Anders 的编译器。&lt;/li&gt;&lt;li&gt;开发出影响深远的 Delphi 这个伟大的 RAD 工具&lt;/li&gt;&lt;li&gt;开发出 Visual J++ 语言&lt;/li&gt;&lt;li&gt;Microsoft .NET 的Architect&lt;/li&gt;&lt;li&gt;Microsoft 颁授 Microsoft Distinguish Engineer 大奖&lt;/li&gt;&lt;li&gt;发明 C# 这个造成重大影响的语言&lt;/li&gt;&lt;li&gt;发明 LINQ 技术，让 .NET&amp;nbsp;上的程序语言成为目前主流平台中，唯一内置查询能力的语言&amp;nbsp;(这一项是楼主我自加的)&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;一个人一生能够做出几件让全世界都津津乐道的事业呢？Anders 却成就了无数 PC 界伟大的功绩，并且在程序语言、编译器、开发工具以及 Framework 方面都有重要的贡献。 &lt;/p&gt;&#xD;
&lt;p&gt;PC 软件界因为有了 Anders 而精彩、丰富了许多，也创造了许多令人惊叹的故事。更棒的是 Anders 现在仍然在继续贡献他驚人的天分，就让我们拭目以待，看看 Anders 还能创造什么功迹吧。不过，不管以后如何，相信 Anders 应该是大部分软件人员希望学习的目标。Anders 的功力也是大部分软件人员一生企望能够达到的境界。 &lt;/p&gt;&#xD;
&lt;p&gt;在 2002 年 Borland Developers' Conference 中，Anders Hejlsberg 是排名第一的 Keynote Speaker，尚在 Java 的创始人 James Gosling 之前。根据现场同时聆听这两场 Keynote Speech 的听众报道，Anders 的 Keynote Speech 是非常精彩的，而 James 的 Keynote Speech 则相对的枯燥，许多人因此而提前离席。而且 Anders 在开始进行 Keynote Speech 之时，便获得了现场所有听众起立鼓掌致敬，看来，在大多数 Borland 开发工具使用者的心中，Anders Hejlsberg 是永远的巨星。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;Microsoft 的重金挖角和 Anders 离开了 Borland&lt;/p&gt;&#xD;
&lt;p&gt;Anders在不介入Delphi的开发、并且无法主导Borland Java开发工具开发的情况下充 &lt;br /&gt;满了挫折感。没有了Philippe Kahn的强力支援，Anders虽然是Borland最顶尖的技术 &lt;br /&gt;人才，却也无法对抗Borland管理阶层的力量。当然这也是从Philippe Kahn离开了 &lt;br /&gt;Borland之后、Bodand开始转型有关，这在稍后Borland的转变一文中，我会作详细的 &lt;br /&gt;说明。 &lt;/p&gt;&#xD;
&lt;p&gt;虽然Anders在Borland遇到了挫折，但是对于Microsoft来说这却是千载难逢的好机会， &lt;br /&gt;在此时Microsoft展开了大规模的挖角行动，而且是明目张胆地进行，正是由于 &lt;br /&gt;Microsoft如此大胆的行动，因此也造成了不久之后Borland对于Microsoft的法律控诉。 &lt;/p&gt;&#xD;
&lt;p&gt;这次的挖角行动中，Microsoft同时锁定了数个Borland最杰出或是重要的人物，当然 &lt;br /&gt;Anders是名列第一的挖角对象。时值1996年，Microsoft终于展开了行动，使用的方 &lt;br /&gt;式是最直接的攻击。Microsoft直接派遣加长型的大轿车到Borland大门口找Anders吃 &lt;br /&gt;饭，第一次Microsoft开出了年薪百万美元以上的条件。不过在Borland知道了这件事 &lt;br /&gt;情之后，也很快进行了加码的动作，因此Anders并没有对Microsoft进行响应。&lt;/p&gt;&#xD;
&lt;p&gt;Microsoft在苦等无应、按捺不住之下，很快就再次用大轿车找Anders。这次Microsoft &lt;br /&gt;提出了两百万美元以上的条件，希望Anders能够首肯。对于这次的喊价，Borland可有 &lt;br /&gt;点为难了，因为两百万美元不是笔小数目，这已经比当时Borland许多副总裁的年薪还 &lt;br /&gt;高。此外，如果Borland答应也加到两百万以上，那么是不是Chuck也要如此加码？其 &lt;br /&gt;他的Delphi R&amp;amp;D小组要如何调整？这些都是非常棘手的问题。 &lt;/p&gt;&#xD;
&lt;p&gt;不过Borland很快找到了解决的方案，那就是允许Anders从每一套卖出的Delphi版本 &lt;br /&gt;中抽取一定数量的版权费。如此一来Delphi卖得愈好，Anders便能取得愈多的回馈。 &lt;br /&gt;不过就我的了解，Anders注重的并不是金钱上的问题，因为在Borland创立的初期， &lt;br /&gt;由于Turbo Pascal的编译器都是Anders撰写的，因此当时Anders也是卖一套Turbo &lt;br /&gt;Pascal就可以抽取版税的。依照Turbo/Borland Pascal全世界销售数百万套来算， &lt;br /&gt;Anders早就是富翁了。&lt;span style="color: red"&gt;薪水多一点，少一点并无所谓，Anders心中想的是自由发展的 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red"&gt;空间&lt;/span&gt;。在Borland提出了Delphi的随版抽税，再加上Microsoft并不知道Anders真正想 &lt;br /&gt;要的东西，因此Anders仍然没有响应Microsoft提出的优厚条件。 &lt;/p&gt;&#xD;
&lt;p&gt;不过，Anders实在是太重要的人物，而且Microsoft在面对Java与日俱增的威胁下， &lt;br /&gt;非常渴望能够有像Anders这样的人才带领Microsoft开发下一代的开发工具，这当然 &lt;br /&gt;也是由于Microsoft以前向Borland挖来的人都做出了不小的贡献所致。Microsoft食 &lt;br /&gt;髓知味，当然希望能够得到Borland的镇山之宝。在Anders两次不为所动之后， &lt;br /&gt;Microsoft决定祭出最后的王牌，由Bill Gates亲自找Anders吃饭，进行最终的挖角 &lt;br /&gt;行动。 &lt;/p&gt;&#xD;
&lt;p&gt;不管读者喜不喜欢Bill Gates，不可否认的是Bill也是一个天才。自古英雄惜英雄， &lt;br /&gt;在Anders和Bill相谈甚欢的情形下，&lt;span style="color: red"&gt;Microsoft开出了年薪三百万美元以上、数万股的 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red"&gt;Microsoft股票这个超高的条件，再以当时Microsoft高贵的股价来计算，真是一笔庞 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red"&gt;大的数字，也许对于搞软件技术的人来说，这已经是不可能的天文数字了&lt;/span&gt;。不过这些 &lt;br /&gt;条件并不是打动Anders的主要原因，Bill最后提出的条件是 "答应给Anders一个小组 &lt;br /&gt;和极多的资源，让Anders尽情地发挥"。这个条件可说是打到了Anders的心底，因为 &lt;br /&gt;Anders正渴望有人能够支持他完成新的计划和想法。我想，在软件产业中大概也只有 &lt;br /&gt;Microsoft能够拥有这种雄厚的资源可以挖角任何人吧。 &lt;/p&gt;&#xD;
&lt;p&gt;在Bill Gates提了这样的条件之后，Borland再也没有本钱能够和Microsoft进行比价 &lt;br /&gt;了，只好眼睁睁地看着Anders离开Borland前往Microsoft再开创下一个人生的高峰。 &lt;br /&gt;在Anders到了Microsoft之后，Bill Gates果然重用Anders，也立刻让Anders负责激 &lt;br /&gt;活Microsoft的下一拨开发工具计划，当然这个计划也是Microsoft对抗SUN/Java的整 &lt;br /&gt;体计划之一。Anders到了Microsoft之后立刻展现了实力，让Microsoft的编译器技术 &lt;br /&gt;又精进不少，最明显的例子就是Microsoft后期的Java Virtual Machine是PC上执行 &lt;br /&gt;效率最好的，而且在2、3年后，VJ++编译出来的虚拟机械码的执行效率不但比任何的 &lt;br /&gt;Java开发工具还快，在某些方面甚至比原生的Windows开发工具，例如Delphi、VB、 &lt;br /&gt;甚至是VC++还有效率。这真是令人震撼，当然Anders为VJ++打下的基础现在也展现在 &lt;br /&gt;NET的C#编译器以及.NET的 JIT (Just In Time) 编译器之上，.NET的JIT在许多程序代 &lt;br /&gt;码最佳化方面比Delphi还先进。因此在2、3年前当VJ++即将推出之际，在Borland内 &lt;br /&gt;部也引起了非常大的骚动，并且严阵以待，当然这又是另外一个故事了。 &lt;/p&gt;&#xD;
&lt;p&gt;对于Anders来说，到了Microsoft之后不久又再次登上了生涯的另一个巅峰。因为当 &lt;br /&gt;初Anders在Borland之时，就有如孙子兵法中叙述的 "藏于九地之下"，虽然是不世出 &lt;br /&gt;的天才，但是仅为少数的人所知，即使是使用Borland产品的人在当时可能也不知道 &lt;br /&gt;Anders这号人物。因为Anders和Borland的作风很像，都是行事低调，不到最后绝不 &lt;br /&gt;随意出手。但是Anders被挖角到Microsoft之后，由于Microsoft的企业文化向来是前 &lt;br /&gt;进、积极的侵略性方式，因此Anders也就转变为"动于九天之上"，负责Microsoft开 &lt;br /&gt;发工具大军的核心大将，不但广为人知，成为许多软件人员效法的对象，而且屡获大 &lt;br /&gt;奖。他不但获得了信息软件业界的推崇，最后也终于获得了信息学术界的认可，可说 &lt;br /&gt;是实至名归。 &lt;/p&gt;&#xD;
&lt;p&gt;Anders的离开对于Borland来说是一个很大的损失，不过对于Delphi R&amp;amp;D小组来说却 &lt;br /&gt;是有好有坏，因为Delphi开发小组虽然失去了最重要的支柱，但是也给Danny Thorpe &lt;br /&gt;一个快速崛起的机会，在1年后，Danny果然立刻成为了Delphi/C++Builder/Kylix中 &lt;br /&gt;最杰出的人物之一(另外一个当然就是Anders的老搭挡Chuck Jazdzewski了)，Danny &lt;br /&gt;也是我认为目前在Borland RAD(注)部门中功力最厉害的人物。在稍后的内文中我会 &lt;br /&gt;对Danny进行比较详细的说明。 &lt;/p&gt;&#xD;
&lt;p&gt;注：Borland RAD部门是指Borland的Rapid Application Development部门，RAD负责 &lt;br /&gt;的产品包含了C++Builder、Delphi、Kylix以及未来的.NET以及Mobile的新产品。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/WizardWu/aggbug/1766097.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/06/27/1766097.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/WizardWu/archive/2010/06/17/1759297.html</id><title type="text">探讨 .NET 4 新增的 SortedSet 类</title><summary type="text">微软在 .NET 3.5 新增了一个 HashSet 类，在 .NET 4 新增了一个 SortedSet 类，本文介绍这两个 Collection 结构的特性与异同。</summary><published>2010-06-16T18:47:00Z</published><updated>2010-06-16T18:47:00Z</updated><author><name>WizardWu</name><uri>http://www.cnblogs.com/WizardWu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/WizardWu/archive/2010/06/17/1759297.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/WizardWu/archive/2010/06/17/1759297.html"/><content type="html">&lt;p&gt;微软在 .NET 3.5 新增了一个 HashSet 类，在 .NET 4 新增了一个 SortedSet 类，本文介绍他们的特性，并比较他们的异同。&lt;/p&gt;&#xD;
&lt;p&gt;.NET Collection 函数库的 HashSet、SortedSet 这两个泛型的类，都实现了 System.Collections.Generic.ISet 接口；但 Java 早在 1.2 (或更早) 之前的版本，即已提供了实现这两种数据结构的同名类 &lt;span style="color: #0000ff"&gt;[10]&lt;/span&gt;，且还有更严谨的 TreeSet (里面存储的项，连类型都必须一致。当年还没有泛型)。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;Set 是「集合」的意思，其在数学上的定义，是里面元素的存放没有特定的顺序，且不允许重复。我们先看以下 HashSet、SortedSet 的示例：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;()&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;7&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;4&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;element&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Write(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.Format(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;{0}&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;element));&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;执行结果：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100617_01.jpg" width="125" height="72" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 1　重复的元素自动被移除&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;同样的代码，把 HashSet 改成 SortedSet，如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;var&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;SortedSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;()&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;7&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;4&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;element&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Write(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.Format(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;{0}&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;element));&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;执行结果：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100617_02.jpg" width="128" height="67" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 2　重复的元素自动被移除，且内部会自动做排序&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;我们看到 HashSet、SortedSet 这两个类，确实都不允许重复，但前者不会自动做排序，后者会将加入的元素做排序，且 SortedSet 能够在插入、删除和搜索元素时，仍维护数据的排列顺序。因此若您有耐心读到这里，就多学了一招：若平常编程时&lt;span style="color: red"&gt;想过滤重复元素，就可以用这两个 Set 类，因为 Set 是不允许重复元素的&lt;/span&gt;。在 SortedSet 还没出现的 .NET 3.5 时代，我们必须用 HashSet 先移除重复的项，然后再排序；而现在的 .NET 4，我们就能改用 SortedSet 一步实现移除重复并排序。&lt;/p&gt;&#xD;
&lt;p&gt;当然，若您的需求不同 (暂不考虑性能问题，下一段会提到)，不希望默认自动排序，或不需要移除重复元素，可改用 List 类的 Sort 方法。另 List 结构在数据的存储是有顺序的，SortedSet 类也是有序的，但 HashTable 结构、HastSet 类的存储是无序的。此外，您也可把 HashSet 当作 key/value 配对的 HastTable 之中，只有 keys 没有 values 的结构，因为 HastSet 类就是实现了只有 key 的 HashTable 数据结构，因此除了有极优的性能外，元素的存储是无序的，且不允许重复 (key 必须为唯一)。&lt;/p&gt;&#xD;
&lt;p&gt;此外，Set 在数学上没有元素的数量上限，但 .NET 中的 Set，则受限于变量可使用的内存上限 &lt;span style="color: #0000ff"&gt;[14]&lt;/span&gt;，虽然 .NET HashSet 对象的容量可随元素的添加而自动增大 &lt;span style="color: #0000ff"&gt;[2]&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;以下分别列出 .NET 平台上，HashSet、SortedSet 这两个类各自的一些特性，以及性能方面的比较：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;HastSet 的特性 &lt;span style="color: #0000ff"&gt;[&lt;/span&gt;&lt;span style="color: #0000ff"&gt;11]&lt;/span&gt;&lt;span&gt; ：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;它实现了数据结构中，只有 keys 但没有 values 的 HashTable &lt;span style="color: #0000ff"&gt;[6], [12], [13]&lt;/span&gt;。&lt;/li&gt;&lt;li&gt;它的 Contains 方法 (确定 HashSet 对象是否包含指定的元素) 执行速度很快，因其为基于「哈希」的查找 (hash-based lookup)。&lt;br /&gt;(另 HashTable 类的检索速度也是非常快的，其「算法」的 Time Complexity 接近于 O(1)，这是因为 HashTable 类是以一个哈希表来实现的)&lt;/li&gt;&lt;li&gt;它的 Add 方法 (将指定的元素添加到 HashSet 对象中)，如果元素数目小于内部数组的容量，则此方法的运算复杂度为 O(1)。如果必须调整 HashSet&amp;lt;T&amp;gt; 对象的大小，则此方法的运算复杂度将为 O(n)。&lt;span style="color: #0000ff"&gt;[4]&lt;/span&gt;&lt;/li&gt;&lt;li&gt;它的 Add 方法，若添加了已存在的项时会被忽略，并且返回 False。&lt;/li&gt;&lt;li&gt;它是无序的容器，亦即元素的存储是没有顺序的 (此为数学上 Set 的特性) &lt;span style="color: #0000ff"&gt;[2], [6], [12], [14]&lt;/span&gt;。 Java 的 HashSet 亦然。&lt;/li&gt;&lt;li&gt;它不能存储重复的元素，而且当插入的元素有重复时，也会自动被忽略。&lt;/li&gt;&lt;li&gt;无法从特定的位置，访问其中某个元素。&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;br /&gt;SortedSet 的特性 &lt;span style="color: #0000ff"&gt;[6]&lt;/span&gt;：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;它实现了数据结构中的「红黑树 (Red-Black tree)」&lt;span style="color: #0000ff"&gt;[6], [8], [13]&lt;/span&gt;。&lt;/li&gt;&lt;li&gt;它的 Contains 方法 (确定 SortedSet 对象是否包含指定的元素) 执行速度很快，因其为基于哈希的查找 (hash-based lookup) &lt;span style="color: #0000ff"&gt;[6]&lt;/span&gt;&amp;nbsp;(这点我不确定，尚待求证)。&lt;/li&gt;&lt;li&gt;它的 Add 方法 (将指定的元素添加到 SortedSet 对象中)，如果元素数目小于内部数组的容量，则此方法的运算复杂度为 O(1)。如果必须调整 SortedSet&amp;lt;T&amp;gt; 对象的大小，则此方法的运算复杂度将为 O(n)。&lt;span style="color: #0000ff"&gt;[3] &lt;/span&gt;&lt;/li&gt;&lt;li&gt;它的 Add 方法，若添加了已存在的项时会被忽略，并且返回 False。&lt;/li&gt;&lt;li&gt;它所存储的元素是有顺序的，虽然它在名称上也叫做 Set&amp;nbsp; &lt;span style="color: #0000ff"&gt;[1], [6]&lt;/span&gt;。 Java 的 SortedSet 亦然。&lt;/li&gt;&lt;li&gt;它不能存储重复的元素，而且当插入的元素有重复时，也会自动被忽略。&lt;/li&gt;&lt;li&gt;无法从特定的位置，访问其中某个元素。&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;以下为我参考坊间数据结构的书籍 &lt;span style="color: #0000ff"&gt;[15]&lt;/span&gt;，所转录的内容：&lt;/p&gt;&#xD;
&lt;p&gt;在数据结构理论中，由 HashSet 类所实现的 HashTable，是一种快速「插入」、「查找」的结构，且无论有多少的项，其「插入、查找」的时间会贴近常量时间，即为 O(1)，因此它很适合用在元素数目相当多的时候。但 HashTable 由于是从「数组 (Array)」演化来的，因此其扩充性很差，且当它的空间已满时，会造成性能低落。因此我们看 msdn 文档中 &lt;span style="color: #0000ff"&gt;[4]&lt;/span&gt;，HastSet 成员的 Add 方法、Contains 方法，微软说他们的运算复杂度为 O(1)；但在 Add 方法中又提到，如果必须调整 HashSet 对象的大小，则此方法的运算复杂度将为一个 O(n)，其中 n 是元素数目。但若我们在编程时，能事先预测项的数目，且不需要有顺序地浏览内容，则 HashTable 结构、HashSet 类会是很适合、高性能的选择。&lt;/p&gt;&#xD;
&lt;p&gt;在数据结构理论中，由 SortedSet 类所实现的「红黑树」，在执行将数据存储在内存方面，是最有效率的二叉树。但其「插入」是较缓慢的，其「删除」的动作也较复杂 (删除节点后，必须重新建立红黑树的正确架构)。不过红黑树在「排序」数据的时间，不会超过 O(n)。但 msdn 文档中 &lt;span style="color: #0000ff"&gt;[3]&lt;/span&gt;，提到 SortedSet 成员的 Add 方法、Contains 方法，微软说他们的运算复杂度为 O(1)，但若 SortedSet 类真的是实现「红黑树」，不禁令人怀疑 msdn 此处的正确性 &lt;span style="color: #0000ff"&gt;[8]&lt;/span&gt;&lt;span style="color: #000000"&gt;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;以下我们来看 .NET 里 HashSet 的一些示例： &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #339966"&gt;示例一 - 测试查找的功能：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;var&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;我爱编程&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;.Contains(&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;我&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;));&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;True&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;.Contains(&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;你&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;));&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;False&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;上述示例中，我们能够将字符串，甚至中文字，传入 HashSet&amp;lt;char&amp;gt; 的构造函数，是因为 string 实现了 IEnumerable&amp;lt;char&amp;gt; 接口，而 HastSet 类也实现了 IEnumerable&amp;lt;T&amp;gt;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #339966"&gt;示例二&lt;/span&gt;&lt;span style="color: #339966"&gt; - 测试 HashSet 内置的一些好用方法：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&lt;li&gt;SymmetricExceptWith: 仅包含该对象或指定集合中存在的元素（但不可同时包含两者中的元素）。&lt;/li&gt;&lt;li&gt;UnionWith: 包含该对象本身和指定集合中存在的所有元素。&lt;/li&gt;&lt;li&gt;ExceptWith: 从当前 HashSet&amp;lt;T&amp;gt; 对象中移除指定集合中的所有元素。&lt;/li&gt;&lt;li&gt;IntersectWith: 仅包含该对象和指定集合中存在的元素。&lt;/li&gt;&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;HashSetDemo&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Main()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;setA&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;setB&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setA.Add(&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;A&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setA.Add(&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;B&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setA.Add(&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;C&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setB.Add(&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;C&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setB.Add(&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;D&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setB.Add(&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;E&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Show(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Initial&amp;nbsp;content&amp;nbsp;of&amp;nbsp;setA:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;setA);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Show(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Initial&amp;nbsp;content&amp;nbsp;of&amp;nbsp;setB:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;setB);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setA.SymmetricExceptWith(setB);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;把&amp;nbsp;setA、setB&amp;nbsp;各自特有、对方没有的元素列出来&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Show(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;setA&amp;nbsp;after&amp;nbsp;Symmetric&amp;nbsp;difference&amp;nbsp;with&amp;nbsp;SetB:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;setA);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setA.UnionWith(setB);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;把&amp;nbsp;setA、setB&amp;nbsp;的全部元素列出来&amp;nbsp;(union&amp;nbsp;并集)&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Show(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;setA&amp;nbsp;after&amp;nbsp;union&amp;nbsp;with&amp;nbsp;setB:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;setA);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setA.ExceptWith(setB);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;把&amp;nbsp;setA&amp;nbsp;中，所拥有的&amp;nbsp;setB&amp;nbsp;元素移除&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Show(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;setA&amp;nbsp;after&amp;nbsp;subtracting&amp;nbsp;setB:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;setA);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.Read();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Show(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;msg,&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.Write(msg);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ch&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&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;Console.Write(ch&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;执行结果：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;&lt;img style="background-color: #ffff99" border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100617_03.jpg" width="436" height="129" /&gt;&lt;br /&gt;&lt;span&gt;图 3　测试 SymmetricExceptWith、UnionWith、ExceptWith 方法&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;setA.IntersectWith(setB);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;把&amp;nbsp;setA&amp;nbsp;中，所拥有的&amp;nbsp;setB&amp;nbsp;元素列出&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Show(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;setA&amp;nbsp;after&amp;nbsp;intersect&amp;nbsp;with&amp;nbsp;setB:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;setA);&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;执行结果：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ffff99"&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100617_05.jpg" width="277" height="26" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 4　测试 IntersectWith 方法&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;由于 HastSet&amp;lt;T&amp;gt; 实现了 IEnumerable&amp;lt;T&amp;gt; 接口，因此我们可把其他任何 set 当作参数，传入其他 set 类的运算方法里。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;此外，LINQ 也有类似上述示例的 Intersect、Except、Union、Distinct 的 set 运算功能，有兴趣比较两者特性的网友，可参考 msdn 或网络上的文章 &lt;span style="color: #0000ff"&gt;[5]&lt;/span&gt;。主要的差别在于，LINQ set 运算始终返回新的 IEnumerable&amp;lt;T&amp;gt; 集合，而 HashSet&amp;lt;T&amp;gt; 是修改当前的集合，且 HashSet 提供了比较多的 set 相关算符。&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------ &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;到了 .NET 4 才新建的 SortedSet 类，除了有前述 HashSet 类所拥有的 SymmetricExceptWith、UnionWith、ExceptWith、IntersectWith 等好用的方法外，还有「GetViewBetween (制定范围)」、「Max (取最大值)」、「Min (取最小值)」等新增的好用方法。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;以下我们来看 SortedSet 这三个方法的示例： &lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #339966"&gt;示&lt;/span&gt;&lt;span style="color: #339966"&gt;例三 - 测试 GetViewBetween、Max、Min 方法：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Linq;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;此为&amp;nbsp;Max()、Min()&amp;nbsp;方法的必要引用&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;var&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;SortedSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;()&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;7&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;4&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;element&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Write(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.Format(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;nbsp;{0}&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;element));&lt;br /&gt;&lt;br /&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Max:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;.Max()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Min:&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;.Min()&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;&amp;lt;br&amp;gt;取&amp;nbsp;2&amp;nbsp;~&amp;nbsp;5&amp;nbsp;之间的值:&amp;nbsp;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;只取值为&amp;nbsp;2&amp;nbsp;~&amp;nbsp;5&amp;nbsp;之间的元素&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;var&amp;nbsp;subSet&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;set&lt;/span&gt;&lt;span style="color: #000000"&gt;.GetViewBetween(&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;subSet)&lt;br /&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;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Response.Write(i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;,&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;执行结果：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/wizardwu/100617_04.jpg" width="168" height="181" /&gt;&lt;br /&gt;&lt;span style="background-color: #ffff99"&gt;图 5　测试 SortedSet 类专属的 GetViewBetween、Max、Min 方法&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;此 GetViewBetween() 方法，也适用于 SortedSort 里元素为字符串、字符的处理 &lt;span style="color: #0000ff"&gt;[&lt;/span&gt;&lt;span style="color: #0000ff"&gt;6&lt;/span&gt;&lt;span style="color: #0000ff"&gt;]&lt;/span&gt;&lt;span style="color: #0000ff"&gt;。&lt;span style="color: #0000ff"&gt;&lt;/span&gt;&lt;/p&gt;&amp;nbsp; &#xD;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/span&gt;------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #339966"&gt;参考资料：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[1] SortedSet&amp;lt;T&amp;gt; 类&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/dd412070.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/dd412070.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[2] HashSet&amp;lt;T&amp;gt; 类&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/bb359438.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/bb359438.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[3] SortedSet&amp;lt;T&amp;gt; 成员 &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/dd382202.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/dd382202.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[4] HashSet&amp;lt;T&amp;gt; 成员 &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/bb341004.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/bb341004.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[5] HashSet 和 LINQ Set 运算&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/bb397728.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/library/bb397728.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.dotblogs.com.tw/kirkchen/archive/2010/06/12/15836.aspx" target="_blank"&gt;http://www.dotblogs.com.tw/kirkchen/archive/2010/06/12/15836.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[6] C# 4.0/BCL 4 Series:SortedSet&amp;lt;T&amp;gt; in Framework 4&lt;br /&gt;&lt;a href="http://samgentile.com/Web/vs2010-and-net-framework-4-0/c-4-0-bcl-4-series-sortedset-lt-t-gt-in-framework-4/" target="_blank"&gt;http://samgentile.com/Web/vs2010-and-net-framework-4-0/c-4-0-bcl-4-series-sortedset-lt-t-gt-in-framework-4/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[7] SortedSet Collection Class in .NET 4.0&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/cs/SortedSet_T__Collection.aspx" target="_blank"&gt;http://www.codeproject.com/KB/cs/SortedSet_T__Collection.aspx&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[8] Add to SortedSet&amp;lt;T&amp;gt; and its complexity&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/2533007/add-to-sortedsett-and-its-complexity" target="_blank"&gt;http://stackoverflow.com/questions/2533007/add-to-sortedsett-and-its-complexity&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[9] Net4.0---Framwork新增特性 &lt;br /&gt;&lt;a href="http://www.cnblogs.com/oec2003/archive/2010/05/26/1744495.html" target="_blank"&gt;http://www.cnblogs.com/oec2003/archive/2010/05/26/1744495.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[10] 用 Java 的 SortedSet 实现过滤重复字符串并排序 &lt;br /&gt;&lt;a href="http://www.cnblogs.com/fzzl/archive/2009/04/01/1427344.html" target="_blank"&gt;http://www.cnblogs.com/fzzl/archive/2009/04/01/1427344.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cnblogs.com/fzzl/archive/2009/04/01/1427336.html" target="_blank"&gt;http://www.cnblogs.com/fzzl/archive/2009/04/01/1427336.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #339966"&gt;参考书籍：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[11]&amp;nbsp;C# 3.0 in a Nutshell, chapter 7&lt;br /&gt;&lt;a href="http://www.amazon.com/3-0-Nutshell-Desktop-Reference-OReilly/dp/0596527578" target="_blank"&gt;http://www.amazon.com/3-0-Nutshell-Desktop-Reference-OReilly/dp/0596527578&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[12] C# 3.0 THE COMPLETE REFERENCE, chapter 24&lt;br /&gt;&lt;a href="http://www.amazon.com/3-0-COMPLETE-REFERENCE-Herbert-Schildt/dp/0071588418/ref=sr_1_11?ie=UTF8&amp;amp;s=books&amp;amp;qid=1276701548&amp;amp;sr=1-11" target="_blank"&gt;http://www.amazon.com/3-0-COMPLETE-REFERENCE-Herbert-Schildt/dp/0071588418/ref=sr_1_11?ie=UTF8&amp;amp;s=books&amp;amp;qid=1276701548&amp;amp;sr=1-11&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[13] C# 4.0 in a Nutshell&lt;br /&gt;&lt;a href="http://www.amazon.com/C-4-0-Nutshell-Definitive-Reference/dp/0596800959/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1276783191&amp;amp;sr=1-1" target="_blank"&gt;http://www.amazon.com/C-4-0-Nutshell-Definitive-Reference/dp/0596800959/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1276783191&amp;amp;sr=1-1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.albahari.com/nutshell/" target="_blank"&gt;http://www.albahari.com/nutshell/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[14] C# 2010 All-in-One For Dummies&lt;br /&gt;&lt;a href="http://www.amazon.com/C-2010-All-One-Dummies/dp/0470563486" target="_blank"&gt;http://www.amazon.com/C-2010-All-One-Dummies/dp/0470563486&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[15] Java 在数据结构及算法的应用&lt;br /&gt;作者：胡铭珍，出版社：全华科技图书，语文：繁体中文，ISBN: 957-21-3923-1&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="color: #339966"&gt;相关资料：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;[16] 程序员真情忏悔录&lt;br /&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2009/01/29/1381275.html" target="_blank"&gt;http://www.cnblogs.com/WizardWu/archive/2009/01/29/1381275.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当你在使用 Java (或 .NET) 提供的 Collection Framework 时，你了解 ArrayList、LinkedList、TreeSet、HashSet 之间的差别吗？&lt;br /&gt;你知道他们的优缺点吗？你知道他的特性吗？不了解 ArrayList 和 LinkedList 的差异，用任一种去写程序，执行结果都一样，可是性能差很多。大多数的人连了解特性都谈不上，更别说很多每天想发展自己的语言、自己的编译器、自己的操作系统的人。没有基础学问的了解，如何去设计一个 Collection Framework 或 STL？你说数据结构和算法没有用，你去做看看现在 IDE 中普遍有的 code insight 功能看看 ？以 C++ Builder 来说，要在短时间内搜寻所有的标头文件，并找出某函数的 prototype，如果没有对数据结构和算法有充分了解，一样做得出来，只是产品会卖不出去罢了。&lt;/p&gt;&#xD;
&lt;p&gt;------------------------------------------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/WizardWu/aggbug/1759297.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/WizardWu/archive/2010/06/17/1759297.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
