<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_善良，踏实，实现，坚持，厚积薄发</title><subtitle type="text">内心要善良，做人要踏实，梦想要实现，目标要坚持。</subtitle><id>http://feed.cnblogs.com/blog/u/20814/rss</id><updated>2012-04-27T03:21:19Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/20814/rss"/><entry><id>http://www.cnblogs.com/EasyLive2006/archive/2012/04/27/2473201.html</id><title type="text">TeamFoundation 团队项目门户网站 无法应用日历写日志的解决办法</title><summary type="text">在使用TeamFoundation进行团队管理开发时，遇到一个问题。问题描述：在团队项目门户网站中，使用日历栏时，可以进入到日期界面，当点进某一天想要填写日志时，报网页错误。当用管理员账户进入门户网中，一切正常，并且管理员填写日志后，其它用户再次访问就没有问题了。解决办法：在TFS服务器端，为网站的bin目录的基本用户添加可读权限，即可。</summary><published>2012-04-27T03:21:00Z</published><updated>2012-04-27T03:21:00Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EasyLive2006/archive/2012/04/27/2473201.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/archive/2012/04/27/2473201.html"/><content type="html">&lt;p&gt;在使用TeamFoundation进行团队管理开发时，遇到一个问题。&lt;/p&gt;&lt;p&gt;问题描述：在团队项目门户网站中，使用日历栏时，可以进入到日期界面，当点进某一天想要填写日志时，报网页错误。当用管理员账户进入门户网中，一切正常，并且管理员填写日志后，其它用户再次访问就没有问题了。&lt;/p&gt;&lt;p&gt;解决办法：在TFS服务器端，为网站的bin目录的基本用户添加可读权限，即可。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/EasyLive2006/aggbug/2473201.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EasyLive2006/archive/2012/04/27/2473201.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EasyLive2006/archive/2012/03/05/2380566.html</id><title type="text">TeamFoundation Server 使用技巧</title><summary type="text">一、如何删除工作项 1、使用Tfs管理员账户登录 2、使用Cmd打开命令行窗口 如果是32位系统，cd "C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE" 64位系统则 cd "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE" 3、使用 witadmin.exe destroywi命令，按下面的方式 witadmin.exe destroywi /Collection:http:\\[ServerName]:</summary><published>2012-03-05T08:02:00Z</published><updated>2012-03-05T08:02:00Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EasyLive2006/archive/2012/03/05/2380566.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/archive/2012/03/05/2380566.html"/><content type="html">&lt;p&gt;一、如何删除工作项&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1、使用Tfs管理员账户登录&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2、使用Cmd打开命令行窗口&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果是32位系统，cd "C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 64位系统则&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cd "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE"&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3、使用 witadmin.exe destroywi命令，按下面的方式&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; witadmin.exe destroywi /Collection:http:\\[ServerName]:8080\tfs\[CollectionName] /id:[WI ID]&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可以一次删除多个工作项，使用逗号分隔工作项Id，比如10,22,30。可以使用 /noprompt屏蔽提示消息&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4、假设服务器名称为ServerDemo，团队项目集合名称为TeamDemo，要删除Id为17、18的工作项，则使用如下命令：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; witadmin.exe destroywi /Collection:http:\\ServerDemo:8080\tfs\TeamDemo /id:17,18&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5、上述方法为微软工作人员答疑，经测试，在Tfs2010 简体中文正式版，能够正常的删除工作项。请注意，在做这个操作之前，先关闭Vs2010。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;二、使用Ghost或者Windows 镜像备份的情形下，如何备份项目集？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当我们安装了操作系统、开发环境之后，我们常常为此时干净的系统，做一个镜像备份，有时候是使用Ghost，有时候是使用Windows 7或者Sql Server 2008 R2的Server Backup功能做镜像备份。当然，因为安装了Sql server 2008 R2和Tfs2010、Vs2010之后，C:盘往往有17G左右，因为速度的关系我们推荐使用Ghost，能在20分钟之内恢复C:\盘，使用Windows Server Backup功能，常常需要数个小时。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们一般做两个Ghost镜像，第一个是操作系统安装好、驱动安装好、操作系统各项更新完成、常用软件如Live Writer、QQ、网银、迅雷、Winrar之类安装好、操作系统配置好(比如关机不要输入关机原因、登录不需要按Ctrl+Alt+Del、或者自动使用某个账户登录而无需输入密码等等)，这些完成之后做一个镜像，叫做工作镜像。在这个镜像做好之后，安装开发环境，然后做第二个镜像：开发环境镜像。请注意做镜像前关闭休眠功能并删除休眠文件、禁用虚拟内存或将虚拟内存文件放在D:盘，这样会大大的减少镜像文件的大小。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 那么，每次恢复镜像，会造成Tfs的项目管理信息丢失。所以，这之前需要备份Tfs的数据库，这是件很麻烦的事情，下面列出我目前采用的一个取巧的方法，请注意我在自己个人的开发机器上安装的是Tfs的Basic版本：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1、安装Sql 2008 R2和Tfs 2010之后，默认的项目集保存在C:盘，此时我们在C盘将三个Tfs数据库，备份在C:盘默认的Sql Server备份位置。这是为了防止Tfs系统完全不匹配，造成不能正常工作的最后挽救方法。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2、在Sql server中设置默认的数据库位置在D:\Database或D:盘的其他目录&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3、重新启动系统，注意，不要忽略这一步，我们在上一步的设置或许仅仅是修改了一个配置项，目前Sql的默认数据库文件存放路径，还是在C:盘，没有改变。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4、使用Tfs 2010的管理控制台，创建新的团队项目集合，假设我们为其命名为TeamWork。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5、此时，你会发现在D:\Database下，有了一个新的数据库Tfs_TeamWork&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6、将Sql server的三个Tfs_开头的数据库，同样备份到C:盘，这个时候再开始为系统做Ghost镜像，今后每次使用Ghost恢复干净的开发环境，就不用考虑Tfs数据库的问题，直接用Ghost恢复就行了。当然，前提是你不要删除掉D:\Database目录下的相关数据库。以后，只需要随时备份Tfs_TeamWork以策万全。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7、如果D:\盘的数据库出现意外，最坏的情况，我们使用C:盘的初始备份能让系统正常运行起来，然后再用平常做的Tfs_TeamWork的备份，按照标准的恢复模式进行。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;注意，如果我们仅备份某个团队项目集合的数据库，而没有备份Tfs_Configuration数据库，则在上次创建镜像到此次恢复镜像期间创建的团队项目会丢失。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;三、安装好Scrum模版后，创建新的团队项目集合时，如何使用？&lt;/p&gt;&lt;p&gt;选择该团队项目集合，右键，运行过程模版管理器。选上载，找到安装目录：默认是C:\Program Files (x86)\Microsoft\Microsoft Visual Studio Scrum 1.0\Process Template&lt;/p&gt;&lt;p&gt;此后创建团队项目时，就多了Scrum项目这一项。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;四、如何清除Vs2010的工作区影射关系的缓存信息？&lt;/p&gt;&lt;p&gt;在原有的团队项目集合移除，或者更换Tfs服务器后，一些工作区的影射关系仍然存在，这会导致&amp;ldquo;将解决方案添加到源代码管理&amp;rdquo;之类的功能不可使用。&lt;/p&gt;&lt;p&gt;这些信息缓存于文件C:\Users\Administrator\AppData\Local\Microsoft\TeamFoundation\3.0\Cache\VersionControl.config中，只要把跟旧服务器相关的 ServerInfo 节点删掉，问题即可解决。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;五、如何还原已经备份的团队项目集合数据库？&lt;/p&gt;&lt;p&gt;1、关闭Tfs服务：&lt;/p&gt;&lt;p&gt;运行：&lt;/p&gt;&lt;p&gt;"C:\Program Files\Microsoft Team Foundation Server 2010"\Tools\TFSServiceControl quiesce&lt;/p&gt;&lt;p&gt;2、还原数据库，请注意两个选项：选择从设备恢复、选择覆盖原数据库&lt;/p&gt;&lt;p&gt;3、启动Tfs服务：&lt;/p&gt;&lt;p&gt;运行：&lt;/p&gt;&lt;p&gt;"C:\Program Files\Microsoft Team Foundation Server 2010"\Tools\TFSServiceControl unquiesce&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;六、删除团队项目&lt;/p&gt;&lt;p&gt;"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\TFSDeleteProject"&amp;nbsp; /force /collection:&lt;a href="http://x200:8080/Tfs/Scrum"&gt;http://x200:8080/Tfs/Scrum&lt;/a&gt;&amp;nbsp; WebLite&lt;/p&gt;&lt;p&gt;其中&lt;a href="http://x200:8080"&gt;http://x200:8080&lt;/a&gt;是服务器名称和端口，Scrum是团队项目集合的名称，WebLite是Stock团队项目集合中要删除的项目&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;转自：&lt;a href="http://www.cnblogs.com/by1990/archive/2010/06/08/1753644.html"&gt;http://www.cnblogs.com/by1990/archive/2010/06/08/1753644.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/EasyLive2006/aggbug/2380566.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EasyLive2006/archive/2012/03/05/2380566.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EasyLive2006/archive/2012/03/02/2376642.html</id><title type="text">windows 8 server beta &amp;amp; visual studio 11 beta 下载地址</title><summary type="text">windows 8 server beta : http://technet.microsoft.com/zh-cn/evalcenter/hh670538.aspxvisual studio 11 beta : http://www.microsoft.com/visualstudio/11/zh-cn/downloads#ultimate</summary><published>2012-03-02T01:52:00Z</published><updated>2012-03-02T01:52:00Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EasyLive2006/archive/2012/03/02/2376642.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/archive/2012/03/02/2376642.html"/><content type="html">&lt;p&gt;windows 8 server beta : &lt;a href="http://technet.microsoft.com/zh-cn/evalcenter/hh670538.aspx"&gt;http://technet.microsoft.com/zh-cn/evalcenter/hh670538.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;visual studio 11 beta : &lt;a href="http://www.microsoft.com/visualstudio/11/zh-cn/downloads#ultimate"&gt;http://www.microsoft.com/visualstudio/11/zh-cn/downloads#ultimate&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/EasyLive2006/aggbug/2376642.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EasyLive2006/archive/2012/03/02/2376642.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EasyLive2006/archive/2011/12/24/2300751.html</id><title type="text">创业了，发一则招聘信息</title><summary type="text">黑龙江省智途科技开发有限公司 招聘(面向哈尔滨)智途科技由几位怀揣梦想的80后伙伴于2012年1月创建，主要致力于saas类产品研发，力图通过智途团队的不断进取和努力，为人们日常生活增添更多实用的科技化产品，增强人们科技生活的新体验。我们将为你提供：绝佳的共同创业的机会，具备竞争力的薪酬，以及一个“非臃肿复杂的”的团结温馨的工作团队！如果你和我们一样——怀揣创业的激情与梦想， 享受公司从小到大的成长过程迷恋并且笃信科技改变未来信任团队的力量，深深厌恶职场人事斗争，崇尚个性更懂得通力合作并以创造力为骄傲关注用户，以提供最棒的产品和服务为己任那么你可能就是我们一直要找的人我们看重的是:1) 是否品</summary><published>2011-12-24T15:30:00Z</published><updated>2011-12-24T15:30:00Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EasyLive2006/archive/2011/12/24/2300751.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/archive/2011/12/24/2300751.html"/><content type="html">&lt;p&gt;黑龙江省智途科技开发有限公司 招聘(面向哈尔滨)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;智途科技由几位怀揣梦想的80后伙伴于2012年1月创建，主要致力于saas类产品研发，力图通过智途团队的不断进取和努力，为人们日常生活增添更多实用的科技化产品，增强人们科技生活的新体验。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我们将为你提供：&lt;/p&gt;&lt;p&gt;绝佳的共同创业的机会，具备竞争力的薪酬，以及一个&amp;ldquo;非臃肿复杂的&amp;rdquo;的团结温馨的工作团队！&lt;/p&gt;&lt;p&gt;如果你和我们一样&amp;mdash;&amp;mdash;&lt;/p&gt;&lt;p&gt;怀揣创业的激情与梦想， 享受公司从小到大的成长过程&lt;/p&gt;&lt;p&gt;迷恋并且笃信科技改变未来&lt;/p&gt;&lt;p&gt;信任团队的力量，深深厌恶职场人事斗争，崇尚个性更懂得通力合作&lt;/p&gt;&lt;p&gt;并以创造力为骄傲&lt;/p&gt;&lt;p&gt;关注用户，以提供最棒的产品和服务为己任&lt;/p&gt;&lt;p&gt;那么你可能就是我们一直要找的人&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我们看重的是:&lt;/p&gt;&lt;p align="left"&gt;1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 是否&lt;span style="background-color: #ffffff;"&gt;品德端正&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;2)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 是否有共同的理念&lt;/p&gt;&lt;p align="left"&gt;3)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 是否能融入我们的团队&lt;/p&gt;&lt;p align="left"&gt;4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 是否有潜力&lt;/p&gt;&lt;p align="left"&gt;5)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 接下来才是你现在的能力&lt;/p&gt;&lt;p&gt;最后，我们最不看重的是：学历&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;界面视觉设计 (1人)&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;职责：&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;l&amp;nbsp; 参与产品前期界面视觉用户研究、设计流行趋势分析&lt;/p&gt;&lt;p&gt;l&amp;nbsp; 设定软件产品的整体视觉风格和VI设计&lt;/p&gt;&lt;p&gt;l&amp;nbsp; 参与设计体验、流程的制定和规范&lt;/p&gt;&lt;p&gt;l&amp;nbsp; 分享设计经验、推动提高团队的设计能力 &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;职位要求：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1) 具备敏锐的观察力，独特的视觉感受能力，扎实的美术功底及艺术修养，对GUI设计趋势有灵敏触觉和领悟能力，推动团队的设计能力&lt;/p&gt;&lt;p&gt;2) 从事设计行业工作3年以上，具有大型软件产品界面风格设定以及VI设定（包括界面、图标风格与统一规范等）经验&lt;/p&gt;&lt;p&gt;3) 对视觉用户研究有一定经验和见解，对软件可用性有一定的认识&lt;/p&gt;&lt;p&gt;4) 精通Photoshop、Illustartor、Flash等设计工具，了解flash（Actionscript）动画设计的优先&lt;/p&gt;&lt;p&gt;5) 掌握Microsoft Expression Web，Dreamweaver等制作工具&lt;/p&gt;&lt;p&gt;6) 美术、设计或相关专业优先&lt;/p&gt;&lt;p&gt;7) div + css布局，能够使用javascript/jQuery&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;待遇：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1) 我们为您提供4--6K &amp;amp; 五险的薪资待遇。&lt;/p&gt;&lt;p&gt;2) 除法定假日，地方节日外，如果您是少数民族，将会享有民族节日休假的待遇。如果您是已婚人士，那么您可以享受一个温馨的结婚纪念日，如果您是一位父亲或母亲，那么六月一号您可以和您的孩子一起享受美好的家庭时光。如果很不幸，您还未婚，那么每年的2月14号以及七夕情人节，我们鼓励您，和喜欢的人约会吧。&lt;/p&gt;&lt;p&gt;3) 您在智途的每365天里，将享有7天的带薪年假。&lt;/p&gt;&lt;p&gt;4) 免费的早餐饼干及饮料、水果。 免费的专业书籍。&lt;/p&gt;&lt;p&gt;5) 每月60元为您免费充值的公交卡。&lt;/p&gt;&lt;p&gt;6) 每月至少一张华辰影院的电影票。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果您有意加盟智途科技，请将&lt;strong&gt;应聘职位、想加入的理由&lt;/strong&gt;、&lt;strong&gt;博客地址&lt;/strong&gt;、MSN/QQ、&lt;strong&gt;简历、待遇要求&lt;/strong&gt;发至 53967699@qq.com (界面视觉设计职位请发作品url或附件，收到后我们会回复确认，如果您一天内没收到我们的回复，麻烦您再发一次)。&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/EasyLive2006/aggbug/2300751.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EasyLive2006/archive/2011/12/24/2300751.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EasyLive2006/archive/2011/12/13/2285943.html</id><title type="text">使用sql server management studio 2008 连接数据库,无法查看数据库,提示 无法为该请求检索数据 错误916 - z</title><summary type="text">今日使用时代互联的海外空间,sql 2008 无限空间大小,开通账户后,使用sql server management studio 2008 连接数据库,可以链接上,但是无法查看自己的数据库,点击数据库后,提示 无法为该请求检索数据 错误916解决方法如下1：点击左侧的数据库,然后到右侧的 “名称” 上面点击右键 出来如图所示的菜单,取消掉策略运行状态和排序规则,再次点击数据库的时候,就能显示所有的数据库以及你自己的数据库了。</summary><published>2011-12-13T05:13:00Z</published><updated>2011-12-13T05:13:00Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EasyLive2006/archive/2011/12/13/2285943.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/archive/2011/12/13/2285943.html"/><content type="html">&lt;p&gt;今日使用时代互联的海外空间,sql 2008 无限空间大小,开通账户后,使用sql server management studio 2008 连接数据库,可以链接上,但是无法查看自己的数据库,点击数据库后,提示 无法为该请求检索数据 错误916&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/1727050508/201103/201103241438118226.png"&gt;&lt;img style="border: 0px currentColor; margin-right: 0px; margin-left: 0px; display: inline;" title="image" src="http://images.cnblogs.com/cnblogs_com/1727050508/201103/201103241438261102.png" alt="image" width="674" height="357" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;解决方法如下&lt;/p&gt;&lt;p&gt;1：点击左侧的数据库,然后到右侧的 &amp;ldquo;名称&amp;rdquo;&amp;nbsp; 上面点击右键&amp;nbsp;&amp;nbsp; 出来如图所示的菜单,取消掉策略运行状态和排序规则,再次点击数据库的时候,就能显示所有的数据库以及你自己的数据库了。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/1727050508/201103/201103241438351780.jpg"&gt;&lt;img style="border: 0px currentColor; display: inline;" title="0WE{Q~T3N[G80GS3{GR~MVX" src="http://images.cnblogs.com/cnblogs_com/1727050508/201103/201103241438406485.jpg" alt="0WE{Q~T3N[G80GS3{GR~MVX" width="585" height="593" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/EasyLive2006/aggbug/2285943.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EasyLive2006/archive/2011/12/13/2285943.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EasyLive2006/archive/2011/11/13/2247247.html</id><title type="text">微软SCRUM 1.0流程模板在中文版TFS2010上无法创建项目的彻底解决办法 - 转</title><summary type="text">由于 微软 SCRUM V1.0 为英文版，在国内一般的 SharePoint 为中文版，因此创建团队项目门户时由于找不到 1033 的 区域设置标识符(LCID)而创建失败。如下图：查看项目创建日志，其中有如下错误:模块: WSS异常消息: TF249033: 该站点模板不可用于区域设置标识符(LCID)。站点模板名称为: TFS2010 Agile Dashboard。LCID 为: 1033。 (类型 TeamFoundationServerException)原“http://www.almnetworks.net/zh-CN/post/2010/08/04/Microsoft-Vis</summary><published>2011-11-13T06:28:00Z</published><updated>2011-11-13T06:28:00Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EasyLive2006/archive/2011/11/13/2247247.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/archive/2011/11/13/2247247.html"/><content type="html">&lt;p&gt;由于 微软 SCRUM V1.0 为英文版，在国内一般的 SharePoint 为中文版，因此创建团队项目门户时由于找不到 1033 的 区域设置标识符(LCID)而创建失败。如下图：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/17255/2011111411082740.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;查看项目创建日志，其中有如下错误:&lt;/p&gt;&lt;p&gt;模块: WSS&lt;/p&gt;&lt;p&gt;异常消息: TF249033: 该站点模板不可用于区域设置标识符(LCID)。站点模板名称为: TFS2010 Agile Dashboard。LCID 为: 1033。 (类型 TeamFoundationServerException)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;原&amp;ldquo;http://www.almnetworks.net/zh-CN/post/2010/08/04/Microsoft-Visual-Studio-Scrum-10-Template-on-Chinese-Version-of-TFS.aspx&amp;rdquo; 解决办法过于麻烦。经过分析，仅需手动修改过程模板文件即可让&amp;ldquo;scrum V1.0&amp;rdquo;支持中文版的 sharepoint。过程如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、打开&amp;ldquo;scrum V1.0&amp;rdquo;的安装目录：%ProgramFiles%/Microsoft/Microsoft Visual Studio Scrum 1.0&lt;/p&gt;&lt;p&gt;2、使用记事本打开&amp;ldquo;Process Template/Windows SharePoint Services/WssTasks.XML&lt;/p&gt;&lt;p&gt;3、修改 &lt;span style="color: #990000;"&gt;language&lt;/span&gt;&lt;span class="m"&gt;&lt;span style="color: #0000ff;"&gt;="&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;1033&lt;/strong&gt;&lt;span style="color: #0000ff;"&gt;&lt;span class="m"&gt;"&lt;/span&gt;&lt;span class="m"&gt; 为 &lt;span style="color: #990000;"&gt;language&lt;/span&gt;&lt;span class="m"&gt;="&lt;/span&gt;&lt;strong&gt;&lt;span style="color: #000000;"&gt;2052&lt;/span&gt;&lt;/strong&gt;&lt;span class="m"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/17255/2011111411085736.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;保存文件并关闭记事本。&lt;/p&gt;&lt;p&gt;4、重新上传 过程模板 到 TFS 上。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/EasyLive2006/aggbug/2247247.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EasyLive2006/archive/2011/11/13/2247247.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EasyLive2006/archive/2011/11/05/2237320.html</id><title type="text">LINQ to Entities 不识别方法&amp;quot;System.String ToString()&amp;quot;，因此该方法无法转换为存储表达式 的解决方法</title><summary type="text">一、案例1，及解决方案：“LINQ to Entities 不识别方法"System.String ToString()"，因此该方法无法转换为存储表达式。”原因是LINQ to Entities 不支持ToString()函数。可用下述方法进行转换解决：DIRequest reqeust = new DIRequest(); reqeust.FilterMode = "1,2,3,4,5,6,7,8,9,0";List&lt;int&gt; result = new List&lt;string&gt;(reqeust.FilterMode.Split</summary><published>2011-11-05T14:08:00Z</published><updated>2011-11-05T14:08:00Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EasyLive2006/archive/2011/11/05/2237320.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/archive/2011/11/05/2237320.html"/><content type="html">&lt;p&gt;&lt;strong&gt;一、案例1，及解决方案：&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;ldquo;&lt;em&gt;LINQ to Entities 不识别方法"System.String ToString()"，因此该方法无法转换为存储表达式。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;原因是&lt;em&gt;LINQ to Entities &lt;/em&gt;不支持ToString()函数。&lt;/p&gt;&lt;p&gt;可用下述方法进行转换解决：&lt;/p&gt;&lt;p&gt;DIRequest reqeust = new DIRequest(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;reqeust.FilterMode = "1,2,3,4,5,6,7,8,9,0";&lt;/p&gt;&lt;p&gt;List&amp;lt;int&amp;gt; result = new List&amp;lt;string&amp;gt;(reqeust.FilterMode.Split(',')).ConvertAll(i =&amp;gt; int.Parse(i));&lt;/p&gt;&lt;p&gt;return dal.T_Common_Dy.Where(m =&amp;gt; result.Any(a =&amp;gt; a == m.ParentItemID.Value)).ToList();&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、案例2，及解决方案：&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取市级地区&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; JsonResult GetCity(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; id) { &amp;nbsp;&amp;nbsp;&amp;nbsp; var city &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; from c &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; db.AreaDivide &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt;c.ParentID &lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt;==&lt;/span&gt;&lt;span style="color: #0000ff; background-color: yellow;"&gt;int&lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt;.Parse(id)&lt;/span&gt;&lt;span style="color: #000000;"&gt; select &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; { text &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; c.AreaName, value &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; c.ID }; &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; Json(city.ToList(), JsonRequestBehavior.AllowGet); }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;以上代码也会出现如下错误：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;ldquo;&lt;em&gt;LINQ to Entities 不识别方法"System.String ToString()"，因此该方法无法转换为存储表达式。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;解决方案一：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取市级地区&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; JsonResult GetCity(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; id) { &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff; background-color: yellow;"&gt;int&lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt; a; &lt;/span&gt;&lt;span style="color: #0000ff; background-color: yellow;"&gt;int&lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt;.TryParse(id, &lt;/span&gt;&lt;span style="color: #0000ff; background-color: yellow;"&gt;out&lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt; a);&lt;/span&gt;&lt;span style="color: #000000;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; var city &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; from c &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; db.AreaDivide &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt;c.ParentID &lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt;==&lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt; a&lt;/span&gt;&lt;span style="color: #000000;"&gt; select &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; { text &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; c.AreaName, value &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; c.ID }; &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; Json(city.ToList(), JsonRequestBehavior.AllowGet); }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;解决方案二：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data.Objects.SqlClient;&amp;nbsp; &lt;span style="color: #008000;"&gt;//在 System.Data.Entity.dll 中&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取市级地区&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; JsonResult GetCity(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; id) { &amp;nbsp;&amp;nbsp;&amp;nbsp; var city &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; from c &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; db.AreaDivide &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt;SqlFunctions.StringConvert((&lt;/span&gt;&lt;span style="color: #0000ff; background-color: yellow;"&gt;double&lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt;)c.ParentID) &lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt;==&lt;/span&gt;&lt;span style="color: #000000; background-color: yellow;"&gt; id&lt;/span&gt;&lt;span style="color: #000000;"&gt; select &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; { text &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; c.AreaName, value &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; c.ID }; &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; Json(city.ToList(), JsonRequestBehavior.AllowGet); }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/EasyLive2006/aggbug/2237320.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EasyLive2006/archive/2011/11/05/2237320.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EasyLive2006/archive/2011/10/05/2199270.html</id><title type="text">使用消息约定-MessageContract -z</title><summary type="text">使用消息约定.NET Framework 4在生成 Windows Communication Foundation (WCF) 应用程序时，开发人员通常会密切关注数据结构和序列化问题，而不必关心携带数据的消息。对于这些应用程序，为参数或返回值创建数据协定的过程很简单。(有关更多信息，请参见 在服务协定中指定数据传输.)但是，有时完全控制 SOAP 消息的结构与控制其内容一样重要。当必须提供互操作性或需要在消息或消息部分级别特别控制安全问题时，更是如此。在这些情况下，可以创建一个消息协定，以便对参数或返回值使用一种可直接序列化为所需精确 SOAP 消息的类型。本主题讨论如何使用各种消息协定属性</summary><published>2011-10-05T02:29:00Z</published><updated>2011-10-05T02:29:00Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EasyLive2006/archive/2011/10/05/2199270.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/archive/2011/10/05/2199270.html"/><content type="html">&lt;h1 class="title"&gt;使用消息约定&lt;/strong&gt;&lt;/p&gt;&lt;div class="lw_vs"&gt;&lt;div id="curversion"&gt;&lt;strong&gt;.NET Framework 4&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&lt;/div&gt;&lt;div id="mainSection"&gt;&lt;div id="mainBody"&gt;&lt;p&gt;在生成 Windows Communication Foundation (WCF) 应用程序时，开发人员通常会密切关注数据结构和序列化问题，而不必关心携带数据的消息。对于这些应用程序，为参数或返回值创建数据协定的过程很简单。(有关更多信息，请参见 &lt;a href="http://msdn.microsoft.com/zh-cn/library/ms732038.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;在服务协定中指定数据传输&lt;/span&gt;&lt;/a&gt;.)&lt;/p&gt;&lt;p&gt;但是，有时完全控制 SOAP 消息的结构与控制其内容一样重要。当必须提供互操作性或需要在消息或消息部分级别特别控制安全问题时，更是如此。在这些情况下，可以创建一个消息协定&lt;em&gt;&lt;/em&gt;，以便对参数或返回值使用一种可直接序列化为所需精确 SOAP 消息的类型。&lt;/p&gt;&lt;p&gt;本主题讨论如何使用各种消息协定属性为操作创建特定消息协定。&lt;/p&gt;&lt;h2 class="heading"&gt;在操作中使用消息协定&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection0" class="section"&gt;&lt;p&gt;WCF 支持在远程过程调用 (RPC) 样式&lt;em&gt;&lt;/em&gt;或消息样式&lt;em&gt;&lt;/em&gt;上建模的操作。在 RPC 样式的操作中，可以使用任何可序列化的类型并可以使用本地调用可用的功能，如多个参数以及 &lt;em&gt;ref&lt;/em&gt; 和 &lt;em&gt;out&lt;/em&gt; 参数。在此样式中，所选的序列化形式控制基础消息中数据的结构，但 WCF 运行时本身会创建这些消息以支持操作。这使对 SOAP 和 SOAP 消息不熟悉的开发人员能够快速容易地创建和使用服务应用程序。&lt;/p&gt;&lt;p&gt;下面的代码示例演示在 RPC 样式上建模的服务操作。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_532a3a31-30b8-4e19-96a8-3f7c55baaf60');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_532a3a31-30b8-4e19-96a8-3f7c55baaf60" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[OperationContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; BankingTransactionResponse PostBankingTransaction(BankingTransaction bt);&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;通常，定义消息的架构时使用数据协定就足够了。例如在前面的示例中，如果 &lt;code&gt;BankingTransaction&lt;/code&gt; 和 &lt;code&gt;BankingTransactionResponse&lt;/code&gt; 具有定义基础 SOAP 消息内容的数据协定，则对于大多数应用程序就足够了。有关数据协定的更多信息，请参见&lt;a href="http://msdn.microsoft.com/zh-cn/library/ms733127.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;使用数据协定&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;但是，有时必须精确控制如何将类型映射到通过网络传输的 SOAP 消息。对于这种情况，最常见的方案是插入自定义 SOAP 标头。另一种常见方案是定义消息头和正文的安全属性，也就是说，确定是否对这些元素进行数字签名和加密。消息样式的操作可提供这种控制。&lt;/p&gt;&lt;p&gt;消息样式的操作最多具有一个参数和一个返回值，其中参数和返回值的类型都是消息类型；也就是说，这两种类型可直接序列化为指定的 SOAP 消息结构。这可以是用 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagecontractattribute.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;MessageContractAttribute&lt;/span&gt;&lt;/a&gt; 标记的任何类型或 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.channels.message.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;Message&lt;/span&gt;&lt;/a&gt; 类型。下面的代码示例演示类似于前面 RPC 样式的操作，但此操作使用消息样式。&lt;/p&gt;&lt;p&gt;例如，如果 &lt;code&gt;BankingTransaction&lt;/code&gt; 和 &lt;code&gt;BankingTransactionResponse&lt;/code&gt; 都是具有消息协定的类型，则以下操作中的代码有效。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_b9f70c90-e613-466d-ad75-533c2ae466e0');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_b9f70c90-e613-466d-ad75-533c2ae466e0" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[OperationContract]&lt;br/&gt;BankingTransactionResponse Process(BankingTransaction bt);&lt;br/&gt;[OperationContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt; Store(BankingTransaction bt);&lt;br/&gt;[OperationContract]&lt;br/&gt;BankingTransactionResponse GetResponse();&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;但下面的代码无效。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_4e1f2fe1-8738-4b86-a91f-3b0bfd93c172');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_4e1f2fe1-8738-4b86-a91f-3b0bfd93c172" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[OperationContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt; Validate(BankingTransaction bt);&lt;br/&gt;&lt;span style="color: green;"&gt;// Invalid, the return type is not a message contract.&lt;/span&gt;&lt;br/&gt;[OperationContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt; Reconcile(BankingTransaction bt1, BankingTransaction bt2);&lt;br/&gt;&lt;span style="color: green;"&gt;// Invalid, there is more than one parameter.&lt;/span&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;对于涉及消息协定类型且不符合有效模式之一的任何操作会引发异常。当然，不涉及消息协定类型的操作不受这些限制的约束。&lt;/p&gt;&lt;p&gt;如果一个类型既有消息协定又有数据协定，则在操作中使用此类型时只考虑其消息协定。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;定义消息协定&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection1" class="section"&gt;&lt;p&gt;若要为某一类型定义消息协定（即定义该类型和 SOAP 信封之间的映射），请对该类型应用 &lt;strong&gt;MessageContractAttribute&lt;/strong&gt;。然后对该类型中要成为 SOAP 标头的成员应用 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messageheaderattribute.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;MessageHeaderAttribute&lt;/span&gt;&lt;/a&gt;，并对要成为消息的 SOAP 正文部分的成员应用 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagebodymemberattribute.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;MessageBodyMemberAttribute&lt;/span&gt;&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;下面的代码提供了一个使用消息协定的示例。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_9dde895f-9c0f-4b81-8e14-c34facfa17b6');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_9dde895f-9c0f-4b81-8e14-c34facfa17b6" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; BankingTransaction&lt;br/&gt;{&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Operation operation;&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; DateTime transactionDate;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;private&lt;/span&gt; Account sourceAccount;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;private&lt;/span&gt; Account targetAccount;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; amount;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;当使用此类型作为操作参数时，会生成一个具有额外标头（名为 &lt;code&gt;operation&lt;/code&gt; 和 &lt;code&gt;transactionDate&lt;/code&gt;）的 SOAP 信封，这些标头中包含 &lt;code&gt;operation&lt;/code&gt; 和 &lt;code&gt;transactionDate&lt;/code&gt; 字段的内容。SOAP 正文由一个包装元素构成，该包装元素包含类型为 &lt;code&gt;Account&lt;/code&gt; 数据协定类型的 &lt;code&gt;sourceAccount and targetAccount&lt;/code&gt; 元素和类型为整数类型的 &lt;code&gt;amount&lt;/code&gt; 元素。&lt;/p&gt;&lt;p&gt;可以对所有字段、属性和事件应用 &lt;strong&gt;MessageHeaderAttribute&lt;/strong&gt; 和 &lt;strong&gt;MessageBodyMemberAttribute&lt;/strong&gt;，而不管这些字段、属性和事件是公用的、私有的、受保护的还是内部的。&lt;/p&gt;&lt;div class="alert"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;img id="note" class="cl_IC101471" title="ms730255.note(zh-cn,VS.100).gif" alt="ms730255.note(zh-cn,VS.100).gif" src="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" xmlns="" /&gt;注意：&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;消息协定中会忽略 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.knowntypeattribute.aspx"&gt;KnownTypeAttribute&lt;/a&gt; 属性。如果需要 &lt;strong&gt;KnownTypeAttribute&lt;/strong&gt;，可以将其放在使用所述消息协定的操作上。&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;在消息协定内部使用自定义类型&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection2" class="section"&gt;&lt;p&gt;每个单独的消息头和消息正文部分均使用为消息所使用的服务协定选择的序列化引擎进行序列化（转换为 XML）。默认序列化引擎 &lt;strong&gt;XmlFormatter&lt;/strong&gt; 可以显式处理（通过具有 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datacontractattribute.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.Runtime.Serialization.DataContractAttribute&lt;/span&gt;&lt;/a&gt;）或隐式处理（通过作为基元类型而具有 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.serializableattribute.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.SerializableAttribute&lt;/span&gt;&lt;/a&gt; 等）具有数据协定的任何类型。有关更多信息，请参见 &lt;a href="http://msdn.microsoft.com/zh-cn/library/ms733127.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;使用数据协定&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;在前面的示例中，&lt;code&gt;Operation&lt;/code&gt; 和 &lt;code&gt;BankingTransactionData&lt;/code&gt; 类型必须具有数据约，定且 &lt;code&gt;transactionDate&lt;/code&gt; 可序列化，因为 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.datetime.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;DateTime&lt;/span&gt;&lt;/a&gt; 是基元类型（因此具有隐式数据协定）。&lt;/p&gt;&lt;p&gt;不过，也可以切换到另一个序列化引擎 &lt;strong&gt;XmlSerializer&lt;/strong&gt;。如果进行切换，应确保用于消息头和正文部分的所有类型都可以使用 &lt;strong&gt;XmlSerializer&lt;/strong&gt; 进行序列化。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;在消息协定内部使用数组&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection3" class="section"&gt;&lt;p&gt;可以采用两种方式在消息协定中使用重复元素的数组。&lt;/p&gt;&lt;p&gt;第一种方式是直接在数组上使用 &lt;strong&gt;MessageHeaderAttribute&lt;/strong&gt; 或 &lt;strong&gt;MessageBodyMemberAttribute&lt;/strong&gt;。在这种情况下，整个数组序列化为一个具有多个子元素的元素（即一个标头或一个正文部分）。考虑下面示例中的类。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_b1b9dedc-2193-40e9-8ac3-7d5287f86fc2');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_b1b9dedc-2193-40e9-8ac3-7d5287f86fc2" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; BankingDepositLog&lt;br/&gt;{&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; numRecords&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; DepositRecord records[];&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; branchID;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;这会使 SOAP 标头类似于下面所示。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;other&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_4f33b8f1-b56f-4fc7-8b92-777f8c810cd2');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_4f33b8f1-b56f-4fc7-8b92-777f8c810cd2" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;&amp;lt;BankingDepositLog&amp;gt;&lt;br/&gt;&amp;lt;numRecords&amp;gt;3&amp;lt;/numRecords&amp;gt;&lt;br/&gt;&amp;lt;records&amp;gt;&lt;br/&gt;  &amp;lt;DepositRecord&amp;gt;Record1&amp;lt;/DepositRecord&amp;gt;&lt;br/&gt;  &amp;lt;DepositRecord&amp;gt;Record2&amp;lt;/DepositRecord&amp;gt;&lt;br/&gt;  &amp;lt;DepositRecord&amp;gt;Record3&amp;lt;/DepositRecord&amp;gt;&lt;br/&gt;&amp;lt;/records&amp;gt;&lt;br/&gt;&amp;lt;branchID&amp;gt;20643&amp;lt;/branchID&amp;gt;&lt;br/&gt;&amp;lt;/BankingDepositLog&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;另一种方式是使用 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messageheaderarrayattribute.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;MessageHeaderArrayAttribute&lt;/span&gt;&lt;/a&gt;。在这种情况下，每个数组元素都单独序列化，从而使每个数组元素都具有一个标头，类似于下面所示。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;other&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_f0f833cb-bf69-431e-9854-a36debc8cff2');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_f0f833cb-bf69-431e-9854-a36debc8cff2" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;&amp;lt;numRecords&amp;gt;3&amp;lt;/numRecords&amp;gt;&lt;br/&gt;&amp;lt;records&amp;gt;Record1&amp;lt;/records&amp;gt;&lt;br/&gt;&amp;lt;records&amp;gt;Record2&amp;lt;/records&amp;gt;&lt;br/&gt;&amp;lt;records&amp;gt;Record3&amp;lt;/records&amp;gt;&lt;br/&gt;&amp;lt;branchID&amp;gt;20643&amp;lt;/branchID&amp;gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;数组项的默认名称是对其应用 &lt;strong&gt;MessageHeaderArrayAttribute&lt;/strong&gt; 属性的成员的名称。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;MessageHeaderArrayAttribute&lt;/strong&gt; 属性继承自 &lt;strong&gt;MessageHeaderAttribute&lt;/strong&gt;。它具有与非数组属性相同的一组功能，例如，可以像设置单一标头的顺序、名称和命名空间那样设置标头数组的顺序、名称和命名空间。在对数组使用 &lt;strong&gt;Order&lt;/strong&gt; 属性时，该属性将应用于整个数组。&lt;/p&gt;&lt;p&gt;可以将 &lt;strong&gt;MessageHeaderArrayAttribute&lt;/strong&gt; 只应用于数组，而不应用于集合。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;在消息协定中使用字节数组&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection4" class="section"&gt;&lt;p&gt;与非数组属性（&lt;strong&gt;MessageBodyMemberAttribute&lt;/strong&gt; 和 &lt;strong&gt;MessageHeaderAttribute&lt;/strong&gt;）一起使用时，字节数组不被视为数组，而被视为一种特殊的基元类型，在生成的 XML 中表示为 Base64 编码的数据。&lt;/p&gt;&lt;p&gt;在将字节数组与数组属性 &lt;strong&gt;MessageHeaderArrayAttribute&lt;/strong&gt; 一起使用时，结果取决于正在使用的序列化程序。如果使用默认序列化程序，会将数组表示为每个字节一个单独项。但如果选择 &lt;strong&gt;XmlSerializer&lt;/strong&gt;（在服务协定上使用 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.xmlserializerformatattribute.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;XmlSerializerFormatAttribute&lt;/span&gt;&lt;/a&gt;），则会将字节数组视为 Base64 数据，而不管是使用数组属性还是非数组属性。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;对消息部分进行签名和加密&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection5" class="section"&gt;&lt;p&gt;消息协定可以指示消息头和/或正文是否应进行数字签名和加密。&lt;/p&gt;&lt;p&gt;这可以通过在 &lt;strong&gt;MessageHeaderAttribute&lt;/strong&gt; 和 &lt;strong&gt;MessageBodyMemberAttribute&lt;/strong&gt; 特性上设置 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagecontractmemberattribute.protectionlevel.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.ServiceModel.MessageContractMemberAttribute.ProtectionLevel&lt;/span&gt;&lt;/a&gt; 属性来完成。该属性是 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.net.security.protectionlevel.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.Net.Security.ProtectionLevel&lt;/span&gt;&lt;/a&gt; 类型的枚举，可以设置为 &lt;span class="unresolvedLink"&gt;None&lt;/span&gt;（不加密或签名）、&lt;span class="unresolvedLink"&gt;Sign&lt;/span&gt;（仅数字签名）或 &lt;span class="unresolvedLink"&gt;EncryptAndSign&lt;/span&gt;（加密并数字签名）。默认值为 &lt;strong&gt;EncryptAndSign&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;若要让这些安全功能起作用，必须正确配置绑定和行为。如果在没有正确配置的情况下使用这些安全功能（例如，在不提供凭据的情况下试图对消息进行签名），则会在验证时引发异常。&lt;/p&gt;&lt;p&gt;对于消息头，会分别为每个消息头确定其保护级别。&lt;/p&gt;&lt;p&gt;对于消息正文部分，保护级别可理解为&amp;ldquo;最低保护级别&amp;rdquo;。无论包含几个正文部分，正文都只有一个保护级别。正文的保护级别由所有正文部分的最高 &lt;strong&gt;ProtectionLevel&lt;/strong&gt; 属性设置确定。不过，您应该将每个正文部分的保护级别设置为实际要求的最低保护级别。&lt;/p&gt;&lt;p&gt;考虑下面代码示例中的类。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_db0fd71d-4fec-480f-94aa-4073420b91b3');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_db0fd71d-4fec-480f-94aa-4073420b91b3" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; PatientRecord&lt;br/&gt;{&lt;br/&gt;   [MessageHeader(ProtectionLevel=None)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; recordID;&lt;br/&gt;   [MessageHeader(ProtectionLevel=Sign)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; patientName;&lt;br/&gt;   [MessageHeader(ProtectionLevel=EncryptAndSign)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; SSN;&lt;br/&gt;   [MessageBodyMember(ProtectionLevel=None)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; comments;&lt;br/&gt;   [MessageBodyMember(ProtectionLevel=Sign)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; diagnosis;&lt;br/&gt;   [MessageBodyMember(ProtectionLevel=EncryptAndSign)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; medicalHistory;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;在此示例中，&lt;code&gt;recordID&lt;/code&gt; 标头未受保护，&lt;code&gt;patientName&lt;/code&gt; 为 &lt;code&gt;signed&lt;/code&gt;，&lt;code&gt;SSN&lt;/code&gt; 进行了加密和签名。至少有一个正文部分 &lt;code&gt;medicalHistory&lt;/code&gt; 已应用 &lt;strong&gt;EncryptAndSign&lt;/strong&gt;，因此将对整个消息正文进行加密和签名，即使 comments 和 diagnosis 正文部分指定了较低的保护级别。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;控制标头和正文部分的名称和命名空间&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection6" class="section"&gt;&lt;p&gt;在消息协定的 SOAP 表示形式中，每个标头和正文部分都映射为一个具有名称和命名空间的 XML 元素。&lt;/p&gt;&lt;p&gt;默认情况下，命名空间与消息加入的服务协定的命名空间相同，名称由应用 &lt;strong&gt;MessageHeaderAttribute&lt;/strong&gt; 或 &lt;strong&gt;MessageBodyMemberAttribute&lt;/strong&gt; 属性的成员名称确定。&lt;/p&gt;&lt;p&gt;通过操作 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagecontractmemberattribute.name.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.ServiceModel.MessageContractMemberAttribute.Name&lt;/span&gt;&lt;/a&gt; 和 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagecontractmemberattribute.namespace.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.ServiceModel.MessageContractMemberAttribute.Namespace&lt;/span&gt;&lt;/a&gt;（在 &lt;strong&gt;MessageHeaderAttribute&lt;/strong&gt; 和 &lt;strong&gt;MessageBodyMemberAttribute&lt;/strong&gt; 特性的父类上）可以更改这些默认值。&lt;/p&gt;&lt;p&gt;考虑下面代码示例中的类。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_99891d95-7f8d-45f5-8681-1f9108cc8a75');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_99891d95-7f8d-45f5-8681-1f9108cc8a75" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; BankingTransaction&lt;br/&gt;{&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Operation operation;&lt;br/&gt;  [MessageHeader(Namespace=&lt;span style="color: #a31515;"&gt;"http://schemas.contoso.com/auditing/2005"&lt;/span&gt;)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; IsAudited;&lt;br/&gt;  [MessageBodyMember(Name=&lt;span style="color: #a31515;"&gt;"transactionData"&lt;/span&gt;)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; BankingTransactionData theData;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;在此示例中，&lt;code&gt;IsAudited&lt;/code&gt; 标头位于代码中指定的命名空间中，表示 &lt;code&gt;theData&lt;/code&gt; 成员的正文部分由名为 &lt;code&gt;transactionData&lt;/code&gt; 的 XML 元素表示。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;控制是否包装 SOAP 正文部分&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection7" class="section"&gt;&lt;p&gt;默认情况下，SOAP 正文部分会在包装元素内部进行序列化。例如，下面的代码演示从 &lt;code&gt;HelloGreetingMessage&lt;/code&gt; 消息的消息协定中的 &lt;strong&gt;MessageContractAttribute&lt;/strong&gt; 类型的名称生成的 &lt;code&gt;HelloGreetingMessage&lt;/code&gt; 包装元素。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabActive codeSnippetContainerTabFirst"&gt;&lt;a&gt;&lt;span style="color: #e66a38;" color="#e66a38"&gt;C#&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabLast"&gt;&lt;a href="javascript: CodeSnippet_SetLanguage('CodeSnippetContainerLang', 'Programming', 'Visual Basic');"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;VB&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_7f77f567-6b8f-4f29-8811-cfee5ee0a886');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_7f77f567-6b8f-4f29-8811-cfee5ee0a886" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; HelloGreetingMessage&lt;br/&gt;{&lt;br/&gt;  &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; localGreeting;&lt;br/&gt;&lt;br/&gt;  [MessageBodyMember(&lt;br/&gt;    Name = &lt;span style="color: #a31515;"&gt;"Salutations"&lt;/span&gt;, &lt;br/&gt;    Namespace = &lt;span style="color: #a31515;"&gt;"http://www.examples.com"&lt;/span&gt;&lt;br/&gt;  )]&lt;br/&gt;  &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Greeting&lt;br/&gt;  {&lt;br/&gt;    &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; localGreeting; }&lt;br/&gt;    &lt;span style="color: blue;"&gt;set&lt;/span&gt; { localGreeting = value; }&lt;br/&gt;  }&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;span style="color: green;"&gt;/*&lt;br/&gt; The following is the request message, edited for clarity.&lt;br/&gt;  &lt;br/&gt;  &amp;lt;s:Envelope&amp;gt;&lt;br/&gt;    &amp;lt;s:Header&amp;gt;&lt;br/&gt;      &amp;lt;!-- Note: Some header content has been removed for clarity.&lt;br/&gt;      &amp;lt;a:Action&amp;gt;http://GreetingMessage/Action&amp;lt;/a:Action&amp;gt; &lt;br/&gt;      &amp;lt;a:To s:mustUnderstand="1"&amp;gt;&amp;lt;/a:To&amp;gt;&lt;br/&gt;    &amp;lt;/s:Header&amp;gt;&lt;br/&gt;    &amp;lt;s:Body u:Id="_0" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"&amp;gt;&lt;br/&gt;      &amp;lt;HelloGreetingMessage xmlns="Microsoft.WCF.Documentation"&amp;gt;&lt;br/&gt;        &amp;lt;Salutations xmlns="http://www.examples.com"&amp;gt;Hello.&amp;lt;/Salutations&amp;gt;&lt;br/&gt;      &amp;lt;/HelloGreetingMessage&amp;gt;&lt;br/&gt;    &amp;lt;/s:Body&amp;gt;&lt;br/&gt; &amp;lt;/s:Envelope&amp;gt;&lt;br/&gt; */&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;若要取消包装元素，请将 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagecontractattribute.iswrapped.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;IsWrapped&lt;/span&gt;&lt;/a&gt; 属性设置为 &lt;strong&gt;false&lt;/strong&gt;。若要控制包装元素的名称和命名空间，请使用 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagecontractattribute.wrappername.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;WrapperName&lt;/span&gt;&lt;/a&gt; 和 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagecontractattribute.wrappernamespace.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;WrapperNamespace&lt;/span&gt;&lt;/a&gt; 属性。&lt;/p&gt;&lt;div class="alert"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;img id="note" class="cl_IC101471" title="ms730255.note(zh-cn,VS.100).gif" alt="ms730255.note(zh-cn,VS.100).gif" src="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" xmlns="" /&gt;注意：&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;消息中具有多个未包装的消息正文部分不符合 WS-I 基本配置文件 1.1 的规定，在设计新消息协定时不建议这样做。但是，在某些特定的互操作性方案中，必需要具有多个未包装的消息正文部分。如果要在消息正文中传输多段数据，则建议使用默认（包装）模式。未包装的消息中具有多个消息头是完全可以的。&lt;p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;SOAP 操作&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection8" class="section"&gt;&lt;p&gt;SOAP 和相关 Web 服务标准定义了一个名为 &lt;strong&gt;Action&lt;/strong&gt; 的属性，该属性可用于发送的每个 SOAP 消息。操作的 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.operationcontractattribute.action.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.ServiceModel.OperationContractAttribute.Action&lt;/span&gt;&lt;/a&gt; 和 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.operationcontractattribute.replyaction.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.ServiceModel.OperationContractAttribute.ReplyAction&lt;/span&gt;&lt;/a&gt; 属性控制此属性的值。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;SOAP 标头属性&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection9" class="section"&gt;&lt;p&gt;SOAP 标准定义了下列可存在于标头上的属性：&lt;/p&gt;&lt;ul&gt;&lt;li class="unordered"&gt;&lt;strong&gt;Actor/Role&lt;/strong&gt;（在 SOAP 1.1 中为 &lt;strong&gt;Actor&lt;/strong&gt;，在 SOAP 1.2 中为 &lt;strong&gt;Role&lt;/strong&gt;）&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;&lt;strong&gt;MustUnderstand&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;&lt;strong&gt;Relay&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Actor&lt;/strong&gt; 或 &lt;strong&gt;Role&lt;/strong&gt; 属性指定要使用给定标头的节点的统一资源标识符 (URI)。&lt;strong&gt;MustUnderstand&lt;/strong&gt; 属性指定处理标头的节点是否必须理解该标头。&lt;strong&gt;Relay&lt;/strong&gt; 属性指定要将标头中继到下游节点。WCF 不会对传入消息的这些属性执行任何处理，但 &lt;strong&gt;MustUnderstand&lt;/strong&gt; 属性除外，该属性将在本主题后面的&amp;ldquo;消息协定版本管理&amp;rdquo;部分中说明。但它允许您根据需要读取和写入这些属性，如下所述。&lt;/p&gt;&lt;p&gt;发送消息时，默认情况下不会发出这些属性。您可以采取两种方式更改这一行为。第一种方式是通过更改 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messageheaderattribute.actor.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.ServiceModel.MessageHeaderAttribute.Actor&lt;/span&gt;&lt;/a&gt;、&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messageheaderattribute.mustunderstand.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.ServiceModel.MessageHeaderAttribute.MustUnderstand&lt;/span&gt;&lt;/a&gt; 和 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messageheaderattribute.relay.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.ServiceModel.MessageHeaderAttribute.Relay&lt;/span&gt;&lt;/a&gt; 属性，以静态方式将这些特性设置为任何需要的值，如下面的代码示例所示。（请注意，没有 &lt;strong&gt;Role&lt;/strong&gt; 属性；如果使用 SOAP 1.2，则设置 &lt;strong&gt;Actor&lt;/strong&gt; 属性会发出 &lt;strong&gt;Role&lt;/strong&gt; 特性）。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_3c4b5df7-fd7e-486d-ac56-b5f7519359ce');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_3c4b5df7-fd7e-486d-ac56-b5f7519359ce" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; BankingTransaction&lt;br/&gt;{&lt;br/&gt;  [MessageHeader(Actor=&lt;span style="color: #a31515;"&gt;"http://auditingservice.contoso.com"&lt;/span&gt;, MustUnderstand=&lt;span style="color: blue;"&gt;true&lt;/span&gt;)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; IsAudited;&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Operation operation;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; BankingTransactionData theData;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第二种方式是通过代码以动态方式控制这些属性。为此，您可以将所需的标头包装在 &lt;a href="http://msdn.microsoft.com/zh-cn/library/ms586745.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;MessageHeader&lt;/span&gt;&lt;/a&gt; 类型中（切勿将此类型与非泛型版本混淆），并与 &lt;strong&gt;MessageHeaderAttribute&lt;/strong&gt; 一起使用该类型。然后，可以在 &lt;strong&gt;MessageHeader&lt;/strong&gt; 上使用属性来设置 SOAP 特性，如下面的代码示例所示。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_256bd58a-f7ee-466f-9b9c-99acc112513b');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_256bd58a-f7ee-466f-9b9c-99acc112513b" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; BankingTransaction&lt;br/&gt;{&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; MessageHeader&amp;lt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;gt; IsAudited;&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Operation operation;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; BankingTransactionData theData;&lt;br/&gt;}&lt;br/&gt;&lt;span style="color: green;"&gt;// application code:&lt;/span&gt;&lt;br/&gt;BankingTransaction bt = &lt;span style="color: blue;"&gt;new&lt;/span&gt; BankingTransaction();&lt;br/&gt;bt.IsAudited = &lt;span style="color: blue;"&gt;new&lt;/span&gt; MessageHeader&amp;lt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;gt;();&lt;br/&gt;bt.IsAudited.Content = &lt;span style="color: blue;"&gt;false&lt;/span&gt;; &lt;span style="color: green;"&gt;// Set IsAudited header value to "false"&lt;/span&gt;&lt;br/&gt;bt.IsAudited.Actor=&lt;span style="color: #a31515;"&gt;"http://auditingservice.contoso.com"&lt;/span&gt;;&lt;br/&gt;bt.IsAudited.MustUnderstand=&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;如果同时使用动态和静态控制机制，则静态设置用作默认设置，但可以在以后使用动态机制重写，如下面的代码所示。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;other&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_4a7ca822-bffe-4ca7-9898-ad63977acd7d');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_4a7ca822-bffe-4ca7-9898-ad63977acd7d" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[C#]&lt;br/&gt;[MessageHeader(MustUnderstand=true)] public MessageHeader&amp;lt;Person&amp;gt; documentApprover;&lt;br/&gt;// later on in the code:&lt;br/&gt;BankingTransaction bt = new BankingTransaction();&lt;br/&gt;bt.documentApprover = new MessageHeader&amp;lt;Person&amp;gt;();&lt;br/&gt;bt.documentApprover.MustUnderstand = false; // override the static default of 'true'&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;允许创建具有动态属性控制的重复标头，如下面的代码所示。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_5f105ddf-e673-4a86-8760-a9721dc70abb');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_5f105ddf-e673-4a86-8760-a9721dc70abb" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageHeaderArray] &lt;span style="color: blue;"&gt;public&lt;/span&gt; MessageHeader&amp;lt;Person&amp;gt; documentApprovers[];&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;在接收端，仅当对类型中的标头使用 &lt;strong&gt;MessageHeader&lt;/strong&gt; 类时才能读取这些 SOAP 属性。请检查 &lt;strong&gt;MessageHeader&lt;/strong&gt; 类型的标头的 &lt;strong&gt;Actor&lt;/strong&gt;、&lt;strong&gt;Relay&lt;/strong&gt; 或 &lt;strong&gt;MustUnderstand&lt;/strong&gt; 属性 (Property) 以发现所接收消息的属性 (Attribute) 设置。&lt;/p&gt;&lt;p&gt;当接收到消息然后发回该消息时，SOAP 属性设置仅对 &lt;strong&gt;MessageHeader&lt;/strong&gt; 类型的标头往返一次。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;SOAP 正文部分的顺序&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection10" class="section"&gt;&lt;p&gt;在某些情况下，可能需要控制正文部分的顺序。默认情况下，正文元素采用字母顺序，但可以通过 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.messagebodymemberattribute.order.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.ServiceModel.MessageBodyMemberAttribute.Order&lt;/span&gt;&lt;/a&gt; 属性进行控制。此属性具有与 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datamemberattribute.order.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.Runtime.Serialization.DataMemberAttribute.Order&lt;/span&gt;&lt;/a&gt; 属性相同的语义，但在继承方案中的行为除外（在消息协定中，基类型正文成员不排列在派生类型正文成员之前）。有关更多信息，请参见 &lt;a href="http://msdn.microsoft.com/zh-cn/library/ms729813.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;数据成员顺序&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;在下面的示例中，&lt;code&gt;amount&lt;/code&gt; 通常排在第一位，因为按字母顺序它排在第一位。但 &lt;strong&gt;Order&lt;/strong&gt; 属性将它放在了第三位。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_e6d09661-ebeb-4f57-9a1f-ecb8fa525acd');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_e6d09661-ebeb-4f57-9a1f-ecb8fa525acd" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; BankingTransaction&lt;br/&gt;{&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Operation operation;&lt;br/&gt;  [MessageBodyMember(Order=1)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Account sourceAccount;&lt;br/&gt;  [MessageBodyMember(Order=2)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Account targetAccount;&lt;br/&gt;  [MessageBodyMember(Order=3)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; amount;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;消息协定版本管理&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection11" class="section"&gt;&lt;p&gt;有时，您可能需要更改消息协定。例如，应用程序的新版本可能会向消息中添加额外的标头。在从新版本应用程序向旧版本应用程序发送消息时，系统必须处理额外的标头；同样，反方向操作时系统必须处理缺少的标头。&lt;/p&gt;&lt;p&gt;下面的规则适用于标头的版本管理：&lt;/p&gt;&lt;ul&gt;&lt;li class="unordered"&gt;WCF 不反对缺少标头，相应的成员将保留其默认值。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;WCF 还忽略意外的额外标头。此规则的一种例外情况是在传入的 SOAP 消息中，额外标头的 &lt;strong&gt;MustUnderstand&lt;/strong&gt; 属性设置为 &lt;strong&gt;true&lt;/strong&gt;。在这种情况下，由于存在一个无法处理但必须理解的标头，因此会引发异常。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;消息正文具有类似的版本管理规则，即忽略缺少和附加的消息正文部分。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;继承注意事项&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection12" class="section"&gt;&lt;p&gt;消息协定类型可以继承自另一个类型，前提是基类型也具有消息协定。&lt;/p&gt;&lt;p&gt;在使用继承自其他消息协定类型的消息协定类型创建或访问消息时，下面的规则适用：&lt;/p&gt;&lt;ul&gt;&lt;li class="unordered"&gt;继承层次结构中的所有消息头集合在一起构成消息头的完整集合。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;继承层次结构中的所有消息正文部分集合在一起构成消息正文的完整集合。正文部分按照通常排序规则排列（按 &lt;strong&gt;System.ServiceModel.MessageBodyMemberAttribute.Order&lt;/strong&gt; 属性，然后按字母顺序排序），与它们在继承层次结构中的位置无关。在使用消息协定继承时，强烈建议消息正文部分不要出现在继承树的多个级别上。如果基类和派生类用相同的名称定义标头或正文部分，则使用最基础的类中的成员来存储该标头或正文部分的值。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;考虑下面代码示例中的类。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_8f371cae-825a-439b-b7da-5745f6c611db');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_8f371cae-825a-439b-b7da-5745f6c611db" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; PersonRecord&lt;br/&gt;{&lt;br/&gt;  [MessageHeader(Name=&lt;span style="color: #a31515;"&gt;"ID"&lt;/span&gt;)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; personID;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; patientName;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; PatientRecord : PersonRecord&lt;br/&gt;{&lt;br/&gt;  [MessageHeader(Name=&lt;span style="color: #a31515;"&gt;"ID"&lt;/span&gt;)] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; patientID;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; diagnosis;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;PatientRecord&lt;/code&gt; 类描述了一个消息，该消息具有一个名为 &lt;code&gt;ID&lt;/code&gt; 的标头。该标头对应于 &lt;code&gt;personID&lt;/code&gt; 而不对应于 &lt;code&gt;patientID&lt;/code&gt; 成员，因为选择了最基础的成员。因此，在这种情况下，&lt;code&gt;patientID&lt;/code&gt; 字段无用。消息正文包含 &lt;code&gt;diagnosis&lt;/code&gt; 元素，后面跟随 &lt;code&gt;patientName&lt;/code&gt; 元素，因为这是这些元素的字母顺序。表注意，该示例演示了一种强烈建议不要使用的模式：基消息协定和派生消息协定都具有消息正文部分。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;WSDL 注意事项&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection13" class="section"&gt;&lt;p&gt;在从使用消息协定的服务生成 Web 服务描述语言 (WSDL) 协定时，必须记住生成的 WSDL 中并不会反映所有的消息协定功能。请考虑以下几点：&lt;/p&gt;&lt;ul&gt;&lt;li class="unordered"&gt;WSDL 无法表示标头数组的概念。使用 &lt;strong&gt;MessageHeaderArrayAttribute&lt;/strong&gt; 创建具有标头数组的消息时，生成的 WSDL 只反映一个标头而不是该数组。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;生成的 WSDL 文档可能不反映某些保护级别信息。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;在 WSDL 中生成的消息类型的名称与消息协定类型的类名称相同。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;在多个操作中使用同一个消息协定时，会在 WSDL 文档中生成多个消息类型。对于后续使用，会在名称中添加数字&amp;ldquo;2&amp;rdquo;、&amp;ldquo;3&amp;rdquo;等以使名称唯一。在导回 WSDL 时，会创建多个消息协定类型，除了名称不同外，这些消息协定类型完全相同。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;SOAP 编码注意事项&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection14" class="section"&gt;&lt;p&gt;WCF 允许但不推荐使用 XML 的旧式 SOAP 编码样式。使用这种样式时（在应用于服务协定的 &lt;strong&gt;System.ServiceModel.XmlSerializerFormatAttribute&lt;/strong&gt; 上将 &lt;strong&gt;Use&lt;/strong&gt; 属性设置为 &lt;strong&gt;Encoded&lt;/strong&gt;），下面的附加注意事项适用：&lt;/p&gt;&lt;ul&gt;&lt;li class="unordered"&gt;不支持消息头；这意味着属性 &lt;strong&gt;MessageHeaderAttribute&lt;/strong&gt; 和数组属性 &lt;strong&gt;MessageHeaderArrayAttribute&lt;/strong&gt; 与 SOAP 编码不兼容。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;如果未包装消息协定，即如果属性 &lt;strong&gt;IsWrapped&lt;/strong&gt; 设置为 &lt;strong&gt;false&lt;/strong&gt;，则消息协定只能具有一个正文部分。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;请求消息协定的包装元素的名称必须与操作名称匹配。为此请使用消息协定的 &lt;strong&gt;WrapperName&lt;/strong&gt; 属性。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;响应消息协定的包装元素的名称必须与具有&amp;ldquo;Response&amp;rdquo;后缀的操作名称相同。为此请使用消息协定的 &lt;strong&gt;WrapperName&lt;/strong&gt; 属性。&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li class="unordered"&gt;SOAP 编码保留对象引用。例如，请考虑下面的代码。&lt;br /&gt;&lt;br /&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_a0dfb983-7793-4231-9228-b72849a540a4');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_a0dfb983-7793-4231-9228-b72849a540a4" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract(WrapperName=&lt;span style="color: #a31515;"&gt;"updateChangeRecord"&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; ChangeRecordRequest&lt;br/&gt;{&lt;br/&gt;  [MessageBodyMember] Person changedBy;&lt;br/&gt;  [MessageBodyMember] Person changedFrom;&lt;br/&gt;  [MessageBodyMember] Person changedTo;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;[MessageContract(WrapperName=&lt;span style="color: #a31515;"&gt;"updateChangeRecordResponse"&lt;/span&gt;)]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; ChangeRecordResponse&lt;br/&gt;{&lt;br/&gt;  [MessageBodyMember] Person changedBy;&lt;br/&gt;  [MessageBodyMember] Person changedFrom;&lt;br/&gt;  [MessageBodyMember] Person changedTo;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;span style="color: green;"&gt;// application code:&lt;/span&gt;&lt;br/&gt;ChangeRecordRequest cr = &lt;span style="color: blue;"&gt;new&lt;/span&gt; ChangeRecordRequest();&lt;br/&gt;Person p = &lt;span style="color: blue;"&gt;new&lt;/span&gt; Person(&lt;span style="color: #a31515;"&gt;"John Doe"&lt;/span&gt;);&lt;br/&gt;cr.changedBy=p;&lt;br/&gt;cr.changedFrom=p;&lt;br/&gt;cr.changedTo=p;&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;使用 SOAP 编码序列化消息后，&lt;code&gt;changedFrom&lt;/code&gt; 和 &lt;code&gt;changedTo&lt;/code&gt; 不包含其自己的 &lt;code&gt;p&lt;/code&gt; 副本，而是指向 &lt;code&gt;changedBy&lt;/code&gt; 元素内的副本。&lt;/p&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;性能注意事项&lt;/strong&gt;&lt;/p&gt;&lt;div id="sectionSection15" class="section"&gt;&lt;p&gt;每个消息头和消息正文部分相互独立地进行序列化。因此，可以为每个标头和正文部分重新声明相同的命名空间。为了提高性能，特别是对于消息在网络上的大小，请将多个标头和正文部分合并成一个标头或正文部分。例如，不要使用下面代码：&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_dbec3a24-24de-4a51-b061-f44c129f259b');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_dbec3a24-24de-4a51-b061-f44c129f259b" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; BankingTransaction&lt;br/&gt;{&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Operation operation;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Account sourceAccount;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Account targetAccount;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; amount;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;请使用此代码。&lt;/p&gt;&lt;div class="codeSnippetContainer" xmlns=""&gt;&lt;script type="text/javascript" src="http://www.cnblogs.com/Areas/Global/Content/CodeSnippet.js"&gt;&lt;/script&gt;&lt;link rel="stylesheet" type="text/css" href="http://www.cnblogs.com/Areas/Brand/Content/CodeSnippet.css" /&gt;&lt;div class="codeSnippetContainerTabs"&gt;&lt;div dir="ltr" class="codeSnippetContainerTab codeSnippetContainerTabSingle"&gt;&lt;a&gt;C#&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="codeSnippetContainerCodeContainer"&gt;&lt;div class="codeSnippetToolBar"&gt;&lt;div class="codeSnippetToolBarText"&gt;&lt;a style="display: block;" title="复制到剪贴板。" href="javascript:CodeSnippet_CopyCode('CodeSnippetContainerCode_f877c2d8-0531-4688-b5ab-8aa6edb018aa');" name="CodeSnippetCopyLink"&gt;&lt;/a&gt;复制&lt;/div&gt;&lt;/div&gt;&lt;div dir="ltr" id="CodeSnippetContainerCode_f877c2d8-0531-4688-b5ab-8aa6edb018aa" class="codeSnippetContainerCode"&gt;&lt;div style="color: black;"&gt;[MessageContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; BankingTransaction&lt;br/&gt;{&lt;br/&gt;  [MessageHeader] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Operation operation;&lt;br/&gt;  [MessageBodyMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; OperationDetails details;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;[DataContract]&lt;br/&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; OperationDetails&lt;br/&gt;{&lt;br/&gt;  [DataMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Account sourceAccount;&lt;br/&gt;  [DataMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; Account targetAccount;&lt;br/&gt;  [DataMember] &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; amount;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 class="subHeading"&gt;基于事件的异步协定和消息协定&lt;/strong&gt;&lt;/p&gt;&lt;div class="subSection"&gt;&lt;p&gt;基于事件的异步模型设计准则规定，如果返回了多个值，则一个值会作为 &lt;strong&gt;Result&lt;/strong&gt; 属性返回，其他值会作为 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.eventargs.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;EventArgs&lt;/span&gt;&lt;/a&gt; 对象上的属性返回。因此产生的结果之一是，如果客户端使用基于事件的异步命令选项导入元数据，且该操作返回多个值，则默认的 &lt;strong&gt;EventArgs&lt;/strong&gt; 对象将返回一个值作为 &lt;strong&gt;Result&lt;/strong&gt; 属性，返回的其余值是 &lt;strong&gt;EventArgs&lt;/strong&gt; 对象的属性。&lt;/p&gt;&lt;p&gt;如果要将消息对象作为 &lt;strong&gt;Result&lt;/strong&gt; 属性来接收并要使返回的值作为该对象上的属性，请使用 &lt;strong&gt;/messageContract&lt;/strong&gt; 命令选项。这会生成一个签名，该签名会将响应消息作为 &lt;strong&gt;EventArgs&lt;/strong&gt; 对象上的 &lt;strong&gt;Result&lt;/strong&gt; 属性返回。然后，所有内部返回值就都是响应消息对象的属性了。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2 class="heading"&gt;&lt;span id="seeAlsoNoToggle"&gt;&lt;/span&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/EasyLive2006/aggbug/2199270.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EasyLive2006/archive/2011/10/05/2199270.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EasyLive2006/archive/2011/09/29/2195492.html</id><title type="text">15138删除对于用户失败,数据库主体在该数据库中拥有架构</title><summary type="text">解决方法一 先删除此用户对应的架构，然后在删除对应的用户 步骤 1。SQL SERVER MANAGEMENT STUDIO--》数据库--》安全性--》构架，先删除对应的构架 2。SQL SERVER MANAGEMENT STUDIO--》数据库--》安全性--》用户，删除对应的用户 解决方法二 --执行如下SQL语句 ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo; --然后手动删除就可以了。</summary><published>2011-09-29T06:40:00Z</published><updated>2011-09-29T06:40:00Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EasyLive2006/archive/2011/09/29/2195492.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/archive/2011/09/29/2195492.html"/><content type="html">&lt;p&gt;解决方法一 &lt;br /&gt;&lt;br /&gt;先删除此用户对应的架构，然后在删除对应的用户 &lt;br /&gt;步骤 &lt;br /&gt;1。SQL SERVER MANAGEMENT STUDIO--》数据库--》安全性--》构架，先删除对应的构架 &lt;br /&gt;2。SQL SERVER MANAGEMENT STUDIO--》数据库--》安全性--》用户，删除对应的用户 &lt;br /&gt;&lt;br /&gt;解决方法二 &lt;br /&gt;&lt;br /&gt;--执行如下SQL语句 &lt;br /&gt;&lt;br /&gt;ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo; &lt;br /&gt;--然后手动删除就可以了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/EasyLive2006/aggbug/2195492.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EasyLive2006/archive/2011/09/29/2195492.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/EasyLive2006/archive/2011/09/28/2194198.html</id><title type="text">ASP.NET MVC AuthorizeAttribute 相关</title><summary type="text">AuthorizeAttribute 类.NET Framework 4表示一个特性，该特性用于限制调用方对操作方法的访问。继承层次结构System.Object System.Attribute System.Web.Mvc.FilterAttribute System.Web.Mvc.AuthorizeAttribute命名空间： System.Web.Mvc程序集： System.Web.Mvc（在 System.Web.Mvc.dll 中）许多 Web 应用程序要求在用户登录之后才授予其对受限制内容的访问权限。在某些应用程序中，即使是登录的用户，也会限制他们可以查看的内容或可以编辑的字</summary><published>2011-09-28T06:09:00Z</published><updated>2011-09-28T06:09:00Z</updated><author><name>KidYang</name><uri>http://www.cnblogs.com/EasyLive2006/</uri></author><link rel="alternate" href="http://www.cnblogs.com/EasyLive2006/archive/2011/09/28/2194198.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/EasyLive2006/archive/2011/09/28/2194198.html"/><content type="html">&lt;h1 class="title"&gt;AuthorizeAttribute 类&lt;/strong&gt;&lt;/p&gt;&lt;div class="lw_vs"&gt;&lt;div id="curversion"&gt;&lt;strong&gt;.NET Framework 4&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div id="mainSection"&gt;&lt;div id="mainBody"&gt;&lt;div&gt;&lt;div class="summary"&gt;&lt;p&gt;&lt;span id="xn1_8ccf9b9d5858debd7605f67377d0e778" class="sentence"&gt;表示一个特性，该特性用于限制调用方对操作方法的访问。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div xmlns=""&gt;&lt;script type="text/javascript"&gt;// &lt;![CDATA[if (!MTPS) var MTPS = {};if (!MTPS.LocalizedStrings) MTPS.LocalizedStrings = {};               MTPS.LocalizedStrings.ExpandButtonTooltip = '展开';               MTPS.LocalizedStrings.CollapseButtonTooltip = '折叠';// ]]&gt;&lt;/script&gt;&lt;div class="LW_CollapsibleArea_TitleDiv"&gt;&lt;div&gt;&lt;a class="LW_CollapsibleArea_TitleAhref" title="折叠" href="javascript:void(0)"&gt;&lt;img class="cl_CollapsibleArea_expanding LW_CollapsibleArea_Img" src="http://i.msdn.microsoft.com/Hash/030c41d9079671d09a62d8e2c1db6973.gif" /&gt;&lt;strong&gt;&lt;span class="LW_CollapsibleArea_Title"&gt;&lt;span style="color: #3f529c; font-size: large;" color="#3f529c" size="5"&gt;继承层次结构&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;div class="LW_CollapsibleArea_HrDiv"&gt;&lt;strong&gt;&lt;strong&gt;&lt;span style="color: #3f529c; font-size: large;" color="#3f529c" size="5"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;hr class="LW_CollapsibleArea_Hr" /&gt;&lt;strong&gt;&lt;span style="color: #3f529c; font-size: large;" color="#3f529c" size="5"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="sectionblock"&gt;&lt;a id="familyToggle" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;/a&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.object.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System&lt;span&gt;.&lt;/span&gt;Object&lt;/span&gt;&lt;/a&gt;&lt;br xmlns="http://www.w3.org/1999/xhtml" /&gt; &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.attribute.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System&lt;span&gt;.&lt;/span&gt;Attribute&lt;/span&gt;&lt;/a&gt;&lt;br xmlns="http://www.w3.org/1999/xhtml" /&gt; &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.web.mvc.filterattribute.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.Web.Mvc&lt;span&gt;.&lt;/span&gt;FilterAttribute&lt;/span&gt;&lt;/a&gt;&lt;br xmlns="http://www.w3.org/1999/xhtml" /&gt; &lt;span class="selflink" xmlns="http://www.w3.org/1999/xhtml"&gt;System.Web.Mvc&lt;span xmlns=""&gt;.&lt;/span&gt;AuthorizeAttribute&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;strong&gt;命名空间：&lt;/strong&gt; &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.web.mvc.aspx"&gt;&lt;span style="color: #1364c4;" color="#1364c4"&gt;System.Web.Mvc&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;程序集：&lt;/strong&gt; &lt;span&gt;System.Web.Mvc&lt;/span&gt;（在 System.Web.Mvc.dll 中）&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span id="xn23_c89e98c601dc18c9d0af88827ae0d9fa" class="sentence"&gt;许多 Web 应用程序要求在用户登录之后才授予其对受限制内容的访问权限。&lt;/span&gt;&lt;span id="xn24_d86d542c6eb856b9705b0e173e64d886" class="sentence"&gt;在某些应用程序中，即使是登录的用户，也会限制他们可以查看的内容或可以编辑的字段。&lt;/span&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span id="xn25_342a192cfced8f2b7a45de91cad97b3e" class="sentence"&gt;要限制对 ASP.NET MVC 视图的访问，您可以限制对呈现视图的操作方法的访问。&lt;/span&gt;&lt;span id="xn26_fdd66235fe65adf0306bd8e5d26b7e68" class="sentence"&gt;为此，MVC 框架提供 &lt;span xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span class="selflink"&gt;AuthorizeAttribute&lt;/span&gt;&lt;/span&gt; 类。&lt;/span&gt;&lt;/p&gt;&lt;p xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span class="sentence"&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 class="subHeading" xmlns="http://www.w3.org/1999/xhtml"&gt;使用 AuthorizeAttribute&lt;/strong&gt;&lt;/p&gt;&lt;div class="subsection" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;&lt;span id="xn31_c213be5ebfe555d62f02d764b1a3678b" class="sentence"&gt;当您使用 &lt;span xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span class="selflink"&gt;AuthorizeAttribute&lt;/span&gt;&lt;/span&gt; 标记一个操作方法时，则限制只有经过身份验证和授权的用户才能访问该操作方法。&lt;/span&gt;&lt;span id="xn32_3f58d20c8e5eef5e53936d6ecce54900" class="sentence"&gt;如果您使用该特性标记控制器，则限制控制器中的所有操作方法。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn33_470f73ed511071adc094954c45aa1d50" class="sentence"&gt;&lt;span xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span class="input"&gt;Authorize&lt;/span&gt;&lt;/span&gt; 特性允许您指明将授权限制给预定义角色或各个用户。&lt;/span&gt;&lt;span id="xn34_eabdc037881dc5b2b0945bd992552b47" class="sentence"&gt;这使您可以高度控制谁有权查看网站上的任何页面。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="xn35_95b77a733593b1de95a2a880f2eb25d0" class="sentence"&gt;如果未经授权的用户尝试访问用 &lt;span xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span class="input"&gt;Authorize&lt;/span&gt;&lt;/span&gt; 特性标记的方法，则 MVC 框架会返回 401 HTTP 状态代码。&lt;/span&gt;&lt;span id="xn36_e618a590900d230edc3e17a17640a293" class="sentence"&gt;如果站点配置为使用 ASP.NET Forms 身份验证，401 状态代码会导致浏览器将用户重定向到登录页。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="clear"&gt;&lt;span style="color: #f56400; font-family: Arial; font-size: medium;" face="Arial" color="#f56400" size="4"&gt;&lt;/span&gt;&amp;nbsp;以上转自：&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.web.mvc.authorizeattribute.aspx#using_authorizeattribute"&gt;http://msdn.microsoft.com/zh-cn/library/system.web.mvc.authorizeattribute.aspx#using_authorizeattribute&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;span class="sentence"&gt;&lt;span style="color: #f56400; font-family: Arial; font-size: medium;" face="Arial" color="#f56400" size="4"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="clear"&gt;&lt;span class="sentence"&gt;&lt;span style="color: #f56400; font-family: Arial; font-size: medium;" face="Arial" color="#f56400" size="4"&gt;自定义AuthorizeAttribute&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="postBody"&gt;&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;网站的权限判断是一个非常普遍的需求，从文章&lt;a href="http://www.cnblogs.com/shanyou/archive/2010/03/27/1698639.html"&gt;ASP.NET MVC的Action Filter&lt;/a&gt;中我们知道实现这样的需求只要从&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx"&gt;AuthorizeAttribute&lt;/a&gt;集成，重写相关的判断逻辑就可以了。这里记录一下：&lt;/p&gt;&lt;p&gt;namespace TokenAcl.Web.Helper &lt;br /&gt;{ &lt;br /&gt; public class TokenAclAuthorizeAttribute : AuthorizeAttribute &lt;br /&gt; { &lt;br /&gt; protected override bool AuthorizeCore(HttpContextBase httpContext) &lt;br /&gt; { &lt;br /&gt; bool result = false; &lt;br /&gt; if (httpContext == null) &lt;br /&gt; { &lt;br /&gt; throw new ArgumentNullException("httpContext"); &lt;br /&gt; } &lt;br /&gt; string[] users = Users.Split(','); &lt;br /&gt; string[] roles = Roles.Split(','); &lt;br /&gt; if (!httpContext.User.Identity.IsAuthenticated) &lt;br /&gt; return false; &lt;br /&gt; if (roles.Length != 0) &lt;br /&gt; { &lt;br /&gt; List&amp;lt;Role&amp;gt; rightRoles = RightClient.GetAllRole(TakenAclMenu.SystemID, TakenAclMenu.UserID); &lt;br /&gt; foreach (var role in roles) &lt;br /&gt; { &lt;br /&gt; if (rightRoles.Where(x =&amp;gt; x.Code == role).Count() &amp;gt; 0) &lt;br /&gt; { &lt;br /&gt; result = true; &lt;br /&gt; break; &lt;br /&gt; } &lt;br /&gt; } &lt;br /&gt; } &lt;br /&gt; if (!result) &lt;br /&gt; { &lt;br /&gt; httpContext.Response.StatusCode = 403; &lt;br /&gt; } &lt;br /&gt; return result; &lt;br /&gt; }&lt;/p&gt;&lt;p&gt;public override void OnAuthorization(AuthorizationContext filterContext) &lt;br /&gt; { &lt;br /&gt; base.OnAuthorization(filterContext); &lt;br /&gt; if (filterContext.HttpContext.Response.StatusCode == 403) &lt;br /&gt; { &lt;br /&gt; filterContext.Result = new RedirectResult("/Admin/Dashboard"); &lt;br /&gt; } &lt;br /&gt; } &lt;br /&gt; } &lt;br /&gt;}&lt;/p&gt;&lt;p&gt;从AuthorizeAttribute继承过来实现了一个类TokenAclAuthorizeAttribute ，重写了方法AuthorizeCore，使用自己开发的权限系统进行权限的验证，如果没有通过认证，这表示没有权限访问，设置&lt;a href="http://www.cnblogs.com/samlin/archive/2008/08/21/http-StatusCode.html"&gt;HTTP 状态代码&lt;/a&gt;为403。 这样还是不行，还得重写另一个方法OnAuthorization。AuthorizeCore方法返回false，MVC 此时将返回的ActionResult是HttpUnauthorizedResult：&lt;/p&gt;&lt;p&gt;public class HttpUnauthorizedResult : ActionResult { &lt;br /&gt;public override void ExecuteResult(ControllerContext context) { &lt;br /&gt;if (context == null) { &lt;br /&gt;throw new ArgumentNullException("context"); &lt;br /&gt; } &lt;br /&gt;// 401 is the HTTP status code for unauthorized access - setting this &lt;br /&gt;// will cause the active authentication module to execute its default &lt;br /&gt;// unauthorized handler &lt;br /&gt; context.HttpContext.Response.StatusCode = 401; &lt;br /&gt; } &lt;br /&gt; }&lt;/p&gt;&lt;p&gt;从HttpUnauthorizedResult的源码可以看出，HttpUnauthorizedResult的执行很简单，就是设置当前的HttpContext.Response的状态码为401，这样就回激活authentication module 执行它默认的 unauthorized handler，也就是跳转到登陆页面的，这似乎也不符合逻辑，认证和授权应该是验证的两个方面。这不符合要求，用户已经登陆成功了，只是没有权限而已。我这里只是重写OnAuthorization方法，重定向到一个页面而已，也可以写一个ActionResult。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="subsection" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;div class="postBody"&gt;&lt;div id="cnblogs_post_body"&gt;&lt;p&gt;&lt;span class="sentence"&gt;&lt;span class="sentence"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="sentence"&gt;&lt;span class="sentence"&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span class="sentence"&gt;&lt;span class="sentence"&gt;以上转自：&lt;a href="http://www.cnblogs.com/shanyou/archive/2010/03/27/1698639.html"&gt;http://www.cnblogs.com/shanyou/archive/2010/03/27/1698639.html&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/EasyLive2006/aggbug/2194198.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/EasyLive2006/archive/2011/09/28/2194198.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
