<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>AsiaTech: 微软全球技术支持中心互联网开发支持团队 官方博客</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/</link><description>我们关注各种Windows下IIS Web平台和分布式应用下疑难问题的诊断和解决方案</description><dc:language>en-US</dc:language><generator>Telligent Community 5.6.583.19199 (Build: 5.6.583.19199)</generator><item><title>如何解决IE下载时中文文件名变乱码的问题</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/10/12/ie.aspx</link><pubDate>Wed, 12 Oct 2011 05:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10223671</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10223671</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/10/12/ie.aspx#comments</comments><description>&lt;h1&gt;&lt;span style="color: #365f91;" color="#365f91"&gt;问题现象&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;当我们使用&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE&lt;/span&gt;浏览器下载中文文件名的文件时，先弹出&amp;ldquo;文件下载&amp;rdquo;对话框如下：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ww2.sinaimg.cn/bmiddle/873bebc4gw1dlxw41i9ggj.jpg"&gt;&lt;/a&gt;&lt;span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7103.1.png"&gt;&lt;img height="246" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7103.1.png" width="409" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;如果你点击&amp;ldquo;保存&amp;rdquo;的话，没有任何问题。但是如果你点击&amp;ldquo;打开&amp;rdquo;按钮的话，你会发现文件名变成了一串乱码，见下图&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ww3.sinaimg.cn/bmiddle/873bebc4gw1dlxw6nafl3j.jpg"&gt;&lt;/a&gt;&lt;span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/6153.2.png"&gt;&lt;img height="212" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/6153.2.png" width="427" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="color: #365f91;" color="#365f91"&gt;背景&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;文件下载功能所对应的服务端&lt;span style="font-family: Calibri;" face="Calibri"&gt;ASP.NET&lt;/span&gt;代码如下：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String value = "test";&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Clear();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.ClearHeaders();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Buffer = false;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.ContentType = "application/octet-stream";&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.ContentEncoding = System.Text.Encoding.UTF8;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String filename = HttpUtility.UrlEncode("中文.txt", System.Text.Encoding.UTF8);&amp;nbsp;&amp;nbsp;&amp;nbsp; //对中文文件名进行HTML转码&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.AddHeader("CONTENT-LENGTH", value.Length.ToString());&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.CacheControl = "public";&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(value);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Flush();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.End();&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="color: #365f91;" color="#365f91"&gt;环境&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;实际上此问题只在&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE6&lt;/span&gt;、&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE7&lt;/span&gt;的环境下发生，&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE8&lt;/span&gt;以上版本没有问题&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h1&gt;&lt;span style="color: #365f91;" color="#365f91"&gt;问题起因&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;如果你通过&lt;/span&gt;&lt;a href="http://www.fiddler2.com/fiddler2/"&gt;&lt;span style="font-size: small; color: #0000ff; font-family: Calibri;" color="#0000ff" size="3" face="Calibri"&gt;Fiddler&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: small;" size="3"&gt;之类的工具来抓取&lt;span style="font-family: Calibri;" face="Calibri"&gt;HTTP&lt;/span&gt;包的话，可以看到服务器段发回来的&lt;span style="font-family: Calibri;" face="Calibri"&gt;Response Header&lt;/span&gt;如下。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;HTTP/1.1 200 OK&lt;br /&gt;Server: ASP.NET Development Server/9.0.0.0&lt;br /&gt;Date: Sun, 09 Oct 2011 07:32:12 GMT&lt;br /&gt;X-AspNet-Version: 2.0.50727&lt;br /&gt;Content-Length: 4&lt;br /&gt;Content-Disposition: attachment; filename=%e4%b8%ad%e6%96%87.txt&lt;br /&gt;Cache-Control: public&lt;br /&gt;Content-Type: application/octet-stream&lt;br /&gt;Connection: Close&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;" size="3"&gt;实际上文件名是由&lt;span style="font-family: Calibri;" face="Calibri"&gt;Content-Disposition&lt;/span&gt;头里面的&lt;span style="font-family: Calibri;" face="Calibri"&gt;filename&lt;/span&gt;信息来决定的，这是一串经过&lt;span style="font-family: Calibri;" face="Calibri"&gt;URLEncode&lt;/span&gt;之后的&lt;span style="font-family: Calibri;" face="Calibri"&gt;UTF-8&lt;/span&gt;码，并不是乱码，它所对应的文字信息正是&lt;span style="font-family: Calibri;" face="Calibri"&gt;&amp;rdquo;&lt;/span&gt;中文&lt;span style="font-family: Calibri;" face="Calibri"&gt;&amp;rdquo;&lt;/span&gt;两个字。对于&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE6&lt;/span&gt;、&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE7&lt;/span&gt;来讲，在弹出&amp;ldquo;文件下载&amp;rdquo;对话框的时候&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE&lt;/span&gt;浏览器实际上已经把文件保存在临时目录，而文件名并没有做转码，所以在临时目录里面的文件名就是&lt;b&gt;&lt;span style="font-family: Calibri;" face="Calibri"&gt;%e4%b8%ad%e6%96%87[1].txt&lt;/span&gt;&lt;/b&gt;。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;如果你点击&amp;ldquo;保存&amp;rdquo;按钮的话，依然是由&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE&lt;/span&gt;浏览器在处理保存文件的工作，所以它会自动转码；而当你点击&amp;ldquo;打开&amp;rdquo;按钮的时候，&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE&lt;/span&gt;浏览器只是负责通知相应的应用程序来打开临时目录里的文件，所以我们就看到了文件名在记事本里面显示为乱码的现象。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;span style="color: #365f91;" color="#365f91"&gt;解决办法&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;&lt;b&gt;我们所推荐的方式是升级到&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE8&lt;/span&gt;&lt;/b&gt;&lt;b&gt;或者以上版本。&lt;/b&gt;如果不升级，针对&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE6&lt;/span&gt;没有任何办法，针对&lt;span style="font-family: Calibri;" face="Calibri"&gt;IE7&lt;/span&gt;可以采取以下方法。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;1)&amp;nbsp;&amp;nbsp;&amp;nbsp; 下载最新的IE累积补丁。可以先访问&lt;a href="http://technet.microsoft.com/en-us/cc264855.aspx"&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;http://technet.microsoft.com/en-us/cc264855.aspx&lt;/span&gt;&lt;/a&gt;找到所有的最新安全补丁。&lt;/p&gt;
&lt;p&gt;注意：请访问英文网站，因为中文网站有时候可能没有及时更新&lt;/p&gt;
&lt;p&gt;从列表里面找到Cumulative Security Update for Internet Explorer，如下图&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/1425.3.png"&gt;&lt;img height="257" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/1425.3.png" width="533" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;进入相关链接(在此时最新的IE补丁是Microsoft Security Bulletin MS11-057)，找到你的操作系统所对应的版本，比如我XP SP3的机器所下载的就是IE7-WindowsXP-KB2559049-x86-ENU.exe&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"&gt;2)&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 用以下命令来打补丁&lt;br /&gt;&lt;b&gt;IE7-WindowsXP-KB2559049-x86-ENU.exe /b:sp3qfe&lt;/b&gt;&lt;br /&gt;注意：由于我的是XP SP3，所以/b后面对应的是sp3qfe；如果你是SP2的机器，就要用sp2qfe&lt;/p&gt;
&lt;p&gt;3)&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;打完补丁添加以下注册表键值&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_ALLOW_LONG_INTERNATIONAL_FILENAMES]&lt;br /&gt;"iexplore.exe"=dword:00000001&lt;br /&gt;&lt;span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"&gt;4)&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 重起机器再测试&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Zhixing From APGC DSI Team&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10223671" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IE/">IE</category></item><item><title>在SharePoint Web应用中访问Session对象时发生System.NullReferenceException异常</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/09/13/sharepoint-web-session-system-nullreferenceexception.aspx</link><pubDate>Tue, 13 Sep 2011 02:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10209696</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10209696</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/09/13/sharepoint-web-session-system-nullreferenceexception.aspx#comments</comments><description>&lt;p align="left"&gt;我们有个客户在SharePoint Web应用中集成自定义的代码到时，经常遇到System.NullReferenceException异常。通常来说，如果程序配置成了Web Garden或者非Session Affinity的负载均衡，现象容易出现。&lt;/p&gt;
&lt;p align="left"&gt;但这次情况有所不同。&lt;/p&gt;
&lt;p align="left"&gt;通过.NET异常捕获，发现它是在访问Session对象的时候发生的。&lt;/p&gt;
&lt;table style="background-color: #d8dede;" cellspacing="0" cellpadding="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="599"&gt;
&lt;p align="left"&gt;&lt;span style="font-size: small;" size="3"&gt;000007ff`00fc2067 e8d4bb58ec call system_web_ni+0x25dc40 (000007fe`ed54dc40) (System.Web.HttpContext.get_Current(), mdToken: 060003c6)&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-size: small;" size="3"&gt;000007ff`00fc206c 803800 cmp byte ptr [rax],0&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-size: small;" size="3"&gt;000007ff`00fc206f 488bc8 mov rcx,rax&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-size: small;" size="3"&gt;000007ff`00fc2072 e8511453ec call system_web_ni+0x2034c8 (000007fe`ed4f34c8) (System.Web.HttpContext.get_Session(), mdToken: 060003e2)&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-size: small;" size="3"&gt;000007ff`00fc2077 48bb98c6a37f01000000 mov rbx,17FA3C698h&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-size: small;" size="3"&gt;000007ff`00fc2081 488b13 mov rdx,qword ptr [rbx]&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-size: small;" size="3"&gt;&amp;gt;&amp;gt;&amp;gt; 000007ff`00fc2084 803800 cmp byte ptr [rax],0&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p align="left"&gt;代码片段如下：&lt;/p&gt;
&lt;p align="left"&gt;HttpContext.Current.Session["userdata"] = "123";&lt;/p&gt;
&lt;p align="left"&gt;为了解决这类问题，我们在Web.Config中显式地将EnableSessionState设为True。&lt;/p&gt;
&lt;p align="left"&gt;&amp;lt;%@ Page EnableSessionState="True" %&amp;gt;&lt;/p&gt;
&lt;p align="left"&gt;并确保所有相关的单独页面不在页面的级别设置这个值为False。之后，问题依然发生，在memory dump中，System.Web.SessionState.InProcSessionState对象不再出现。&lt;/p&gt;
&lt;p align="left"&gt;再一次检查了SharePoint的Web.Config文件，发现ASP.NET的session模块被注释掉了：&lt;/p&gt;
&lt;p align="left"&gt;&amp;lt;!-- &amp;lt;add name="Session" type="System.Web.SessionState.SessionStateModule"/&amp;gt; --&amp;gt;&lt;/p&gt;
&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="left"&gt;结论&lt;/p&gt;
&lt;p align="left"&gt;==========&lt;/p&gt;
&lt;p align="left"&gt;对于当前的SharePoint Web应用，Session对象是默认不可访问的，因为SharePoint应用会移除Session模块，并设置EnableSessionState为False。当把Session模块加回去，并在Web.Config中设置EnableSessionState为True后，抛System.NullReferenceException异常的问题就解决了。&lt;/p&gt;
&lt;p align="left"&gt;Freist from APGC DSI Team&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10209696" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/ASP-NET/">ASP.NET</category></item><item><title>匿名远程访问COM+应用时被拒绝访问的问题</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/08/29/com.aspx</link><pubDate>Mon, 29 Aug 2011 03:23:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10201406</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10201406</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/08/29/com.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;有个客户在一个Win2k3的域下建立了一个COM+应用服务器，而客户端是一个工作组机器。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;为了重现这个场景，我们按照以下的方式，允许以匿名的方式访问调用COM+应用：&lt;a href="http://blogs.msdn.com/b/asiatech/archive/2009/05/04/how-to-call-com-remotely-with-anonymous-user.aspx"&gt;如何以匿名方式远程调用COM+&lt;/a&gt;，但还是在客户端出现了拒绝访问的错误。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;在网络监视器中显示了拒绝访问错误（status=0x5）被返回到服务端。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/3348.COM_2B00_E.jpg"&gt;&lt;img alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/3348.COM_2B00_E.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;客户用很多客户端在远程调用这个COM+应用，不能把它们全添加到这个域里。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;我们通过以下方式进行一个快速的测试：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;1.在两台机器上创建相同的用户名和密码。将COM+认证从&amp;ldquo;交互用户（Interactive User）&amp;rdquo;改变为这个测试账号。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;2.在COM+应用服务器端，启用机器上的安全日志。在本地安全策略-&amp;gt;本地策略-&amp;gt;审计策略下，启用账号登录事件和登录事件的错误审计&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;在一个域控制器替代本地安全策略的情况下，我们需要检查域控制器安全策略。之后做一个&amp;rdquo;gpupdate /force&amp;rdquo;。做这个就是为了确保在安全日志里生成合适的事件日志项。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;3.重演一遍这个问题，发现安全日志里有这个类型的错误：&lt;/span&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" align="left" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="329"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Event Type: Failure Audit&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Event Source: Security&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Event Category: Logon/Logoff &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Event ID: 534&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Description:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Logon Failure:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Reason: The user has not been granted the requested&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;logon type at this machine&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;User Name: Domain Test User account&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Logon Type: 8&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Logon Process: Advapi&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;这里的登陆类型（Logon Type）8表示&amp;ldquo;通过网络访问此电脑&amp;rdquo;的用户权限被禁止。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;4.检查Win2K3域，发现客户未被赋予普通域用户&amp;ldquo;通过网络访问此电脑&amp;rdquo;的权限。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;为了修正这个错误，我们在域控制器（DC）上创建了一个测试组织单位（OU），并将这个COM+应用服务器移到测试组织单位（OU）中，确保应用于此的域组策略没有定义&amp;ldquo;通过网络访问此电脑&amp;rdquo;的用户权限。然后在这个COM+应用服务器中，打开GPEDIT.MSC，进入本地安全策略-&amp;gt;本地策略-&amp;gt;用户权限，给所有人（everyone）&amp;ldquo;通过网络访问此电脑&amp;rdquo;的权限。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;这个方案最终可以运行正常的。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Freist from APGC DSI Team&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10201406" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/COM_2B00_/">COM+</category></item><item><title>在预编译 (Pre-Compiled) 的ASP.NET应用中页面设置失效的问题</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/08/29/pre-compiled-asp-net.aspx</link><pubDate>Mon, 29 Aug 2011 02:47:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10201400</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10201400</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/08/29/pre-compiled-asp-net.aspx#comments</comments><description>&lt;p align="left"&gt;我的客户有一个验证视图（viewstate）MAC失败的问题。作为应急措施，他想在找出最终的解决方案之前，禁用视图MAC验证。然而当他在配置文件中添加了如下的设置后，还是有问题。&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&amp;lt;pages validateRequest="false" enableEventValidation="false" enableViewStateMac="false" viewStateEncryptionMode="Never"&amp;gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;客户的应用是一个预编译 (Pre_compiled) 的ASP.NET应用，且可更新(updateable)的选项被禁用。看了由编译器通过上述设置生成的代码后，我们发现这些设置是硬编码。所以这意味着仅仅简单地在web.config里添加上述设置，并不会影响预编译的应用。为了使其生效，必须重新编译整个应用。&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&amp;nbsp;[DebuggerNonUserCode]&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;private void __BuildControlTree(default_aspx __ctrl)&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;{&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;b&gt;&lt;i&gt;__ctrl.EnableViewStateMac = false;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;b&gt;&lt;i&gt;__ctrl.EnableEventValidation = false;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;b&gt;&lt;i&gt;__ctrl.ViewStateEncryptionMode = ViewStateEncryptionMode.Never;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p align="left"&gt;这是一个By-Design的行为。&lt;/p&gt;
&lt;p align="left"&gt;ASP.NET预编译概述如下：&lt;/p&gt;
&lt;p align="left"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb398860.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb398860.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p align="left"&gt;Wei Zhao from AGPC DSI Team&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10201400" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/ASP-NET/">ASP.NET</category></item><item><title>委托非管理员账号回收IIS 7远程应用池的问题</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/08/29/iis-7.aspx</link><pubDate>Mon, 29 Aug 2011 02:43:06 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10201398</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10201398</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/08/29/iis-7.aspx#comments</comments><description>&lt;p&gt;最近客户频繁问到的一个问题是，当用户没有获得管理员权限时，是否能远程地回收一个IIS主机上的应用池。不幸的是，应用池的回收需要管理员权限才能运行。但是，通过使用MSDeploy，我们能设定recycleAPP provider作为委托，并将其运行在提升后的管理员权限下。然后，通过使用一个本地的标准用户账号或者一个IIS管理员账号，我们能在远程调用recylceApp provider，通过这个提升了权限的recycleApp provider，只要此用户在IIS里有应用池的访问权限，就能远程地回收那些应用池了。&lt;/p&gt;
&lt;p&gt;可以通过以下步骤解决此问题：&lt;/p&gt;
&lt;p&gt;1) 安装或确认IIS管理服务被激活。&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/0184.RMIIS1.jpg"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/0383.RMIIS1.jpg"&gt;&lt;img height="69" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/0383.RMIIS1.jpg" width="359" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2) 安装服务器和远程机器上最新版本的Web Deploy。相关资料见： &lt;a href="http://www.iis.net/download/WebDeploy"&gt;http://www.iis.net/download/WebDeploy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3) 在服务器端的IIS中，选择管理服务。勾选&amp;ldquo;启用远程连接&amp;rdquo;，如果管理服务（WMSVC）正在停止状态，就启动它。&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/6471.RMIIS2.jpg"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7752.RMIIS2.jpg"&gt;&lt;img height="145" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7752.RMIIS2.jpg" width="583" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4) 还是在服务器端，选择管理服务委托，然后选择recycleApp provider。我在IIS的机器里建立了一个管理员账号，叫做Recycler，它将得到提升的权限，以回收应用池。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/4263.RMIIS3.jpg"&gt;&lt;img height="398" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/4263.RMIIS3.jpg" width="338" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/0131.RMIIS3.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;5) 还是在服务器端，选择&amp;ldquo;IIS管理员用户&amp;rdquo;并添加所需的用户。在此例中，我添加了IISUser1。现在，到你所希望被允许执行远程回收的站点，在行为面板中选择&amp;ldquo;IIS管理员权限&amp;rdquo;和&amp;ldquo;允许用户&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/5661.RMIIS4.jpg"&gt;&lt;img height="93" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/5661.RMIIS4.jpg" width="260" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/1884.RMIIS5.jpg"&gt;&lt;img height="107" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/1884.RMIIS5.jpg" width="487" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/8306.RMIIS4.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/2500.RMIIS5.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6) 最后，我们现在可以从远程机器运行msdeploy命令进行测试。&lt;/p&gt;
&lt;p&gt;msdeploy.exe -verb:sync -source:recycleApp -dest:recycleApp="Default Web Site",wmsvc=remote-computer,userName=IISManagerUserName,Password=IISManagerUserPassword,recycleMode="RecyleAppPool" &amp;ndash;allowUntrusted&lt;/p&gt;
&lt;p&gt;对于我们的例子，我们将运行如下：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7608.RMIIS6.jpg"&gt;&lt;img alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7608.RMIIS6.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注：如果远程机器上没有合法证书，请使用-allowUntrusted标记。这能忽略那些证书错误。&lt;/p&gt;
&lt;p&gt;更多关于Web Deploy recycleApp provider的信息见：&lt;a href="http://technet.microsoft.com/en-us/library/ee522997(WS.10).aspx"&gt;http://technet.microsoft.com/en-us/library/ee522997(WS.10).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;顺带一提，在某些情境，即使你所有配置都正确，你也可能在运行命令时看到如下的信息。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/1805.RMIIS7.jpg"&gt;&lt;img height="56" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/1805.RMIIS7.jpg" width="452" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/3348.RMIIS7.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我有一个客户遇到了这个错误，通过测试能够按下面所述的步骤重现。如果没有安装IIS管理服务角色，就安装msdeploy包；或者当msdeploy在服务器上被激活，而管理服务角色被删了然后重装，缺少必要的handle。要解决此问题，只需重装msdeploy即可。&lt;/p&gt;
&lt;p&gt;Matthew from APGC DSI Team&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10201398" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category></item><item><title>IE访问IIS7.5架设的需Windows认证的网站时出现不停弹框的问题</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/08/03/ie-iis7-5-windows.aspx</link><pubDate>Wed, 03 Aug 2011 05:35:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10192297</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10192297</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/08/03/ie-iis7-5-windows.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;这是一个安装了&lt;span face="Calibri"&gt;IIS&lt;/span&gt;的&lt;span face="Calibri"&gt;Windows 2008&lt;/span&gt;系统，它已运行了一些&lt;span face="Calibri"&gt;Sharepoint&lt;/span&gt;站点。这些&lt;span face="Calibri"&gt;Sharepoint&lt;/span&gt;站点使用&lt;span face="Calibri"&gt;Windows&lt;/span&gt;认证，且他们都正常运行。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;现在在此服务器上部署了一个新的Web站点，并启用了Windows认证（采用内核态），但当通过&lt;a href="http://mywebserver:8080/"&gt;HTTP://MyWebServer:8080&lt;/a&gt;或&lt;a href="http://MyWebServer.MyDomain.com:8080"&gt;HTTP://MyWebServer.MyDomain.com:8080&lt;/a&gt;访问此站点时，IE会不停地请求认证。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;首先，我们用域认证信息（&lt;span size="3"&gt;domain credentials）测试了基本认证（basic authentication），它是成功的。然后我们启用了登陆事件的审查（audit）&lt;/span&gt;功能；不幸的是，不管是否成功进入了Web站点，我们都没能发现任何登陆事件的记录。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;为了找出与此有关的更多信息，我们启用了IIS FREB跟踪功能，发现&amp;ldquo;IIS Web Core&amp;rdquo;设置了401状态，其错误信息是&amp;ldquo;拒绝访问&amp;rdquo;。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/3566.401.jpg"&gt;&lt;img alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/3566.401.jpg" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/1325.IE1.jpg"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;现在，我们不得不回来看看对Kerberos纠错最有用的信息&amp;mdash;&amp;mdash;网络监视跟踪记录。从捕获的信息来看，我们确认了Kerberos错误是&lt;b&gt;KRB_AP_ERR_MODIFIED&lt;/b&gt;&lt;b&gt;。&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;有两个引发该错误的常见原因：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;1. 错误的DNS设定&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;2. 客户端发送的ticket被用不同的密钥加密/解密。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;我们用netmon确认了DNS的运行在意料之中。我们用Ldp工具审查SPN，当查询SPN时得到了如下的结果&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;i&gt;Dn: CN=&lt;b&gt;MyWebServer&lt;/b&gt;,&amp;hellip;&amp;hellip;..&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;i&gt;&amp;hellip;&amp;hellip;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;i&gt;servicePrincipalName (11): &lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;i&gt;&amp;hellip;.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;&lt;i&gt;HOST/MyWebServer.MyDomain.com&lt;/i&gt;&lt;/b&gt;&lt;i&gt;;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;&lt;i&gt;HOST/MyWebServer&lt;/i&gt;&lt;/b&gt;&lt;i&gt;; &lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;i&gt;&amp;hellip;.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;i&gt;Dn: CN=&lt;b&gt;SPS_Service_Account&lt;/b&gt;&amp;hellip;&amp;hellip;.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;i&gt;&amp;hellip;.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;i&gt;servicePrincipalName (18): &lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;i&gt;&amp;hellip;&amp;hellip;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;&lt;i&gt;HTTP/ MyWebServer.MyDomain.com;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;&lt;i&gt;HTTP/ MyWebServer&lt;/i&gt;&lt;/b&gt;&lt;i&gt;; &lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;i&gt;&amp;hellip;&amp;hellip;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;我们能看到，HTTP/MyWebServer是SharePoint服务里注册的账号（被用来运行SharePoint应用池），运行在内核态认证的IIS 7以上服务器是不需要它的。然后回IIS MMC查看，我们发现所有SPS站点都采用用户态的Windows认证，它需要把SPN账号注册到应用池认证中。这就是SPS站点以Windows认证的方式运行的原因。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;新添加的站点使用用户态Windows认证，需要在机器账号中注册的SPN的账号。这与SharePoint站点产生了冲突。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;这解释了为何我们得到了&lt;b&gt;KRB_AP_ERR_MODIFIED&lt;/b&gt;错误。当IE访问&lt;a href="http://mywebserver:8080/"&gt;http://MyWebServer:8080&lt;/a&gt;时，请求HTTP/MyWebServer的ticket，它被注册在SharePoint服务的账号里。IE把该ticket传递给Web服务器。在服务器端，IIS尝试使用机器账号对该ticket解密。这必然会失败，因为它被另一个密钥解密。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;为了解决此问题：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;1. 我们给新添加的站点，如MySite，使用host头，将其加到站点绑定中。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;2．注册SPN HTTP/MySite的本机账号&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;3．现在，我们使用&lt;a href="http://mysite/"&gt;http://MySite&lt;/a&gt;访问此Web站点。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;随后，我们做以下SPN的配置：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;MyWebServer:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;HTTP/MySite&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;HTTP/MySite.MyDomain.com&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;HOST/ MyWebServer&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;HOST/ MyWebServer.MyDomain.com&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;SPS service account:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;HTTP/ MyWebServer&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;HTTP/ MyWebServer. MyDomain.com&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;如下配置IIS:&lt;/span&gt;&lt;/p&gt;
&lt;table style="width: 643px;" cellspacing="0" cellpadding="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="109"&gt;&lt;/td&gt;
&lt;td valign="top" width="228"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;SPS 站点&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="306"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;MySite&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="109"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;SPN&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="228"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;HTTP/MyWebServer&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;注册在SPS服务账号中&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="306"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;HTTP/MySite&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;注册在机器账号MyWebServer中&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="109"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;绑定&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="228"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;所有可用的IP&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;无主机名&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="306"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;所有可用的IP&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;主机名: MySite&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="109"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Windows&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;认证&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="228"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;用户态&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="306"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;内核态&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="109"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;应用池认证&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="228"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;SPS 服务账号&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="306"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;随意&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="109"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;如何访问&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="228"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;a href="http://mywebserver/"&gt;HTTP://MyWebServer&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="306"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;a href="http://mysite/"&gt;HTTP://MySite&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;顺带一提，若我们想用内核态认证（建议使用），并把SPN注册在应用池认证中，我们可以设置useAppPoolCredentials为true。这里有一个配置的例子。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;system.webServer&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;security&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;authentication&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;windowsAuthentication enabled="true" useKernelMode="true" &lt;b&gt;useAppPoolCredentials="true"&lt;/b&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/authentication&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/security&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/system.webServer&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Wei Zhao from DSI team&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10192297" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/ASP-NET/">ASP.NET</category></item><item><title>如何解决请求超时的HttpException异常 (ASP.NET 2.0 32-bit)</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/07/19/httpexception-asp-net-2-0-32-bit.aspx</link><pubDate>Tue, 19 Jul 2011 06:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10187768</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10187768</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/07/19/httpexception-asp-net-2-0-32-bit.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;注意：&lt;/b&gt;下列的步骤适用于ASP.NET 2.0(32 bit) 。没有测试过其他版本的ASP.NET。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;症状&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;========&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;应用事件记录里可能出现下方的警告文字：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7178.Timeout.jpg"&gt;&lt;img height="352" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7178.Timeout.jpg" width="319" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;这种问题基本上发生在当ASP.NET的服务器端执行请求的时间超过所允许的最大时间之时。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;最大超时时间可以在配置文件的httpRuntime元素的executionTimeout属性中设置。（在.Net 2.0中，默认值是110秒&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;如何重现&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;===============&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;创建一个ASPX页面，命名为sleep.aspx。它将睡眠20秒：&lt;/span&gt;&lt;/p&gt;
&lt;table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="590"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;%@ Page Language="C#" %&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;%@ import Namespace="System.Diagnostics" %&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;script runat="server"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;protected void Page_Load(object sender, EventArgs e)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;DateTime time = DateTime.Now;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Response.Write(String.Format("Time: {0}:{1}:{2}", time.Hour, time.Minute, time.Second) +&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;"\tCurrent process: " + Process.GetCurrentProcess().Id.ToString());&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Response.Write("&amp;lt;BR&amp;gt;");&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Response.Write(String.Format("This application is running in {0}", System.Environment.Version.ToString()));&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;System.Threading.Thread.Sleep(20000);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;title&amp;gt;ASP.NET Simple Page&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;body bgcolor="#FFFFFF"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;p&amp;gt;&amp;lt;asp:label id="Message" runat="server" /&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;创建一个web.config文件，将其放在与sleep.aspx同一目录下。在此文件中设置最大超时时间为5秒。&lt;/span&gt;&lt;/p&gt;
&lt;table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="590"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;system.web&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;httpRuntime executionTimeout="5"/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/system.web&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;使用你的浏览器访问sleep.aspx，过一会儿你就将收到错误信息：&amp;ldquo;[HttpException (0x80004005): Request timed out.]&amp;rdquo;。相关的警告信息也将出现在事件日志里。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;注意：&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;你可能发现这个错误信息&amp;mdash;&amp;mdash;&amp;ldquo;[HttpException (0x80004005): Request timed out.]&amp;rdquo;&amp;mdash;&amp;mdash;并没有在5秒后立即出现。ASP.NET在内部使用一个定时器（System.Threading.Timer 的一个实例）来调用取消请求的操作。这个定时器15秒触发一次。因此实际上请求可能在5秒到20秒之间的任意时间发生超时。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;请参考&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;a href="http://blogs.msdn.com/b/pedram/archive/2007/10/02/how-the-execution-timeout-is-managed-in-asp-net.aspx"&gt;http://blogs.msdn.com/b/pedram/archive/2007/10/02/how-the-execution-timeout-is-managed-in-asp-net.aspx&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;如何捕获&amp;ldquo;&lt;/b&gt;&lt;b&gt;[HttpException (0x80004005): Request timed out.]&lt;/b&gt;&lt;b&gt;&amp;rdquo;的&lt;/b&gt;&lt;b&gt;转储文件&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;===============================================================&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;当发生HttpException异常时，人们常犯的一种*&lt;b&gt;错误&lt;/b&gt;*是设置一个debugger来监视HttpException异常，并生成转储文件。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;实际上当发生请求超时之时，ASP.NET尽管显示给用户看地是HttpException，但是抛出的是&lt;b&gt;ThreadAbortException&lt;/b&gt;&lt;b&gt;y&lt;/b&gt;&lt;b&gt;异常。&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;为所有ThreadAbortException异常生成转储文件是不可行的。为了解决这个问题，我们必须在ThreadAboutException异常被抛出设定断点。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;我用如下的步骤来捕获错误信息&amp;ldquo;[HttpException (0x80004005): Request timed out.]&amp;rdquo;的转储文件。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;将下方的文本保存成aspnet_timeout.cfg，放在c:\目录下。&lt;/span&gt;&lt;/p&gt;
&lt;table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="578"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;ADPlus Version='2'&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;!-- Configuring ADPlus to log all first chance exceptions --&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;!-- Will still create full dump for any type of second chance exceptions --&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;KeyWords&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;keyword Name="loadbysos"&amp;gt; .loadby sos mscorwks &amp;lt;/keyword&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;keyword Name="GetJIT"&amp;gt; !name2ee System.web.dll System.Web.RequestTimeoutManager.CancelTimedOutRequests &amp;lt;/keyword&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;keyword Name="JITAddress"&amp;gt; .foreach /pS 0n12 ( record {!name2ee System.web.dll System.Web.RequestTimeoutManager.CancelTimedOutRequests}) { r $t1= ${record}; bp $t1+0x172 ".dump /ma /u ${AdpDumpDirEsc}\\Full Request timed out ${AdpProcName}_.dmp;g"; .printf"*breakpoint list*\n"; bl} &amp;lt;/keyword&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/KeyWords&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;Settings&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;Option&amp;gt; NoDumpOnFirst &amp;lt;/Option&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;RunMode&amp;gt; CRASH &amp;lt;/RunMode&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/Settings&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;PreCommands&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;DebugActions&amp;gt; loadbysos; GetJIT; JITAddress &amp;lt;/DebugActions&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/PreCommands&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&amp;lt;/ADPlus&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;用*&lt;b&gt;管理员权限&lt;/b&gt;&lt;b&gt;*&lt;/b&gt;打开命令行，转到Windows的Debugging工具的安装目录（默认路径为%programfiles%\Debugging Tools for Windows (x86)）&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;运行以下命令：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;%windir%\system32\inetsrv\appcmd list wp&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;你将得到发生问题的应用池的工作进程的PID。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;然后运行以下命令：&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;adplus.exe -c c:\aspnet_timeout.cfg -o &amp;lt;output folder&amp;gt; -p &amp;lt;pid of problematic apppool&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;其中&amp;lt;output foder&amp;gt;是你想存放转储文件的存在的目录。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;这样就会跳出一个cdb.exe窗口。请保持改窗口运行，因为它将会检测有问题的应用池。如果发生&amp;ldquo;请求超时&amp;rdquo;，他就会&lt;b&gt;自动&lt;/b&gt;生成转储文件.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;如何通过&lt;/b&gt;&lt;b&gt;转储文件找到是哪个操作引发的&amp;ldquo;请求超时&amp;rdquo;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;&lt;b&gt;===========================================================&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;使用windbg打开转储文件。然后加载sos&lt;/span&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="578"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0:025&amp;gt; .loadby sos mscorwks&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;转储（dump）当前线程堆里的所有对象，你将发现System.Threading.Thread对象:&lt;/span&gt;&lt;/p&gt;
&lt;table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="590"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0:025&amp;gt; !dso&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;OS Thread Id: 0x444 (25)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;ESP/REG Object Name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;eax 05baf5b0 System.Threading.Thread&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;ebx 05baf5b0 System.Threading.Thread&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;ecx 01c4f300 System.Web.RequestTimeoutManager+RequestTimeoutEntry&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;esi 01c4f300 System.Web.RequestTimeoutManager+RequestTimeoutEntry&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff03c 05b33ad4 System.Web.Util.DoubleLinkList&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff040 01c4b508 System.Collections.ArrayList&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff044 05b3397c System.Web.RequestTimeoutManager&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff064 01c4aa94 System.Threading.ContextCallback&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff068 05b3397c System.Web.RequestTimeoutManager&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff088 05b33b30 System.Threading._TimerCallback&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff094 01c4b4e4 System.Threading.ExecutionContext&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff0a0 01c4b4e4 System.Threading.ExecutionContext&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff0a4 05b33b30 System.Threading._TimerCallback&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff0b0 05b33b30 System.Threading._TimerCallback&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff1c0 01c4b090 System.Collections.Hashtable+HashtableEnumerator&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff25c 05b33b30 System.Threading._TimerCallback&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0f1ff260 05b33b30 System.Threading._TimerCallback&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;转储（Dump） System.Threading.Thread对象中的信息，你将找到DONT_USE_InternalThread字段:&lt;/span&gt;&lt;/p&gt;
&lt;table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="590"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0:025&amp;gt; !do 05baf5b0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Name: System.Threading.Thread&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;MethodTable: 0e3c10f8&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;EEClass: 0e17d994&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Size: 56(0x38) bytes&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;(C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Fields:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;MT Field Offset Type VT Attr Value Name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3b1f08 400063f 4 ....Contexts.Context 0 instance 05b20528 m_Context&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3bd818 4000640 8 ....ExecutionContext 0 instance 01c4d2c8 m_ExecutionContext&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3c0b24 4000641 c System.String 0 instance 00000000 m_Name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3c0f88 4000642 10 System.Delegate 0 instance 00000000 m_Delegate&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3ba220 4000643 14 System.Object[][] 0 instance 00000000 m_ThreadStaticsBuckets&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3c2cc0 4000644 18 System.Int32[] 0 instance 00000000 m_ThreadStaticsBits&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3c3720 4000645 1c ...ation.CultureInfo 0 instance 00000000 m_CurrentCulture&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3c3720 4000646 20 ...ation.CultureInfo 0 instance 00000000 m_CurrentUICulture&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3c0740 4000647 24 System.Object 0 instance 00000000 m_ThreadStartArg&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3c33ec 4000648 28 System.IntPtr 1 instance &lt;span style="background-color: #ffff00;"&gt;1915fa8 DONT_USE_InternalThread&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3c2d70 4000649 2c System.Int32 1 instance 2 m_Priority&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e3c2d70 400064a 30 System.Int32 1 instance 5 m_ManagedThreadId&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0e399740 400064b 16c ...LocalDataStoreMgr 0 shared static s_LocalDataStoreMgr&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;运行 !threads 命令列出所有线程，你将发现与引发&amp;ldquo;请求超时&amp;rdquo;有关的线程（它的操作系统线程ID是dd4）：&lt;/span&gt;&lt;/p&gt;
&lt;table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="590"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0:025&amp;gt; !threads&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;ThreadCount: 7&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;UnstartedThread: 0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;BackgroundThread: 7&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;PendingThread: 0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;DeadThread: 0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Hosted Runtime: no&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;PreEmptive GC Alloc Lock&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;ID OSID ThreadOBJ State GC Context Domain Count APT Exception&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;8 1 1400 018ad710 8220 Enabled 05baea40:05baf074 018ac928 0 Ukn&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;19 2 132c 018b8658 b220 Enabled 00000000:00000000 018ac928 0 MTA (Finalizer)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;22 3 16ec 018d7718 80a220 Enabled 00000000:00000000 018ac928 0 MTA (Threadpool Completion Port)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;23 4 830 018d7ee8 1220 Enabled 00000000:00000000 018ac928 0 Ukn&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;24 5 &lt;span style="background-color: #ffff00;"&gt;dd4&lt;/span&gt; &lt;span style="background-color: #ffff00;"&gt;01915fa8&lt;/span&gt; 380b220 Enabled 01c57b44:01c58fe8 018d8590 1 MTA (Threadpool Worker)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;25 6 444 01923d00 180b220 Disabled 01c4b604:01c4d008 018d8590 0 MTA (Threadpool Worker)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;14 7 180 01933348 880a220 Enabled 00000000:00000000 018ac928 0 MTA (Threadpool Completion Port)&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;切换到那个有问题的线程，列出调用栈。你将发现sleep函数:&lt;/span&gt;&lt;/p&gt;
&lt;table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="590"&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0:025&amp;gt; ~~[dd4]s&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;eax=0000002d ebx=00000000 ecx=00004e20 edx=00000000 esi=0edced40 edi=00000000&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;eip=777f96f4 esp=0edcecfc ebp=0edced64 iopl=0 nv up ei pl nz na po nc&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;ntdll!KiFastSystemCallRet:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;777f96f4 c3 ret&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0:024&amp;gt; !clrstack&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;OS Thread Id: 0xdd4 (24)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;ESP EIP&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcee4c 777f96f4 [HelperMethodFrame: 0edcee4c] System.Threading.Thread.&lt;span style="background-color: #ffff00;"&gt;SleepInternal&lt;/span&gt;(Int32)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edceea0 015806e1 &lt;span style="background-color: #ffff00;"&gt;ASP.sleep_aspx.Page_Load&lt;/span&gt;(System.Object, System.EventArgs)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edceedc 6d59a7ff System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr, System.Object, System.Object, System.EventArgs)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edceeec 62562544 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(System.Object, System.EventArgs)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcef00 6255ba44 System.Web.UI.Control.OnLoad(System.EventArgs)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcef14 6255ba83 System.Web.UI.Control.LoadRecursive()&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcef2c 62557b34 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf084 62557764 System.Web.UI.Page.ProcessRequest(Boolean, Boolean)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf0bc 62557691 System.Web.UI.Page.ProcessRequest()&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf0f4 62557626 System.Web.UI.Page.ProcessRequestWithNoAssert(System.Web.HttpContext)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf100 62557602 System.Web.UI.Page.ProcessRequest(System.Web.HttpContext)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf114 01580455 ASP.sleep_aspx.ProcessRequest(System.Web.HttpContext)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf118 6255dad6 System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf14c 6253132c System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf18c 62b2583f System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf190 62b1b96c [InlinedCallFrame: 0edcf190]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf230 62b06071 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf2a0 62bdb5e6 System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf2a4 62bdb7d7 [InlinedCallFrame: 0edcf2a4]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf7f8 005522b4 [NDirectMethodFrameStandalone: 0edcf7f8] System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf808 62bdb67d System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf88c 62bdb7d7 System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;0edcf98c 005522b4 [ContextTransitionFrame: 0edcf98c]&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;"&gt;Xinjin from APAC DSI&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; font-family: verdana,geneva;" face="Calibri" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10187768" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/ASP-NET/">ASP.NET</category></item><item><title>为什么第一次访问ASP.NET应用会很慢</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/04/25/asp-net.aspx</link><pubDate>Mon, 25 Apr 2011 02:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10157556</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10157556</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/04/25/asp-net.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;问题现象&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;==========&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;ASP.NET&lt;/i&gt;页面第一次访问的时候很慢，时间可以持续几十秒到几分钟&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;问题原因&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;==========&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;当程序里面需要调用到一些&lt;/span&gt;&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms537359(v=VS.85).aspx"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Authenticode Signed&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;的.NET Assembly的时候，它需要连接到外网来验证数字证书。当服务器是无法连接到外网时，这个校验证书的过程需要等到timeout之后才会结束。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;解决办法&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;==========&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;建议采用以下方法中的任何一种&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;让您的服务器能连接到外网&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;参考&lt;/span&gt;&lt;/span&gt;&lt;a href="http://support.microsoft.com/kb/936707"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;http://support.microsoft.com/kb/936707&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;的方法来禁止证书的验证过程&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;请同时在以下两个aspnet.config文件中加入以下内容。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet.config&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet.config&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;runtime&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;generatePublisherEvidence enabled="false"/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/runtime&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;或者参考&lt;/span&gt;&lt;/span&gt;&lt;a href="http://blogs.msdn.com/b/tom/archive/2008/10/28/web-site-stops-responding-for-15-25-seconds.aspx"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;http://blogs.msdn.com/b/tom/archive/2008/10/28/web-site-stops-responding-for-15-25-seconds.aspx&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;对"Network Service"帐号下运行的所有程序禁止证书检查&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;导入以下注册表键值并重起IIS服务&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Windows Registry Editor Version 5.00&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;[HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;"State"=dword:00023e00&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;详细分析&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;==========&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;这个时候如果我们抓取一个hang dump的话，页面所对应的managed callstack往往如下，很明显它正在加载一个Assembly&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0:022&amp;gt; !CLRStack&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;OS Thread Id: 0xeb4 (22)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Child-SP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RetAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call Site&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1c900 000007fef91747c3 System.Reflection.Assembly.InternalLoad(System.Reflection.AssemblyName, System.Security.Policy.Evidence, &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;System.Threading.StackCrawlMark ByRef, Boolean)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1c990 000007ff0141f0f9 System.Reflection.Assembly.Load(System.Reflection.AssemblyName)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1c9d0 000007fef9fdd502 Microsoft.SharePoint.Portal.WebControls.StringResourceManager..cctor()&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1db50 000007ff014135e2 Microsoft.SharePoint.Portal.WebControls.MySiteLinkUserControl.SetControl()&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1dce0 000007fef398e04f Microsoft.SharePoint.Portal.WebControls.MySiteLinkUserControl.OnInit(System.EventArgs)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1de80 000007fef398f3af System.Web.UI.Control.InitRecursive(System.Web.UI.Control)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1dee0 000007ff014133c8 System.Web.UI.Control.AddedControl(System.Web.UI.Control, Int32)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1df50 000007ff0134115e Microsoft.SharePoint.WebControls.DelegateControl.AddControlResilient(System.Web.UI.Control)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1dff0 000007fef398fb22 Microsoft.SharePoint.WebControls.DelegateControl.CreateChildControls()&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e170 000007ff01341024 System.Web.UI.Control.EnsureChildControls()&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e1d0 000007fef398e04f Microsoft.SharePoint.WebControls.DelegateControl.OnInit(System.EventArgs)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e210 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e270 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e2d0 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e330 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e390 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e3f0 000007fef398a935 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e450 000007fef398a1f0 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e520 000007fef398a11b System.Web.UI.Page.ProcessRequest(Boolean, Boolean)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e580 000007fef398a0b0 System.Web.UI.Page.ProcessRequest()&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e5e0 000007fef3991557 System.Web.UI.Page.ProcessRequest(System.Web.HttpContext)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e640 000007fef395567b System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e6f0 000007fef39634b5 System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e790 000007fef3954733 System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e840 000007fef3958a54 System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;System.Object)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e8a0 000007fef395863c System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e930 000007fef395726c System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;000000001af1e970 000007fef9fdd502 System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;其实它所要加载的Assembly名字如下&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Microsoft.SharePoint.Portal.intl&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;此线程所对应的native callstack如下&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0:022&amp;gt; k20&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Child-SP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RetAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call Site&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1a208 000007fe'fdc610ac ntdll!ZwWaitForSingleObject+0xa &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1a210 000007fe'f5dfa2fa KERNELBASE!WaitForSingleObjectEx+0x79 00000000'1af1a2b0 000007fe'f5df76fa cryptnet!CryptRetrieveObjectByUrlWithTimeout+0x263 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1a5b0 000007fe'f5df4646 cryptnet!CryptRetrieveObjectByUrlW+0x20f 00000000'1af1a7a0 000007fe'f5df9c34 cryptnet!RetrieveObjectByUrlValidForSubject+0x162 00000000'1af1a8d0 000007fe'f5df4243 cryptnet!RetrieveTimeValidObjectByUrl+0x2de 00000000'1af1a9c0 000007fe'f5df3c72 cryptnet!CTVOAgent::GetTimeValidObjectByUrl+0x2e3 00000000'1af1ab20 000007fe'f5df38ad cryptnet!CTVOAgent::GetTimeValidObject+0x7cf &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1ad00 000007fe'f5df3810 cryptnet!FreshestCrlFromCrlGetTimeValidObject+0x61 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1ad70 000007fe'f5df99fc cryptnet!CryptGetTimeValidObject+0xb0 00000000'1af1adf0 000007fe'f5df345d cryptnet!GetTimeValidCrl+0x4b7 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1af30 000007fe'f5df3f82 cryptnet!GetBaseCrl+0x7d 00000000'1af1afc0 000007fe'f5df3d58 cryptnet!MicrosoftCertDllVerifyRevocation+0x238 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1b110 000007fe'fdb157c7 cryptnet!CertDllVerifyRevocation+0x28 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1b160 000007fe'fdb1552e crypt32!VerifyDefaultRevocation+0x398 00000000'1af1b250 000007fe'fdb15c09 crypt32!CertVerifyRevocation+0x144 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1bcc0 000007fe'f9e46c27 mscorwks!PEFile::CheckSecurity+0x39b924&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1bd50 000007fe'f9e5eb5d mscorwks!PEAssembly::DoLoadSignatureChecks+0x37 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00000000'1af1bd90 000007fe'f9e52ff8 mscorwks!PEAssembly::PEAssembly+0x12d 00000000'1af1be00 000007fe'f9e40b9d mscorwks!PEAssembly::DoOpen+0x11c 00000000'1af1c130 000007fe'f9f24a3e mscorwks!PEAssembly::Open+0x71&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;从这些函数名我们知道它正在做一些证书检查之类的事情。而实际上它正在等待下面的这个线程。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0:036&amp;gt; kn&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;# Child-SP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RetAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call Site&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;00 00000000'2409e1c8 000007fe'fdc610ac ntdll!ZwWaitForSingleObject+0xa &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;01 00000000'2409e1d0 000007fe'f5d7f38e KERNELBASE!WaitForSingleObjectEx+0x79 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;02 00000000'2409e270 000007fe'f5d80a27 winhttp!IsWpadEnabledForConnectedNetworks+0x1f2 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;03 00000000'2409e340 000007fe'f5d806dc winhttp!ReadWinInetProxySettings+0x1c3 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;04 00000000'2409e3c0 000007fe'f5dfae42 winhttp!WinHttpGetIEProxyConfigForCurrentUser+0x28a &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;05 00000000'2409e510 000007fe'f5df9237 cryptnet!InetGetProxy+0x11e &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;06 00000000'2409e600 000007fe'f5df983d cryptnet!InetSendAuthenticatedRequestAndReceiveResponse+0x190 &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;07 00000000'2409f770 000007fe'f5df9d9c cryptnet!InetSendReceiveUrlRequest+0x57e&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;.....&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0:036&amp;gt; .frame 7&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;07 00000000'2409f770 000007fe'f5df9d9c cryptnet!InetSendReceiveUrlRequest+0x57e [d:\w7rtm\ds\security\cryptoapi\pki\rpor\inetsp.cpp @ 2603]&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0:036&amp;gt; dv&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hInetSession = 0x00000000'218211f0&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pwszUrl = 0x00000000'1f8abe50 "&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;a href="http://crl.microsoft.com/pki/crl/products/CSPCA.crl"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;http://crl.microsoft.com/pki/crl/products/CSPCA.crl&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dwRetrievalFlags = 1&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pCredentials = 0x00000000'00000000&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pcba = 0x00000000'2409fab0&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ppfnFreeObject = 0x00000000'2409fb38&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ppvFreeContext = 0x00000000'2409fb30&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pAuxInfo = 0x00000000'1f8abd78&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; phInetRequest = 0x00000000'00000000&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;我们可以看到，当时我们抓取dump的时候它正在尝试连接&lt;/span&gt;&lt;/span&gt;&lt;a href="http://crl.microsoft.com/pki/crl/products/CSPCA.crl"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;http://crl.microsoft.com/pki/crl/products/CSPCA.crl&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Zhi Xing - 微软APAC技术支持中心 Internet Developer Support&amp;nbsp;Team&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10157556" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/ASP-NET/">ASP.NET</category></item><item><title>如何用IIS Web Portal管理windows user password</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/04/22/iis-web-portal-windows-user-password.aspx</link><pubDate>Fri, 22 Apr 2011 02:38:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10156944</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10156944</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/04/22/iis-web-portal-windows-user-password.aspx#comments</comments><description>&lt;p&gt;大多IIS用户都可能还记得我们曾经用老的版本的IIS（例如IIS 5或者IIS 6）架设的叫做IISADMPWD的web application。这个应用对domain user更改密码很有用。可能很多人还在想既然我可以通过简单的Ctrl+Alt+Delete来更改密码，那这个还有什么用呢？我们先来看一个例子。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;IISAPDPWD in Use&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;当我不在办公室的时候必须要通过OWA来收发邮件。然而，由于我忘记更新我的密码而且它已经过期，我没有能够成功的收到重要邮件。（VPN可能能够帮我解决，但是如果我同样不能连接VPN）&lt;/p&gt;
&lt;p&gt;IT部门帮助我设置了IISADMPWD，这样我就可以进入一个页面来更改我的密码。现在OWA又恢复了正常，我也能够成功的检查到邮件！&lt;/p&gt;
&lt;p&gt;&lt;b&gt;IISAPDPWD Setup&lt;/b&gt;&lt;b&gt;（for IIS 5/6&lt;/b&gt;&lt;b&gt;）&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;下面文章可以帮助我们在IIS 5和6设置这样一个web application。&lt;/p&gt;
&lt;p&gt;http://support.microsoft.com/kb/269082 &lt;/p&gt;
&lt;p&gt;http://support.microsoft.com/kb/833734 &lt;/p&gt;
&lt;p&gt;Tony DeCock提供了一篇文章，介绍可能在此过程中碰到的各种问题。 &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://support.microsoft.com/kb/907271"&gt;http://support.microsoft.com/kb/907271&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;IISAPDPWD on IIS 7&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;IIS 7中不再有IISAPDPWD这个功能。因此在Windows Server 2008下也没有IISADMPWD目录。这样除了使用VPN，我们还有别的办法来更改密码么？事实上如果我们从Windows Server 2003 box上拿到一份IISADMPWD的copy并且把它作为一个ASP/COM应用来使用，它也是可以帮助我们来更改密码的。解决方案如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. 复制Server 2003 box到Server 2008 box，在这边我用的是C:\Windows\system32\inetsrv\Iisadmpwd on Server 2008。&lt;/li&gt;
&lt;li&gt;2. 在IISADMPWD目录下注册IISpwchg.dll文件&lt;/li&gt;
&lt;li&gt;a. 打开一个命令运行栏。&lt;/li&gt;
&lt;li&gt;b. 在Open box中，输入下述命令后按Enter：regsvr32 c:\windows\system32\inetsrv\iisadmpwd\iispwchg.dll&lt;/li&gt;
&lt;li&gt;3. 配置PasswordChangeFlags特性，注意Password Change功能必须开启：&lt;/li&gt;
&lt;li&gt;a. 打开一个命令运行栏。&lt;/li&gt;
&lt;li&gt;b. 进入C:\Inetpub\Adminscripts目录（注意IIS 6 Scripting Tools feature必须打开）&lt;/li&gt;
&lt;li&gt;c. 输入以下命令，按enter：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;cscript.exe adsutil.vbs set w3svc/passwordchangeflags &lt;i&gt;Value&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;注意这里Value为你所设置的PasswordChangeFlags的位置标识符，有如下几个数值，也可以使用它们的组合数值：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0:默认值。这个值表明当你试图更改密码的时候一定要使用安全网路连接（SSL）&lt;/li&gt;
&lt;li&gt;1：这个值允许对non-secure端口进行密码更改。如果SSL被禁用的话可以使用这个值。&lt;/li&gt;
&lt;li&gt;2：这个值禁用了密码更改功能。&lt;/li&gt;
&lt;li&gt;4：这个值禁用了密码过期提示。&lt;/li&gt;
&lt;li&gt;4. 在IISADMPWD目录下创建一个应用：&lt;/li&gt;
&lt;li&gt;a. 打开IIS Manager，左边面板右键Default Web Site节点。&lt;/li&gt;
&lt;li&gt;b. 选中Add Application。在对话框中，输入alias（我用的是IISADMPWD）和路径（C:\Windows\system32\inetsrv\Iisadmpwd）。然后选中Select来选择一个合适的application pool，点击两次OK就可以了。&lt;/li&gt;
&lt;li&gt;5. 现在就可以进入password change的页面：&lt;a href="http://%3cserver%3e/iisadmpwd/aexp4b.asp"&gt;http://&amp;lt;server&amp;gt;/iisadmpwd/aexp4b.asp&lt;/a&gt;（或者https的页面）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注释：&lt;/p&gt;
&lt;p&gt;如果只有x86版本的Server 2003，但是Server 2008却是x64版本，上诉步骤要稍作修改：首先，必须复制文件到%windir%\SysWOW64\inetsrv文件夹中，这个路径也要在之后介绍的步骤中用到。然后，application必须在一个32-bit的application pool中。&lt;/p&gt;
&lt;p&gt;微软全球技术支持中心Internet 开发者支持组&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10156944" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category></item><item><title>如何用Indexing Service来对Windows Server 2008中的IIS 7.0网站进行索引</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/04/22/indexing-service-windows-server-2008-iis-7-0.aspx</link><pubDate>Fri, 22 Apr 2011 02:31:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10156941</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10156941</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/04/22/indexing-service-windows-server-2008-iis-7-0.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;根据如下步骤进行操作：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;安装IIS 6 Management Compatibility&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;=============================&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;点击Start-&amp;gt;All Programs-&amp;gt;Administrative Tools, 之后点击ServerManager&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;在Console tree of Server Manager, 展开Roles，之后右键Web Server（IIS），点击Add Role Services&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;在Add Role Service Wizard中，选择IIS 6 management compatibility, 然后点击Next&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;按照Add Role Service Wizard中的instruction来完成安装&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;选择你要找的 web site&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;==============================&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;在Indexing MMC中右键点击你的catalog选择Properties&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;点击Tracking tab&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;在"WWW Server"下拉列表中选择web site&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;点击OK&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;如果再次打开property页面，你可以看到"WWW Server"区域还是空的，这个只是一个UI的问题。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;为验证是否选择了这个web site，检查下苏注册表的值：HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ContentIndex\Catalogs\[Catalog Name] &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;IsIdexingW3Svc&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name="OLE_LINK6"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;W3SvcInstance&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;IsIdexingW3Svc的值应该是1，W3SvcInstance应当是所选的web site instance&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;设置ContentIndexed metabase property&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;==============================&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;在windows 2003中如果想要索引一些webpage的话可以在virtual directory中选择"Index this resource"。但是在windows 2008中没有相关选项的管理界面。必须要使用下述命令：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;打开命令行，指向当前目录%systemdrive%\inetpub\adminscripts。&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;运行命令：cscript adsutil.vbs set w3svc/[web site instance]/root/[virtual director]/ContentIndexed 1&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;例如如果想开启虚拟目录MyVIR of the default web site 的"Index this resource"功能，运行cscript adsutil.vbs set w3svc/1/root/MyVIR/ContentIndexed 1&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;在开启上诉功能后，就可以重启Indexing Service，Indexing Service会自动检查IIS配置并生成catalog。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;XinJin&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;-微软全球技术支持中心Internet 开发者支持组&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10156941" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category></item><item><title>如何在IIS 6.0中使用256 bit SSL</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/04/22/iis-6-0-256-bit-ssl.aspx</link><pubDate>Fri, 22 Apr 2011 02:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10156936</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10156936</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/04/22/iis-6-0-256-bit-ssl.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3个步骤：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. 安装此修复程序&lt;a href="http://support.microsoft.com/kb/948963"&gt;http://support.microsoft.com/kb/948963&lt;/a&gt;，以支持AES128加密和AES256加密。&lt;/li&gt;
&lt;li&gt;2. Cipher suites的顺序在Windows 2003命令是固定好的， AES 128是最高优先级的，AES 256排在其后。我们只需要禁用AES 128而开启AES 256使得AES 256拥有最高的优先权。&lt;/li&gt;
&lt;li&gt;a. 在IIS6.0中打开regedit.exe的机器。&lt;/li&gt;
&lt;li&gt;b. 进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers，应该能够发现有很多子项，例如AES 128/128。&lt;/li&gt;
&lt;li&gt;c. 在子项的AES 128/128，创建一个DWORD值"启用"，将其设置为值0。这意味着我们将禁用AES 128。&lt;/li&gt;
&lt;li&gt;3. 重新启动IIS 6.0的机器。&lt;a name="_GoBack"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这对支持AES 256的Vista/Windows7机器，可以使用IE浏览IIS6.0 HTTPS网站，这里的SSL使用256位加密。 &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Xin Jin&lt;/p&gt;
&lt;p&gt;-微软全球技术支持中心Internet 开发者支持组&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10156936" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category></item><item><title>由string.IndexOf引起的ASP.Net应用挂起</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/03/02/string-indexof-asp-net.aspx</link><pubDate>Wed, 02 Mar 2011 01:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10135773</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10135773</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/03/02/string-indexof-asp-net.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="color: black; font-family: 宋体; mso-ascii-font-family: Arial; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial;" lang="ZH-CN"&gt;最近有一个有趣的案例，我们发现&lt;/span&gt;&lt;span style="color: black; font-family: 'Arial','sans-serif';"&gt;String.IndexOf&lt;/span&gt;&lt;span style="color: black; font-family: 宋体; mso-ascii-font-family: Arial; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial;" lang="ZH-CN"&gt;会造成&lt;/span&gt;&lt;span style="color: black; font-family: 'Arial','sans-serif';"&gt;ASP.Net&lt;/span&gt;&lt;span style="color: black; font-family: 宋体; mso-ascii-font-family: Arial; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial;" lang="ZH-CN"&gt;应用挂起。&lt;/span&gt;&lt;span style="color: black; font-family: 'Arial','sans-serif';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&lt;span style="font-size: small;"&gt;问题描述：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;通常这种&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;ASP.Net&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;应用程序将挂起，因此&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;IIS&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;工作进程需要重新启动使得应用程序能够正常运行。即使当负载比较低的时候也会发生这种情况。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&lt;span style="font-size: small;"&gt;排除故障：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;像以前一样，我们抓获挂起&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;dump&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;，我们可以看到几乎请求都会被&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;GC&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;阻止。下面是一个示例调用堆栈。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;ntdll!ZwWaitForSingleObject&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;kernel32!WaitForSingleObjectEx&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;mscorwks!CLREventWaitHelper&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;mscorwks!CLREvent::WaitEx&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;mscorwks!SVR::gc_heap::wait_for_gc_done&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;mscorwks!SVR::gc_heap::try_allocate_more_space&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&amp;hellip;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;Some customer code here&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&amp;hellip;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;System_Web_ni!System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;但是，如果去查看一下&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;GC&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;线程，发现他们根本不在&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;GC&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;状态。之后我们发现线程&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;48&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;禁用了&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;PreEmptive GC&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;，不允许&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;GC&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;来暂停它。所以&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;GC&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;必须等到这个线程结束。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;PreEmptive Lock&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;ID OSID ThreadOBJ State GC GC Alloc Context Domain Count APT Exception&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;24 1 1e48 000000000015f280 1808220 Enabled 00000000902c9e50:00000000902c9e70 00000000001bbbe0 1 MTA (Threadpool Worker)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;48 8 2070 00000000091043e0 180b222 Disabled 0000000000000000:0000000000000000 00000000001bbbe0 1 MTA (Threadpool Worker)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;&amp;hellip;..&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;线程&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;48&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;正在替换&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;strings&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;mscorwks!COMStringBuffer::LocalIndexOfString&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;mscorwks!COMString::ReplaceString&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;MyAssembly!MyFunction.RemoveSpaces(System.String)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;然后线程&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt; 48&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;占用了所有&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;CPU.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;0:048&amp;gt; !runaway&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;User Mode Time&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Thread Time&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;48:2070 0 days 0:01:02.468&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;52:20b8 0 days 0:00:16.359&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;34:1ef0 0 days 0:00:16.171&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&amp;hellip;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;如果我们&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;dump&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;出字符串，它是非常小的字符串，其中只包含&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;200&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;个字符&lt;/span&gt;&lt;span style="font-family: 宋体; mso-bidi-font-family: 宋体;" lang="ZH-CN"&gt;。替换字符串里面的东西不应该花费这么长的时间。代码下面，它试图用单个空格替换所有连续的空格。其实，字符串中已经没有连续空格。此外，在这里我们不需要&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;while&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;循环，因为&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;String.Replace&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;会返回一个新字符串，其中在这个新字符串当前所有与指定的字符串匹配的字符串会被替换为指定字符串。此时我怀疑&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;while&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;循环是无法终止的。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;if ((str != null) &amp;amp;&amp;amp; (str.Length != 0))&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;while (str.IndexOf(" ") != -1) // as long as there are two continuous spaces&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;str = str.Replace(" ", " "); //replace it with single space&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;看看此字符串的十六进制值，我找到了异常：字符串里面有一个特殊的字符&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;0xfffd&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;0:048&amp;gt; dd 801fc6d8&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;i style="mso-bidi-font-style: normal;"&gt;&lt;span style="background: #d9d9d9; mso-shading: white; mso-pattern: gray-15 auto;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;00000000`801fc6d8 0041004d 00200058 0020&lt;span style="color: red;"&gt;fffd&lt;/span&gt; 00680054&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;此后我用下面代码重现了问题。&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;.IndexOf&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;总是返回&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;0x0&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;而不是所希望的&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;-1&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;char&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;[] test= {&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;'\u0020'&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;'\ufffd'&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;'\u0020'&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;};&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;string&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt; testStr = &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;new&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;string&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;(test);&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;int&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt; i = testStr.IndexOf(&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;"&amp;nbsp; "&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: Calibri;"&gt;0xFFFD&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;是一个特殊的&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;Unicode&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;字符。&lt;/span&gt;&lt;span style="color: #333333; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"&gt;&lt;span style="font-family: Calibri;"&gt;U+FFFD(&amp;ldquo; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #333333; font-family: 'Tahoma','sans-serif'; mso-ansi-language: EN;" lang="EN"&gt;�&lt;/span&gt;&lt;span style="color: #333333; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"&gt;&lt;span style="font-family: Calibri;"&gt;​&amp;rdquo;)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;是未知或不可打印字符的替换字符。为安全起见，在一个&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;Unicode&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;文本中的无效字节被替换为&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;U+ FFFD&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;，即&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;Unicode&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;替换字符。例如，字符串&amp;ldquo;&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;Ad\ xD800min\ xDC00istrator&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&amp;ldquo;将改为&amp;ldquo;广告&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;\ xFFFDmin\ xFFFDistrator&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&amp;ldquo;这个字符串解码为&amp;ldquo;&lt;/span&gt;&lt;span style="color: #333333; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"&gt;&lt;span style="font-family: Calibri;"&gt;Ad&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #333333; font-family: 'Tahoma','sans-serif'; mso-ansi-language: EN;" lang="EN"&gt;�&lt;/span&gt;&lt;span style="color: #333333; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"&gt;&lt;span style="font-family: Calibri;"&gt;min&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #333333; font-family: 'Tahoma','sans-serif'; mso-ansi-language: EN;" lang="EN"&gt;�&lt;/span&gt;&lt;span style="color: #333333; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"&gt;&lt;span style="font-family: Calibri;"&gt;istrator&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&amp;ldquo;，其中&lt;/span&gt;&lt;span style="color: #333333; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"&gt;&lt;span style="font-family: Calibri;"&gt;&amp;ldquo; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #333333; font-family: 'Tahoma','sans-serif'; mso-ansi-language: EN;" lang="EN"&gt;�&lt;/span&gt;&lt;span style="color: #333333; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"&gt;&lt;span style="font-family: Calibri;"&gt;​&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;是&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;Unicode&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;替换字符&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;0xFFFD&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;原因在于&amp;ldquo;&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;String.Replace&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&amp;rdquo;执行了顺序的（&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;culture-insensitive&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;）搜索，这里当&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;Unicode&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;标值一样时，两个字符是被认为是等价的。但是&amp;ldquo;&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;IndexOf&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;（&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;string&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;）&amp;rdquo;方法用当前的&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;culture&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;执行了&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;case-sensitive&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;和&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;culture-sensitive&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;的字符搜索。为了解决这个无限循环的问题，&lt;/span&gt;&lt;span lang="ZH-CN"&gt;&lt;span style="font-family: Calibri;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;我们应该使用&lt;/span&gt;&lt;span style="color: #333333; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-ansi-language: EN;" lang="EN"&gt;&lt;span style="font-family: Calibri;"&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; color: #333333; font-family: Consolas; mso-bidi-font-family: Consolas; mso-ansi-language: EN;" lang="EN"&gt;tring.IndexOf(&lt;/span&gt;&lt;span style="font-size: 9.5pt; color: #a31515; font-family: Consolas; mso-bidi-font-family: Consolas; mso-ansi-language: EN;" lang="EN"&gt;"AA", &lt;span style="background: yellow;"&gt;StringComparison.Ordinal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; color: #333333; font-family: Consolas; mso-bidi-font-family: Consolas; mso-ansi-language: EN;" lang="EN"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; color: #333333; font-family: Consolas; mso-bidi-font-family: Consolas; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;static&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;void&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt; Main(&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;string&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;[] args)&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;char&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;[] test = { &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;'\u0020'&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;'\ufffd'&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;'\u0020'&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt; };&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: green; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;// A string "&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: green; font-family: 'Tahoma','sans-serif'; mso-fareast-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;� &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: green; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;"&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;string&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt; testStr = &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;new&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;string&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;(test);&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;int&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt; i = testStr.IndexOf(&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;"&amp;nbsp; ", &lt;span style="background: yellow;"&gt;StringComparison.Ordinal&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: green; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;//This returns 0x0 which means &amp;ldquo;&amp;nbsp; &amp;rdquo;(two spaces) was found at position 0x0&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: blue; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;while&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt; (i != -1)&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; testStr = testStr.Replace(&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;"&amp;nbsp; "&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;, &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;" "&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;);&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: green; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;//replace two continuous spaces with single space.&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = testStr.IndexOf(&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #a31515; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;"&amp;nbsp; ", &lt;span style="background: yellow;"&gt;StringComparison.Ordinal&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;);&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;i&gt;&lt;span style="font-size: 8pt; color: #333333; font-family: Consolas; mso-fareast-font-family: 宋体; mso-bidi-font-family: Consolas; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;可以参考&amp;ldquo;&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;Remarks&lt;/span&gt;&lt;span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;" lang="ZH-CN"&gt;&amp;rdquo;一栏获取更多相关信息：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 12pt; color: #1f497d; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;String::IndexOf Method (String)&lt;/span&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/k8b1470s(v=VS.90).aspx"&gt;&lt;span style="font-size: 12pt; color: blue; text-decoration: none; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-font-kerning: 0pt; mso-ansi-language: EN; text-underline: none;" lang="EN"&gt;&lt;span style="font-family: Calibri;"&gt;http://msdn.microsoft.com/en-us/library/k8b1470s(v=VS.90).aspx&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 12pt; color: #1f497d; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="font-size: 12pt; color: #1f497d; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;String.Replace Method (String, String)&lt;/span&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/fk49wtc1(v=VS.80).aspx"&gt;&lt;span style="font-size: 12pt; color: blue; text-decoration: none; mso-ascii-font-family: Calibri; mso-fareast-font-family: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-family: Calibri; mso-font-kerning: 0pt; mso-ansi-language: EN; text-underline: none;" lang="EN"&gt;&lt;span style="font-family: Calibri;"&gt;http://msdn.microsoft.com/en-us/library/fk49wtc1(v=VS.80).aspx&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 12pt; color: #333333; font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-ansi-language: EN;" lang="EN"&gt;&lt;o:p&gt;&lt;span style="font-size: small; font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10135773" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/ASP-NET/">ASP.NET</category></item><item><title>当一个进程中加载多个.NET Runtime的时候如何在托管调试中加载指定的mscordacwks.dll</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/03/02/net-runtime-mscordacwks-dll.aspx</link><pubDate>Wed, 02 Mar 2011 01:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10135770</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10135770</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/03/02/net-runtime-mscordacwks-dll.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;当多个.NETRuntime加载在一个目标进程或一个dump文件中，例如： &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;i&gt;0:030&amp;gt; lm&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;start end module name&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;00000000'1b6d0000 00000000'1b9ba000 System_Data (deferred) &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;000007fe'f3e60000 000007fe'f47c5000 clr (deferred) &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;000007fe'f9880000 000007fe'fa230000 mscorwks (deferred) &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;i&gt;0:030&amp;gt; lmvm clr&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;start end module name&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;000007fe'f3e60000 000007fe'f47c5000 clr (deferred) &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Image path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;Image name: clr.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;......&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;CompanyName: Microsoft Corporation&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;ProductName: Microsoft&amp;reg; .NET Framework&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;InternalName: clr.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;OriginalFilename: clr.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;ProductVersion: &lt;span style="background-color: #ffff00;"&gt;4.0.30319.1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;FileVersion: 4.0.30319.1 (RTMRel.030319-0100)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;PrivateBuild: DDBLD431&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;FileDescription: Microsoft .NET Runtime Common Language Runtime - WorkStation&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;LegalCopyright: &amp;copy; Microsoft Corporation. All rights reserved.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;Comments: Flavor=Retail&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;i&gt;0:030&amp;gt; lmvm mscorwks&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;start end module name&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="background-color: #ffff00;"&gt;&amp;nbsp;000007fe'f9880000&lt;/span&gt; 000007fe'fa230000 mscorwks (deferred) &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Image path: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorwks.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;Image name: mscorwks.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;.......&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;CompanyName: Microsoft Corporation&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;ProductName: Microsoft&amp;reg; .NET Framework&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;InternalName: mscorwks.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;OriginalFilename: mscorwks.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;ProductVersion: &lt;span style="background-color: #ffff00;"&gt;2.0.50727.4206&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;FileVersion: 2.0.50727.4206 (VistaSP2GDR.050727-4200)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;FileDescription: Microsoft .NET Runtime Common Language Runtime - WorkStation&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;LegalCopyright: &amp;copy; Microsoft Corporation. All rights reserved.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;Comments: Flavor=Retail&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;.NET runtime 4.0中的clr.dll 和.NET runtime 2.0中的mscorwks.dll加载在一个进程中，托管调试可能会为错误的结果，如下面所示： &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;i&gt;0:030&amp;gt; .loadby sos mscorwks&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0:030&amp;gt; !clrstack&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;OS Thread Id: 0x2674 (30)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Unable to walk the managed stack. The current thread is likely not a managed thread. You can run !threads to get a list of managed threads in the process&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;其实线程30是一个托管线程，是.NET 2.0 的托管线程 ，但不是.NET 4.0的托管线程。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;如果通过使用.cordll 来加载托管调试模块 mscordacwks.dll，如下所示，可以看到调试器总是会默认尝试为最新的.NET runtime加载mscordacwks.dll，在我们的示例里面是.NET runtime 4.0 运行库，这就是解释了为什么.NET runtime 2.0托管线程不能被正常调试。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;i&gt;0:030&amp;gt; .cordll -ve -u -l&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;CLRDLL: Loaded DLL C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscordacwks.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;CLR DLL status: Loaded DLL &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscordacwks.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;在这种情况下如何加载指定的 mscordacwks.dll来进行托管调试？例如，加载托管调试模块.NET runtime 2.0的 mscorwks.dll 吗？假定匹配的 mscordacwks.dll 复制到文件夹 c:\tempzhong ，下列两个命令可以用来加载模块的托管调试： &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="background-color: #ffff00;"&gt;&amp;nbsp;&lt;i&gt;.cordll -ve -se -u -I &amp;lt;Start address of the target .NET runtime module&amp;gt; -N&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;或者 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="background-color: #ffff00;"&gt;&amp;nbsp;&lt;i&gt;.cordll -ve -se -u -I &amp;lt;Start address of the target .NET runtime module&amp;gt; -lp &amp;lt;path of the managed debugging module&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;在我们的示例中，该命令为： &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;i&gt;*note* &lt;span style="background-color: #ffff00;"&gt;-N&lt;/span&gt; switch causes the debugger to search the matched mscordacwks.dll in the configured symbol path. &lt;span style="background-color: #ffff00;"&gt;-lp&lt;/span&gt; switch causes the debugger to load the matched mscordacwks.dll from the specified path.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;i&gt;0:030&amp;gt; &lt;span style="background-color: #ffff00;"&gt;.cordll -ve -se -u -I 000007fe'f9880000 -N&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;i&gt;CLRDLL: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscordacwks.dll:2.0.50727.4952 f:0&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;doesn't match desired version 2.0.50727.4206 f:0&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;CLRDLL: Loaded DLL &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;\\SymbolShare\websymbols\mscordacwks_AMD64_AMD64_2.0.50727.4206.dll\4BF4C1819b0000\mscordacwks_AMD64_AMD64_2.0.50727.4206.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;CLR DLL status: Loaded DLL &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;\\SymbolShare\websymbols\mscordacwks_AMD64_AMD64_2.0.50727.4206.dll\4BF4C1819b0000\mscordacwks_AMD64_AMD64_2.0.50727.4206.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;....&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;或者 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0:030&amp;gt; &lt;span style="background-color: #ffff00;"&gt;.cordll -ve -se -u -I 000007fe'f9880000 -lp c:\temp&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;CLRDLL: Loaded DLL c:\temp\mscordacwks.dll&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;CLR DLL status: Loaded DLL c:\temp\mscordacwks.dll &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;现在，通过执行托管调试命令可以得到正确结果。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0:030&amp;gt;.loadby sos mscorwks&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0:030&amp;gt; !clrstack&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;OS Thread Id: 0x2674 (30)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;(!clrstack processes a max of 1000 stack frames)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;Child-SP RetAddr Call Site&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0000000005fb71a0 000007fef6fc79b5 System.Net.Sockets.Socket.MultipleSend(System.Net.BufferOffsetSize[], System.Net.Sockets.SocketFlags)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0000000005fb7290 000007fef6fc747b System.Net.Sockets.NetworkStream.MultipleWrite(System.Net.BufferOffsetSize[])&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0000000005fb7310 000007fef6fc7381 System.Net.ConnectStream.ResubmitWrite(System.Net.ConnectStream, Boolean)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;0000000005fb73c0 000007fef6fc7240 System.Net.HttpWebRequest.EndWriteHeaders_Part2()&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p align="left"&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;......&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-family: verdana,geneva;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10135770" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/ASP-NET/">ASP.NET</category></item><item><title>高性能ASP.NET应用程序（2）——ASP.NET缓存简介</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/02/25/asp-net-2-asp-net.aspx</link><pubDate>Fri, 25 Feb 2011 01:55:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10133845</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10133845</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/02/25/asp-net-2-asp-net.aspx#comments</comments><description>&lt;p&gt;上次我们介绍了ASP.NET应用程序状态管理方面的一些内容。今天，我们将继续上次关于编写高性能ASP.NET程序的话题，探讨一下ASP.NET的缓存机制。在编写ASP.NET应用程序时,能否有效地利用缓存对于程序的响应时间和资源管理方面至关重要。这一次，我们将讨论以下四个部分：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1）正确地使用缓存API&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2）利用输出缓存和片段缓存&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3）缓存在Web Farm中的应用&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4）有效应用缓存方面的一些建议&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 缓存API非常简单并易于使用，但仍然有一些情况下，你应该避免使用它们。例如，如果你要缓存的数据是特定于某个用户的，那么还是保存在会话状态中为好。如果某些数据更新非常频繁，那么这些数据在缓存中也不会被保存很久，因此缓存这样的数据对性能提高没有任何好处。我想提请您特别注意一下的是AddValidationCallback。这个函数在当你想为不同的客户定制缓存数据时是非常有用的。下面的代码演示了如何使用AddValidationCallback来依据输入的查询字符串自定义请求的处理过程的。&lt;/p&gt;
&lt;p&gt;&amp;lt;script language="c#" runat="server"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; HttpContext ctx = HttpContext.Current;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; static string validationstate;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; public void Page_Load()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(ValidateCache), null);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ctx.Response.Write("");&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; public static void ValidateCache(HttpContext context, Object data, ref HttpValidationStatus status) &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (context.Request.QueryString["Customer"] != "Bob") &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = HttpValidationStatus.IgnoreThisRequest;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.Response.Write("You are not Bob. Your request will be handled explicitly.");&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = HttpValidationStatus.Valid;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; context.Response.Write("Respond with cached data");&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 有三种缓存过期策略可供选择，这使得您可以更有效的利用缓存机制。绝对过期策略，这种策略会指定一个绝对的日期和时间，某个对象一旦过期便会被从缓存中删除；滑动过期策略，如果某个对象在超过指定的时间间隔之后仍未被试用，那么它便会过期并从缓存中删除；依赖过期策略，缓存的对象可能被关联到某个资源，那么只有在这个关联的资源发生变化时才会导致对象过期。例如一个对象关联了磁盘上的某个文件，那么该对象将保留在缓存中，一直到该文件内容发生变化时为止。有一点需要注意的是，你不能将绝对过期策略和滑动过期策略一起使用，而虽然你可以将依赖过期策略和绝对或者滑动过期策略一起使用，但我们并不推荐这样做。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 输出缓存是一种强大的技术，通过缓存从动态页面生成的内容该技术能够显著提高程序的请求/响应吞吐量。它使得您可以将整个页面的内容缓存一段指定的时间。因此当动态生成的网页不包含用户特定的数据时请考虑到使用输出缓存。另外应该考虑为生成起来比较耗时但有经常访问的内容启用输出缓存，例如报表。比如生成一个报表需要花去你1分钟时间，而它由仅包含少量的变化，那么这个报表便是一个很好的缓存候选。但是，应该避免在下列这些情况下使用输出缓存：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;1．您需要以编程方式访问页面上的数据。使用缓存API。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2．该网页包含大量的变量。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3．该网页包含混合类型的数据：静态的，动态的还有用户特定的。在这种情况下，使用片段缓存机制为好。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4．每次请求都会更新的网页。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 片段缓存机制可以通过使用用户控件配合@OutputCache指令来实现。当一个页面中的混合有不同种类的数据时，应该通过用户控件来将你的页面划分为若干个独立的逻辑模块。一些适宜采用片段缓存机制的情形包括：非用户特定的导航菜单，以及页眉/页脚这种通常不需要在每个视图刷新的静态内容。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 同会话状态管理类似，缓存的管理，在Web Farm的情形下也变得比单独服务器时更加复杂。基本上，你有三种方案可供选择：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. 在Web Farm同步所有节点。这种方式简单，快捷，优雅。我们只需简单的为程序增加一些处理逻辑，使得当任何缓存操作（API）发生时我们只是通过遍历节点并把Web请求转发到每一个节来同步所有节点上的缓存。如果它不是一个简单对象，你必须考虑到串行化的问题。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. 集中式缓存。你可以通过Web服务组件来设计一个集中式的缓存：1）确定什么样的信息需要被缓存。例如，假设你的应用程序生成了一个大型数据集集合，用于为每个用户提供相同的首页2）创建一个Web服务，其中包含一个生成这个大数据集的方法。3）编译此Web服务和并安装到Web Farm可以访问的一个服务器上。理想的情况下，这个服务器应该在同一个域，并在同一物理网络，以尽量减少通信时间。4）在你的程序中代码添加一个Web引用到以从此Web服务中获得这个大数据集。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. SQL服务器缓存。SQL Server是强大的，尤其是当你需要应对跨进程的持久性数据回收，服务器重新启动，电源故障/系统崩溃这样的事情时。如果你的应用程序需要这样的数据保护，那么基于例如SQL Server这样的持久性数据存储的缓存机制应该足以满足的需求了。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当您编写ASP.NET应用程序时，请务必记住牢记以下一些规则：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. 使用用户控件来分割您的网页。隔离动态数据和静态数据，以便能够应用片段缓存。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. 配置内存限制，以避免造成任何内存问题。参考：http://msdn.microsoft.com/en-us/library/7w2sway1（VS.71）aspx。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. 使用Location属性选择合适的位置来缓存你的数据。 http://msdn.microsoft.com/en-us/library/system.web.ui.outputcachelocation(v=VS.71).aspx &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4. &lt;a name="_GoBack"&gt;&lt;/a&gt;使用VaryBy。VaryBy属性决定了数据是否被缓存。下面的示例显示了如何使用VaryBy属性。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;%@ OutputCache Duration="30" VaryByParam="a" %&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在上面示例中所示的设置使得以下页面具有相同的缓存版本：&lt;/p&gt;
&lt;ul type="disc"&gt;
&lt;li&gt;&lt;a href="http://localhost/cache.aspx?a=1"&gt;http://localhost/cache.aspx?a=1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://localhost/cache.aspx?a=1&amp;amp;b=1"&gt;http://localhost/cache.aspx?a=1&amp;amp;b=1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://localhost/cache.aspx?a=1&amp;amp;b=2"&gt;http://localhost/cache.aspx?a=1&amp;amp;b=2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果您添加b到VaryByParam属性，你将有三个不同版本的网页，而不是一个版本。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当你决定使用VaryBy属性时，确保有一个有限数量的变化，因为每个变化都增加了对Web服务器上的内存消耗。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 以上就是一些我想分享的关于ASP.NET缓存的经验。根据我的经验的基础上，即使有经验的.NET开发人员也经常会在ASP.NET缓存方面失误，比如由于缓存太频繁造成的内存问题，缓存了本不应该被缓存的东西而引起的性能问题.还好我们有一些诊断/调试工具来帮助我们找出真正的罪魁祸首。但是，如果我们谨慎设计我们的缓存代码，应该就不至于那么痛苦的调程序了。&lt;/p&gt;
&lt;p&gt;Yawei&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10133845" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/ASP-NET/">ASP.NET</category></item><item><title>高性能ASP.NET应用程序（1）——优化状态管理</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/01/24/asp-net-1.aspx</link><pubDate>Mon, 24 Jan 2011 09:29:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10119327</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10119327</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2011/01/24/asp-net-1.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 今天我们来聊一下在编写ASP.NET应用程序的时候如何优化状态管理。我相信绝大多数的ASP.NET开发人员或多或少的都会对使用ASP.NET的状态有所了解。在本文中，我们不会把如何使用ASP.NET的状态作为重点，而更侧重于讨论如何更加有效率和有效果的管理ASP.NET的状态。Web应用程序为状态管理提出了一些具体的挑战，尤其是Web场/园的情形。您就状态存储的位置和方法所作出的决定对您的应用程序的性能和扩展性将会产生巨大的影响。 &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 总的来说，ASP.NET中有3种状态：应用程序状态、会话状态和视图状态。他们分别需要在不同的情形下使用。应用程序状态应用于所有的用户和会话。而会话状态用于存储单个用户的状态。在这里单个用户可以理解为来自同一个浏览器的请求。视图状态用于存储单个页面的状态信息，就像在某个具体网页的控件中包含的内容。归结起来有2种状态管理指南：1）在客户端上存储简单的状态；2）考虑序列化带来的开销。对于第一点，当视图状态不可用时您可以考虑利用客户端cookie、查询字串或者隐藏控件。考虑到状态的序列化，请确保只在必要时才进行存储，并且倾向于存储简单的类型（约15%到25%的性能影响）而非复杂的对象（可能会有更大的影响）。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 现在我们来分别谈一下怎样最优化应用程序状态、会话状态和视图状态管理。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;b&gt;应用程序状态管理技巧：&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. HttpApplicationState VS 静态属性：您应该避免在应用程序对象中存储数据。取而代之的是，您可以使用应用程序类的静态成员。您可以由此获得性能提升因为访问静态成员会比访问应用程序对象快得多。一个例子是：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;lt;%&lt;/p&gt;
&lt;p&gt;private static string[] _states[];&lt;/p&gt;
&lt;p&gt;private static object _lock = new object();&lt;/p&gt;
&lt;p&gt;public static string[] States&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;&amp;nbsp; get {return _states;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public static void PopulateStates()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;&amp;nbsp; //ensure this is thread safe&lt;/p&gt;
&lt;p&gt;&amp;nbsp; if(_states == null)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lock(_lock)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //populate the states...&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public void Application_OnStart(object sender, EventArgs e)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;&amp;nbsp; PopulateStates();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;%&amp;gt;&lt;/p&gt;
&lt;p&gt;2. 应用程序状态VS ASP.NET 缓存：当您可以使用缓存来存储可读写的数据来避免服务器/进程关联问题，请倾向于在应用程序状态中存储只读日期。&lt;/p&gt;
&lt;p&gt;3. 避免在应用程序状态中存储STA COM对象。所有访问STA COM的线程都会被序列化从而引发一些严重的性能事件。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;会话状态技巧：&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;基本上，我们有3种选择来存储会话状态：InProc、 StateServer 和 SQL server。InProc是速度最快的选择然而状态数据有可能会在进程回收和进程崩溃。这不能应用于Web场或者Web园部署。状态服务器既不能安装在本地服务器上也不能安装在远程服务器上。这种做法很好但是因为将状态从存储处提取和传输到存储处所需要的状态序列化和反序列化而对性能造成影响。SQL Server能够在大型网络平台上为存储无数的用户会话数据提供高可扩展性和性能。序列化和反序列化的开销会比状态服务器稍微多一些。然而，带有SQL簇的SQL Server可以提供更好的鲁棒性。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;会话状态管理技巧：&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. 侧重于基本类型以减小序列化开销。基本类型是指Int、Byte、Decimal、String、DataTime、TimeSpan、Guid、IntPrt和UintPtr等类型。基本类型序列化的速度快于复杂类型的原因是ASP.NET使用了一种优化过的内部方法来序列化基本类型而复杂类型却使用BinaryFormatter对象。&lt;/li&gt;
&lt;li&gt;2. 关闭会话状态，如果不使用此项的话。&lt;/li&gt;
&lt;li&gt;3. 正如应用程序状态，请在会话状态中也避免存储STA COM对象。&lt;/li&gt;
&lt;li&gt;4. 尽量使用只读标签。因为内部使用会话状态的页面请求使用了一个ReaderWriterLock，这意味着它将在任何给定时间允许多线程的同时只读访问，或者可写的单线程访问。如果您的请求需要修改会话状态，这些请求将被序列化。以下是一个简单的例子。当您浏览Main.aspx页面并点击slow区域和quick区域的Refresh按钮时，您将会看到请求被序列化，这意味着快和慢的页面将会被同时呈现到客户端。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Main.aspx:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;%@ Page Language="C#" enableSessionState="true"%&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;frameset rows="50%, 50%"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;frame src="quickpage.aspx" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;frame src="slowpage.aspx" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/frameset&amp;gt;&lt;/p&gt;
&lt;p&gt;Quickpage.aspx:&lt;/p&gt;
&lt;p&gt;&amp;lt;%@ Page Language="C#" enableSessionState="true"%&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;script runat="server"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;protected void Page_Load(object sender, EventArgs e)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session["test"] = "testquickpage";&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(DateTime.Now.ToLongTimeString());&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(" " + Session["test"]);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;form runat="server"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;asp:button runat="server" text="refresh" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/form&amp;gt;&lt;/p&gt;
&lt;p&gt;Slowpage.aspx:&lt;/p&gt;
&lt;p&gt;&amp;lt;%@ Page Language="C#" enableSessionState="true"%&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;script runat="server"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; protected void Page_Load(object sender, EventArgs e)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session["test"] = "testslowpage";&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Threading.Thread.Sleep(50000);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(DateTime.Now.ToLongTimeString());&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(" " + Session["test"]);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;form id="Form1" runat="server"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;asp:button runat="server" text="refresh" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/form&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 访问Main.aspx页面将会导致3个页面出现在同一会话中。这个请求处理将会被序列化。调用堆栈显示了线程30正在处理slowpage.aspx，而quickpage.aspx将会被另外一个线程处理但却正在等待线程30来完成。查看Timeout值可以发现，它在slow和quick页面之间几乎以同样的步伐保持增长。&lt;/p&gt;
&lt;p&gt;HttpContext&amp;nbsp;&amp;nbsp;&amp;nbsp; Timeout&amp;nbsp; Completed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Running&amp;nbsp; ThreadId ReturnCode&amp;nbsp;&amp;nbsp; Verb RequestPath+QueryString&lt;/p&gt;
&lt;p&gt;0x0000000155740530&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 110 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; no&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp; POST /sessionRWLock/slowpage.aspx &lt;/p&gt;
&lt;p&gt;0x000000019570b2d8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 110 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; no&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 305 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XXX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp; GET /sessionRWLock/main.aspx &lt;/p&gt;
&lt;p&gt;0x00000001957af010&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 110 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;no&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XXX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp; POST /sessionRWLock/quickpage.aspx &lt;/p&gt;
&lt;p&gt;HttpContext&amp;nbsp;&amp;nbsp;&amp;nbsp; Timeout&amp;nbsp; Completed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Running&amp;nbsp; ThreadId ReturnCode&amp;nbsp;&amp;nbsp; Verb RequestPath+QueryString&lt;/p&gt;
&lt;p&gt;0x0000000155740530&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 110 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; no&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 89 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XXX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp; &amp;nbsp;POST /sessionRWLock/slowpage.aspx &lt;/p&gt;
&lt;p&gt;0x000000019570b2d8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 110 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; no&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 384 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XXX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp; GET /sessionRWLock/main.aspx &lt;/p&gt;
&lt;p&gt;0x00000001957af010&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 110 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; no&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 88 Sec&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XXX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&amp;nbsp;&amp;nbsp; POST /sessionRWLock/quickpage.aspx &lt;/p&gt;
&lt;p&gt;以下是线程30的托管堆栈，可以看出它停留在了Page_load状态。&lt;/p&gt;
&lt;p&gt;0:030&amp;gt; !clrstack&lt;/p&gt;
&lt;p&gt;OS Thread Id: 0x664 (30)&lt;/p&gt;
&lt;p&gt;Child-SP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RetAddr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Call Site&lt;/p&gt;
&lt;p&gt;000000000436de70 000007feece23ec9 ASP.slowpage_aspx.Page_Load(System.Object, System.EventArgs)&lt;/p&gt;
&lt;p&gt;000000000436ded0 000007fee3e4800a System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr, System.Object, System.Object, System.EventArgs)&lt;/p&gt;
&lt;p&gt;000000000436df00 000007fee3e3e7e4 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(System.Object, System.EventArgs)&lt;/p&gt;
&lt;p&gt;000000000436df30 000007fee3e3e842 System.Web.UI.Control.OnLoad(System.EventArgs)&lt;/p&gt;
&lt;p&gt;000000000436df70 000007fee3e3adcc System.Web.UI.Control.LoadRecursive()&lt;/p&gt;
&lt;p&gt;000000000436dfc0 000007fee3e3a2d0 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)&lt;/p&gt;
&lt;p&gt;000000000436e090 000007fee3e3a1fb System.Web.UI.Page.ProcessRequest(Boolean, Boolean)&lt;/p&gt;
&lt;p&gt;000000000436e0f0 000007fee3e3a190 System.Web.UI.Page.ProcessRequest()&lt;/p&gt;
&lt;p&gt;000000000436e150 000007ff00190219 System.Web.UI.Page.ProcessRequest(System.Web.HttpContext)&lt;/p&gt;
&lt;p&gt;000000000436e1b0 000007fee3e41637 ASP.slowpage_aspx.ProcessRequest(System.Web.HttpContext)&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;b&gt;视图状态管理技巧：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 视图状态是被服务器端控件用来保持将数据反馈给它们自己（同一个页面）的内容。1个叫做-_VIEWSTATE的特别隐藏变量持有所有的视图状态信息。视图状态的读取发生在页面初始化之后而存储发生在网页的渲染（Render）之前。由于从视图状态存储/获取数据是如此之容易，视图状态容易被不正确的使用。视图状态实际上是一个页面非必需的开销。以下是一些技巧：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. 在可能的情形下关闭试图状态。如果页面没有提交返回（post back）、没有服务器端控件事件发生或者没有旧的数据被存储了，您不妨简单的将视图状态关闭。&lt;/li&gt;
&lt;li&gt;2. 将存储在试图状态的信息最小化。如果你需要在视图状态存储数据，请记住存储基本类型和较小的对象。&lt;/li&gt;
&lt;li&gt;3. 请随时留意视图状态的大小。开启一个跟踪或者以其他方式来监视每一个控件视图状态大小。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Reference: Understanding ASP.NET ViewStat&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms972976.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms972976.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 以上基本上是ASP.NET状态管理中我认为比较重要的内容。希望能对您有所帮助。如果有任何问题或者担心，请告知我，我将非常高兴的和您一起探讨任何技术问题。非常感谢您花费宝贵时间阅读我们小组的博客！&lt;/p&gt;
&lt;p&gt;Yawei&lt;a name="_GoBack"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10119327" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/ASP-NET/">ASP.NET</category></item><item><title>如何解决在Win2003的Oracle链接服务器上MSDTC事务失败问题</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/28/win2003-oracle-msdtc.aspx</link><pubDate>Tue, 28 Dec 2010 06:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10109448</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10109448</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/28/win2003-oracle-msdtc.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;在企业环境中，客户有时需要设置MSDTC事务来与远程Oracle目标服务器协同工作。由于跨产品的设置十分复杂，有时我们在更新一个已链接的Oracle数据库中的数据时可能会面临事务失败，例如：&lt;/p&gt;
&lt;p&gt;&lt;i&gt;服务器：消息 7391&lt;/i&gt;&lt;i&gt;，级别16&lt;/i&gt;&lt;i&gt;，状态1&lt;/i&gt;&lt;i&gt;，行1&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;该操作无法执行，因为OLE DB Provider 'MSDAORA' &lt;/i&gt;&lt;i&gt;无法启动分布式事务。&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;OLE DB&lt;/i&gt;&lt;i&gt;错误跟踪 [OLE / DB Provider 'MSDAORA' ITransactionJoin&lt;/i&gt;&lt;i&gt;：：JoinTransaction&lt;/i&gt;&lt;i&gt;返回0x8000d048]&lt;/i&gt;&lt;i&gt;。&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;下面是帮助我们缩小和解决类似的问题的一般的步骤（开始操作之前，先尝试使用SQL的普通的select语句查询Oracle，确保服务器名称解析和它们之间的网络正常）：&lt;/p&gt;
&lt;p&gt;1。在Windows Server 2003中，选择"添加/删除程序程序"控制台，Windows组件中的"启用网络DTC访问"必须启用。可以在Windows组件\应用程序服务器\启用网络DTC访问下启用它。请参考：&lt;/p&gt;
&lt;p&gt;817064如何在Windows Server 2003启用网络DTC访问&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;817064"&gt;http://support.microsoft.com/default.aspx?scid=kb;EN-US;817064&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2。打开DCOMCNFG，确保MSDTC选项卡下的安全配置的设置是正确的：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/0250.msdtc1.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;3。打开注册表，在Security键中，确保注册表值和UI设置相匹配：&lt;/p&gt;
&lt;p&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/2500.msdtc2.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;4。 注册表中Oracle模块的配置是正确的：&lt;/p&gt;
&lt;p&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;OracleXaLib=oraclient9.dll&lt;/p&gt;
&lt;p&gt;OracleSqlLib=orasql9.dll&lt;/p&gt;
&lt;p&gt;OracleOciLib=oci.dll&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;尽管在这里我们使用Oracle 9i客户端作为举例，我们应该知道，在Microsoft数据访问组件（MDAC）2.5版本之后，微软的ODBC驱动和OLE DB Provider都只支持Oracle7和Oracle 8i：&lt;a href="http://support.microsoft.com/Default.aspx?id=244661"&gt;http://support.microsoft.com/Default.aspx?id=244661&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一个新的支持Oracle 9i客户端的Microsoft.NET Managed Oracle Provider现已推出。请访问以下Microsoft网站来下载这个Provider：&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=4F55D429-17DC-45EA-BFB3-076D1C052524"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=4F55D429-17DC-45EA-BFB3-076D1C052524&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;对于其他版本的Oracle客户端（7 / 8）注册表键值设置，请参考：&lt;/p&gt;
&lt;p&gt;193893 有关Oracle与Microsoft Transaction Server和COM +组件协同使用的信息&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;193893"&gt;http://support.microsoft.com/default.aspx?scid=kb;EN-US;193893&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5。从SQL服务器管理控制台中找到已连接的Oracle服务器名称。如果你不清楚如何找到Oracle服务器名称，请与当地的Oracle管理团队联系。&lt;/p&gt;
&lt;p&gt;6。创建一个指向您的Oracle数据库的ODBC数据源名称（DSN）。请确保您的DSN使用的是Microsoft Oracle ODBC驱动程序。&lt;/p&gt;
&lt;p&gt;a. 从管理工具中打开数据源对话框：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/1563.msdtc3.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;b. 单击用户 DSN选项卡上的添加按钮，选择Microsoft ODBC for Oracle，然后完成向导：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/7220.msdtc4.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;运行此命令，我们应该得到正确的结果，这说明纯Oracle事务工作正常：&lt;/p&gt;
&lt;p&gt;Msdtcora.exe -U&amp;lt;oracle用户名&amp;gt; -P&amp;lt;oracle密码&amp;gt; -S&amp;lt;我们在第五步中找到的服务名 &amp;gt;&lt;/p&gt;
&lt;p&gt;该Msdtcora.exe可以从如下地址得到：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.microsoft.com/download/transaction/Utility/1/NT5/EN-US/DTCOra.exe"&gt;http://download.microsoft.com/download/transaction/Utility/1/NT5/EN-US/DTCOra.exe&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个工具将跳过MSDTC并直接使用Oracle事务。如果Oracle测试程序可以连接到Oracle数据库服务器且不报错，很可能COM + / MTS也可以与Oracle正常工作。如果这一步失败，您应该联系Oracle支持团队以获取更多信息。&lt;/p&gt;
&lt;p&gt;7。确保网络服务帐户（这是在Win2003中为MSDTC建立的新帐户）已被添加在c:\program files\oracle和c:\oracle（如果您设置了不同的Oracle根文件夹，需要做同样的工作），强制所有子对象继承父文件夹相同的设置。否则，MSDTC服务可能无法跟Oracle库进行交流。&lt;/p&gt;
&lt;p&gt;如果Oracle事务仍然失败，即使在第6步中Msdtcora返回成功的信息，我们应该检查一下纯MSDTC服务是否工作正常。&lt;/p&gt;
&lt;p&gt;你可以对其他已连接的SQL服务器发起MSDTC分布式事务处理（SQL服务器的链接也应该遵循的步骤1,2,3）来查看事务的进展。如果发生任何困难，联系 MSDTC的支持小组以获得进一步的故障排除思路。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;更多信息&lt;/p&gt;
&lt;p&gt;==============&lt;/p&gt;
&lt;p&gt;280106如何在 SQL 服务器中设置到 Oracle 的链接服务器并进行故障排除&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;280106"&gt;http://support.microsoft.com/default.aspx?scid=kb;EN-US;280106&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;微软Internet开发者支持小组&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10109448" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/MSDTC/">MSDTC</category></item><item><title>如何解决浏览ASP网页时IIS7出现404.17错误</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/28/asp-iis7-404-17.aspx</link><pubDate>Tue, 28 Dec 2010 01:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10109403</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10109403</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/28/asp-iis7-404-17.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;症状：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;用户报告在Windows2008&amp;nbsp; 64位系统上浏览ASP页面时出现404.17的问题。如果重装IIS服务，问题就不会再出现，但是在安装了SMS（System Management Server）后，同样问题又会出现：&lt;/p&gt;
&lt;p&gt;&lt;b&gt;需要检查的东西：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;1. 启用IIS7的Failed Request Tracing log功能来检查具体的报错信息。这个案例中的报错信息如下所示：&lt;/p&gt;
&lt;p&gt;-MODULE_SET_RESPONSE_ERROR_STATUS &lt;/p&gt;
&lt;p&gt;ModuleName StaticFileModule &lt;/p&gt;
&lt;p&gt;Notification 128 &lt;/p&gt;
&lt;p&gt;HttpStatus 404 &lt;/p&gt;
&lt;p&gt;HttpReason Not Found &lt;/p&gt;
&lt;p&gt;HttpSubStatus 17 &lt;/p&gt;
&lt;p&gt;ErrorCode 2147942450 &lt;/p&gt;
&lt;p&gt;ConfigExceptionInfo&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Notification EXECUTE_REQUEST_HANDLER &lt;/p&gt;
&lt;p&gt;ErrorCode The request is not supported. (0x80070032)&lt;/p&gt;
&lt;p&gt;这个错误信息是在告诉用户没有ASP handler来处理请求，所以最后一个模块-StaticFileModule处理.asp的请求时候，以"not supported"结束。&lt;/p&gt;
&lt;p&gt;事实上这个错误信息只是在告诉用户这个ASP handler不能正常处理.asp的请求。所以我们还是需要找出真正引起错误的原因。&lt;/p&gt;
&lt;p&gt;检查了ApplicationHost.config:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;applicationPools&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="DefaultAppPool" &lt;span style="color: #ff0000;"&gt;enable32BitAppOnWin64="true" &lt;/span&gt;managedPipelineMode="Classic" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/system.webServer&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;location path="" overrideMode="Allow"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;system.webServer&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;handlers accessPolicy="Read, Script"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="C:\Windows\System32\inetsrv\asp.dll" resourceType="File" &lt;span style="color: #ff0000;"&gt;preCondition="bitness64"&lt;/span&gt; /&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;可以看到如红色字体标注的，现在IIS是运行在32位的模式下，所以我们应当删除preCondition="bitness64"使得正确的mapping asp.dll.&lt;/p&gt;
&lt;p&gt;但是之后在这个删除后，客户反映问题仍然存在。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;在Windows2008使用了Process Monitor来追踪ASP.dll的装载进程，发现，IIS工作进程是在32位的模式下运行，但是装载的是C:\Windows\&lt;b&gt;SysWOW64&lt;/b&gt;\inetsrv\asp.dll而并非是C:\Windows\&lt;b&gt;System32\&lt;/b&gt;inetsrv\asp.dll。因为32位的IIS工作进程所需要的是32位的ASP.dll. 所以我们建议做如下改动：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="C:\Windows\SysWOW64\inetsrv\asp.dll" resourceType="File" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;最后一点也是最重要的一点，在IIS7中，IIS配置不仅保存在ApplicationHost.config里面，而且也存在于相应web Application中的web.config里面。所以不要忘记检查web.config以确认ASP handler在web.config中被定义。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;更多信息：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;默认情况下，ASP handler的配置如下：&lt;/p&gt;
&lt;p&gt;&amp;lt;add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor&lt;b&gt;="%windir%\system32\inetsrv\asp.dll&lt;/b&gt;" resourceType="File" /&amp;gt;&lt;/p&gt;
&lt;p&gt;这就是为什么工作进程能够&lt;a name="_GoBack"&gt;&lt;/a&gt;顺利地在32位和64位之间转换。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;谢谢！&lt;/p&gt;
&lt;p&gt;微软Internet开发者支持小组&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10109403" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/ASP/">ASP</category></item><item><title>如何解决系统事件出现DCOM 10009错误？</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/28/dcom-10009.aspx</link><pubDate>Tue, 28 Dec 2010 01:39:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10109402</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10109402</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/28/dcom-10009.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;症状：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;我们有时在系统事件中会遇到DCOM 10009的错误（如下所示），或者会在DCOM客户应用程序中接收到错误代码0x800706ba：&lt;/p&gt;
&lt;p&gt;Event Type:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error&lt;br /&gt;Event Source:&amp;nbsp;&amp;nbsp;&amp;nbsp; DCOM|&lt;br /&gt;Event Category:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;br /&gt;Event ID:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10009&lt;br /&gt;Date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2010-2-22&lt;br /&gt;Time:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10:02:07&lt;br /&gt;User:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N/A&lt;br /&gt;Computer:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Computer Name&amp;gt;&lt;br /&gt;Description: &lt;br /&gt;DCOM was unable to communicate with the computer &amp;lt;Target Computer Name&amp;gt; using any of the configured protocols.&lt;/p&gt;
&lt;p&gt;Simply speaking, DCOM 10009 indicates that the DCOM client located on this &amp;lt;Computer Name&amp;gt; can't communicate with the DCOM|COM+ server located on that &amp;lt;Target Computer&amp;nbsp; Name&amp;gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;发生过程：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;当用户调用CoGetClassObject或者CoCreateInstance(CreateObject或者在VB中 new)来启用一个组件的时候， COM runtime会联系它的本地SCM COM的启用者（PRCSS服务），登陆相应的提供这个组件的COM服务器。&lt;/p&gt;
&lt;p&gt;如果这个组件是远端的，本地的RPCSS服务会把请求传输给远端机器上的RPCSS服务。&lt;/p&gt;
&lt;p&gt;但是如果远端服务器的RPCSS服务不可用的话，DCOM 10009会出现并通知管理员，调用栈内容如下所示：&lt;/p&gt;
&lt;p&gt;ChildEBP RetAddr&lt;/p&gt;
&lt;p&gt;006df364 757f8b72 ADVAPI32!ReportEventW-&amp;gt; then DCOM 10009 is logged.&lt;/p&gt;
&lt;p&gt;006df3a0 757f6542 rpcss!LogRemoteSideUnavailable+0x63 -&amp;gt;here we don't found the server.&lt;/p&gt;
&lt;p&gt;006df40c 757f6781 rpcss!CRemoteMachine::Activate+0x294&lt;/p&gt;
&lt;p&gt;006df648 757f6861 rpcss!RemoteActivationCall+0xf2&lt;/p&gt;
&lt;p&gt;006df664 757edb5c rpcss!ActivateRemote+0x8e&lt;/p&gt;
&lt;p&gt;006df6c0 757d629c rpcss!Activation+0x343&lt;/p&gt;
&lt;p&gt;006df718 757d7680 rpcss!ActivateFromProperties+0x1c2&lt;/p&gt;
&lt;p&gt;006df724 757d76c0 rpcss!CScmActivator::CreateInstance+0xd&lt;br /&gt;...&lt;br /&gt;...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;发生原因：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;概括说来，发生DCOM 10009错误的原因在于：本地RPCSS服务不能连接到远端目的服务器的RPCSS服务。有几种情形造成这种情况的出现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1． 远端的目的服务器可能出于offline的状态，例如可能是在维护。&lt;/li&gt;
&lt;li&gt;2． 双方服务器都出于online的状态，但是在两个服务器的PRC通信出现问题，例如服务器名称解析失败，可提供RPC通信的端口资源耗尽，防火墙配置等等。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;解决方法：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;正如上文所提到的， 引起DCOM 10009出现有着很多可能性，我们 需要针对不同的情形来做不同的处理:&lt;/p&gt;
&lt;p&gt;情形1：&lt;/p&gt;
&lt;p&gt;如果远端的服务器是处于维护阶段， DCOM 10009的出现是正常的，我们可以通过ping &amp;lt;远端服务器&amp;gt;来确认远端服务器状态。&lt;/p&gt;
&lt;p&gt;情形2：&lt;/p&gt;
&lt;p&gt;如果远端服务器是处在online的状态却仍然出现DCOM 10009的话，请执行以下步骤：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. Ping&amp;lt;远端服务器&amp;gt;和IP地址来确认网络状况良好。&lt;/li&gt;
&lt;li&gt;2. Telnet&amp;lt;远端服务器&amp;gt;135以确认Port 135没有被防火墙阻止。&lt;/li&gt;
&lt;li&gt;3. 如果已经配置过PRC通信的动态端口， 可以通过以下命令来两个服务器的端口资源：Netstat -anb&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果所有的动态端口都在被使用了，或者只有很少可用，可以考虑扩展动态端口。&lt;/p&gt;
&lt;p&gt;关于如何配置与防火墙一起使用的 RPC 动态端口分配请参考：&lt;a href="http://support.microsoft.com/?id=154596"&gt;http://support.microsoft.com/?id=154596&lt;/a&gt;&lt;br /&gt;关于DCOM端口范围配置问题请参考：&lt;a href="http://support.microsoft.com/kb/217351/en-us"&gt;http://support.microsoft.com/kb/217351/en-us&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;4. 如果以上步骤都正常， 可以使用DTCPing工具来确认两个服务器之间的DCOM通信是否正常。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于如何使用DTCPing工具来解决MS DTC中的连接问题请参考：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/918331/en-us"&gt;http://support.microsoft.com/kb/918331/en-us&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注意：DTCPing工具并非专门指用来解决MSDTC问题的，这个工具可以用来解决所有DCOM&lt;a name="_GoBack"&gt;&lt;/a&gt;通信问题。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;参考：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;FIX: You cannot obtain detailed error information about DCOM 10009 errors in Windows Server 2003&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/910695"&gt;http://support.microsoft.com/kb/910695&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;微软Internet开发者支持小组&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10109402" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/MSDTC/">MSDTC</category><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/DCOM/">DCOM</category></item><item><title>IIS6.0中应用程序池的下拉列表中显示&lt;Invalid Application Pool&gt;</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/27/iis6-0-lt-invalid-application-pool-gt.aspx</link><pubDate>Mon, 27 Dec 2010 09:38:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10109233</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10109233</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/27/iis6-0-lt-invalid-application-pool-gt.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;症状：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;应用程序池的下拉列表中只显示&amp;lt;Invalid Application Pool&amp;gt;条目。&lt;/p&gt;
&lt;p&gt;参照文档做了以下步骤和IIS reset，但是仍然没有解决问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1． Cannot Select an Application Pool in IIS 6.0 "Invalid Application Pool" message：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://blogs.iis.net/lprete/archive/2008/06/22/cannot-select-an-application-pool-in-iis-6-0-quot-invalid-application-pool-quot-message.aspx"&gt;http://blogs.iis.net/lprete/archive/2008/06/22/cannot-select-an-application-pool-in-iis-6-0-quot-invalid-application-pool-quot-message.aspx&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2． 使用Metabase Explorer，没有发现问题。应用程序池的KeyType和Websit的AppPoolID都是正确的&lt;/li&gt;
&lt;li&gt;3． 在c:\windows\system32\inetsrv用记事本打开IIS 配置文件meatbase.xml，检查&amp;lt;IIsApplicationPools&amp;gt;和&amp;lt;IIsApplicationPool&amp;gt;部分，发现有如下所示多出一个节点：&lt;/li&gt;
&lt;/ul&gt;
&lt;table cellpadding="0" cellspacing="0" style="width: 100%;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&amp;lt;IIsApplicationPools Location="&lt;b&gt;/LM/W3SVC/AppPools&lt;/b&gt;" AdminACL="xx" AppPoolIdentityType="&lt;b&gt;2&lt;/b&gt;" ... StartupTimeLimit="&lt;b&gt;90&lt;/b&gt;" /&amp;gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt; &amp;lt;IIsConfigObject Location="&lt;b&gt;/LM/W3SVC/AppPools/XXXAppPool121&lt;/b&gt;" /&amp;gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;-&lt;/b&gt;&amp;lt;IIsApplicationPool Location="&lt;b&gt;/LM/W3SVC/AppPools/DefaultAppPool&lt;/b&gt;" AppPoolAutoStart="&lt;b&gt;TRUE&lt;/b&gt;" AppPoolIdentityType="&lt;b&gt;2&lt;/b&gt;" ... PeriodicRestartTime="&lt;b&gt;0&lt;/b&gt;"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/IIsApplicationPool&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;对比本地的metabase.xml文件，发现在&amp;lt;IIsApplicationPools&amp;gt;和&amp;lt;IIsApplicationPool&amp;gt;之间没有&amp;lt;IIsConfigObject&amp;gt;的部分。&lt;/p&gt;
&lt;p&gt;&lt;b&gt;解决方法：&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. 备份metabase.xml。&lt;/li&gt;
&lt;li&gt;2. 停止IIS管理服务。&lt;/li&gt;
&lt;li&gt;3. 删除meatbase.xml文件中的&amp;lt;IIsConfigObject&amp;gt;部分。&lt;/li&gt;
&lt;li&gt;4. 重启IIS管理服务以及HTTP SSL，W3Svc等等。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;之后IIS中应用程序池中的下拉列表正常显示。&lt;/p&gt;
&lt;p&gt;通过与客户的确认，这个多出来的节点应当使用第三方配置工具来添加。&lt;/p&gt;
&lt;p&gt;谢谢！&lt;/p&gt;
&lt;p&gt;微软　Internet　开发者支持小组&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10109233" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category></item><item><title>如何在一个跨域环境中用Silverlight客户端使用自托管的WCF服务</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/27/silverlight-wcf.aspx</link><pubDate>Mon, 27 Dec 2010 09:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10109231</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10109231</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/27/silverlight-wcf.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: medium;"&gt;背景介绍：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;当一个Silverlight客户端试图使用WCF服务时，默认情况下，它只被允许进行在原始站点下的通讯。例如，一个&lt;a href="http://domaina/default.aspx"&gt;http://domainA/default.aspx&lt;/a&gt;托管的Silverlight控件默认情况下只能使用同一个域内的服务，如：http://domainA/WCFService.svc。而http://domainB/WCFservice.svc则不行。&lt;/p&gt;
&lt;p&gt;为了使&lt;a href="http://domaina/default.aspx"&gt;http://domainA/default.aspx&lt;/a&gt;托管的Silverlight可以连接到&lt;a href="http://domainb/WCFservice"&gt;http://domainB/WCFservice&lt;/a&gt;托管的WCF服务，我们需要显式配置一个跨域选择策略，即clientaccesspolicy.xml或crossdomain.xml。有很多文章与这个主题相关：&lt;/p&gt;
&lt;p&gt;建立可跨网域界限访问的服务&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;警告：无法在'&amp;lt;URL&amp;gt;'定位跨域策略&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc838225(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc838225(VS.95).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;当我们的WCF服务托管在IIS中时，我们只需要在发布WCF服务的根文件夹中部署clientaccesspolicy.xml。例如：如果我们的WCF服务发布为：http://domainB/WCFservice.svc，那么跨域策略应该可以通过http://domainB/clientaccesspolicy.xml访问。&lt;/p&gt;
&lt;p&gt;然而，自托管的WCF服务有些许不同。在这篇文章中，我们将演示Silverlight客户端如何在一个跨域环境中使用自托管的WCF服务。同时，因为Silverlight4 目前已支持NET.TCP绑定，这些针对NET.TCP绑定的步骤将与basicHttpBinding完全不同。在这篇文章中，我将分别介绍在basicHttpBinding和NET.TCP 绑定这两种不同情景下的步骤。&lt;/p&gt;
&lt;h1&gt;&lt;span style="font-size: medium;"&gt;如何使用自托管WCF服务&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;场景1：自托管的WCF服务与basicHttpBinding&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;步骤1：&lt;/p&gt;
&lt;p&gt;定义一个接口"IPolicyRetriever"&lt;/p&gt;
&lt;p&gt;&amp;nbsp;[ServiceContract]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public interface IPolicyRetriever&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stream GetSilverlightPolicy();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [OperationContract, WebGet(UriTemplate = "/crossdomain.xml")]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stream GetFlashPolicy();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;步骤2：&lt;/p&gt;
&lt;p&gt;在你的WCF服务中实现上述接口：&lt;/p&gt;
&lt;p&gt;public class WCFService:IWCFService,IPolicyRetriever&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //IWCFService 实现&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/p&gt;
&lt;p&gt;//IPolicyRetriever 实现&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private Stream StringToStream(string result)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new MemoryStream(Encoding.UTF8.GetBytes(result));&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Stream GetSilverlightPolicy()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string result = @"&amp;lt;?xml version=""1.0"" encoding=""utf-8""?&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;access-policy&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cross-domain-access&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;policy&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;allow-from http-request-headers=""*""&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;domain uri=""*""/&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/allow-from&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;grant-to&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;resource path=""/"" include-subpaths=""true""/&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/grant-to&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/policy&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cross-domain-access&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/access-policy&amp;gt;";&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return StringToStream(result);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;步骤3：&lt;/p&gt;
&lt;p&gt;发布一个endpoint，地址为""，基于HTTP schema的主机地址来为clientaccesspolicy.xml接收请求。我们可以通过编程或管理的方式达到此目的。&lt;/p&gt;
&lt;p&gt;编程的方式：&lt;/p&gt;
&lt;p&gt;Type serviceType = typeof(WCFService);&lt;/p&gt;
&lt;p&gt;ServiceHost host = new ServiceHost(serviceType);&lt;/p&gt;
&lt;p&gt;host.AddServiceEndpoint(typeof(IPolicyRetriever), new WebHttpBinding(), "").Behaviors.Add(new WebHttpBehavior());&lt;/p&gt;
&lt;p&gt;管理的方式：&lt;/p&gt;
&lt;p&gt;&amp;lt;behaviors&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpointBehaviors&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;behavior name="WebHttpNewBehavior"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;webHttp /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/behavior&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/endpointBehaviors&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;/behaviors&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;services&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service behaviorConfiguration="NewBehavior"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint behaviorConfiguration="WebHttpNewBehavior" binding="webHttpBinding"&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bindingConfiguration="" name="PolicyEndpoint" contract="WCFService.IPolicyRetriever" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;/services&amp;gt;&lt;/p&gt;
&lt;p&gt;在以上步骤之后，当一个Seliverlight控件向跨域自托管的WCF 服务发出一个请求时，这个服务端的服务器应该能够检索它的客户端访问策略，然后决定请求是否被授权。&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;场景2：自托管的WCF服务与NET.TCP binding&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;即使如下文章宣布了Sliverlight4支持NET.TCP binding：&lt;/p&gt;
&lt;p&gt;Sliverlight4 中的WCF NET.TCP协议&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.silverlightshow.net/items/WCF-NET.TCP-Protocol-in-Silverlight-4.aspx"&gt;http://www.silverlightshow.net/items/WCF-NET.TCP-Protocol-in-Silverlight-4.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在开始我们的步骤之前，我想特别指出一些与basicHttpBinding场景不同的地方。&lt;/p&gt;
&lt;p&gt;1. 实际上NET.TCP schema并不能被Silverlight 4识别。至少当前如此。为了使用NET.TCP 绑定，我们需要使用customBinding。&lt;/p&gt;
&lt;p&gt;2. TCP 端口范围被限制在4502-4534，这意味着你的WCF服务必须在以上端口范围中发布，从而使Silverlight客户端能够访问它。&lt;/p&gt;
&lt;p&gt;为了使客户端能够访问策略，在Silverlight4 RC之前，TCP 943端口专门用来暴露策略。&lt;/p&gt;
&lt;p&gt;参考如下文章以获得更多细节信息：&lt;/p&gt;
&lt;p&gt;Silverlight中的网络安全访问限制&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc645032(VS.95).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;为了使我们的工作变得简单，Microsoft的Tomasz Janczuk创建了一个免费的针对那些工作如TCP 套接字策略服务器的命令行程序的模板。&lt;/p&gt;
&lt;p&gt;然而，Silverlight 4 RC中的NET.TCP协议希望能通过HTTP协议在域名的根目录中访问到套接字策略，而不是像之前那样通过TCP协议在943端口访问到。&lt;/p&gt;
&lt;p&gt;参考如下文章以获悉这个改变：&lt;/p&gt;
&lt;p&gt;Sliverlight 4 中使用WCF net.tcp 协议的发布/订阅例子&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tomasz.janczuk.org/2009/11/pubsub-sample-with-wcf-nettcp-protocol.html"&gt;http://tomasz.janczuk.org/2009/11/pubsub-sample-with-wcf-nettcp-protocol.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;在这里，我们展示针对于Silverlight 4 RC场景的步骤，这意味着套接字策略通过HTTP协议在域名的根目录下被访问到。&lt;/p&gt;
&lt;p&gt;步骤1：&lt;/p&gt;
&lt;p&gt;配置WCF 服务使用customBinding，和一个基于NET.TCP 模式的元数据交换端点。你可以参考如下配置：&lt;/p&gt;
&lt;p&gt;&amp;lt;bindings&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;customBinding&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;binding name="NewBinding0"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;binaryMessageEncoding /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tcpTransport /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/binding&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/customBinding&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;/bindings&amp;gt;&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;&amp;lt;services&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;service behaviorConfiguration="NewBehavior" name="Demo.WCFService"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address="WCFService" binding="customBinding" bindingConfiguration="NewBinding0"&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="ServiceEndpoint" contract=" Demo.IWCFService " /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name="MEXEndpoint" contract="IMetadataExchange" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;host&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;baseAddresses&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add baseAddress="net.tcp://[domainB]:4503/" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/baseAddresses&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/host&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;lt;/services&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;步骤2：&lt;/p&gt;
&lt;p&gt;将clientaccesspolicy.xml部署到http://domainB的根目录下，以确保clientaccesspolicy.xml能够通过http://domainB/clientaccesspolicy.xml访问到。clientaccesspolicy.xml的内容应该与如下相似：&lt;/p&gt;
&lt;p&gt;&amp;lt;access-policy&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;cross-domain-access&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;policy&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;allow-from&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;domain uri="*"/&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/allow-from&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;grant-to&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;socket-resource port="4502-4534" protocol="tcp" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/grant-to&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/policy&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;lt;/cross-domain-access&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/access-policy&amp;gt;&lt;a name="_GoBack"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;经过如上步骤后，你的Silverlight 应该能够成功地通过NET.TCP 绑定请求自托管的WCF 服务。&lt;/p&gt;
&lt;p&gt;谢谢！&lt;/p&gt;
&lt;p&gt;微软Internet开发者支持小组&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10109231" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/WCF/">WCF</category></item><item><title>IIS7中的自定义 404页面错误- 500.19</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/27/iis7-404-500-19.aspx</link><pubDate>Mon, 27 Dec 2010 09:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10109230</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10109230</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/27/iis7-404-500-19.aspx#comments</comments><description>&lt;p&gt;在进行如下带静态文件的自定义404页面配置时，&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/6082.404_2D00_1.jpg" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;您可能会收到如下错误（见下图），&lt;/p&gt;
&lt;p&gt;500.19 - Internal Server Error&lt;/p&gt;
&lt;p&gt;Absolute physical path "driver:\path" is not allowed in system.webServer/httpErrors section in web.config file. Use relative path instead.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/2350.404_2D00_2.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;根本原因：&lt;/p&gt;
&lt;p&gt;当在web.config文件中检测到绝对路径时，就会产生此错误。&lt;/p&gt;
&lt;p&gt;目前针对该问题有2种解决方案。&lt;/p&gt;
&lt;p&gt;方案1：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. 在ApplicationHost.config文件中将&amp;lt;system.webServer&amp;gt; &amp;lt;httpErrors&amp;gt;的allowAbsolutePathsWhenDelegated设置为"true"。&lt;/li&gt;
&lt;/ul&gt;
&lt;table border="1" cellpadding="0" cellspacing="0" style="width: 576px;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="576" valign="top"&gt;
&lt;p&gt;&amp;lt;system.webServer&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; ... &lt;/p&gt;
&lt;p&gt;&amp;lt;httpErrors &lt;span style="color: #0000ff;"&gt;&lt;span style="background-color: #ffff00;"&gt;allowAbsolutePathsWhenDelegated&lt;/span&gt;&lt;/span&gt;="true"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;error statusCode="401" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="401.htm" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;error statusCode="403" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="403.htm" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;error statusCode="404" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="404.htm" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;error statusCode="405" prefixLanguageFilePath="%SystemDrive%\inetpub\custerr" path="405.htm" /&amp;gt;&lt;/p&gt;
&lt;p&gt;．．．．&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/httpErrors&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/system.webServer&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/location&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;location path="Default Web Site"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;system.webServer&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ... ...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;httpErrors errorMode="Custom"&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;remove statusCode="404" subStatusCode="-1" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;error statusCode="404" prefixLanguageFilePath="" path="E:\Temp\custom404.html" responseMode="File" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/httpErrors&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/system.webServer&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/location&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;2. 重启IIS。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;方案2&lt;/p&gt;
&lt;p&gt;1. 在IIS Manager中，找到Features Views-&amp;gt;Management Area，双击"Feature Delegation"。选择Error Pages并单击Read Only，如下图。&lt;/p&gt;
&lt;p&gt;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/1362.404_2D00_3.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;2. 在C:\inetpub\wwwroot或您的任何网页应用程序的物理目录下，打开web.config文件，移除以下部分。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table border="1" cellpadding="0" cellspacing="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="568" valign="top"&gt;
&lt;p&gt;&amp;lt;handlers accessPolicy="Read, Script" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;httpErrors&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;remove statusCode="404" subStatusCode="-1" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;error statusCode="404" prefixLanguageFilePath="" path=" E:\Temp\error404.html " responseMode="File" /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/httpErrors&amp;gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果在config文件中没有其他配置，您可以直接删除由IIS为delegation Read/Write生成的web.config文件。&lt;/p&gt;
&lt;p&gt;3. 重启IIS。&lt;/p&gt;
&lt;p&gt;更多信息&lt;/p&gt;
&lt;p&gt;如何在IIS7中进行自定义404页面设置。您能通过以下步骤达到该目的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1. 创建一个名为custom404.html的文件，并保存至您的网页目录（一般情况下为c:\inetpub\wwwroot）。&lt;/li&gt;
&lt;li&gt;2. 打开Internet Information Services (IIS) Manager。&lt;/li&gt;
&lt;li&gt;3. 在Connections窗口内（左边），展开相关节点至某个您想要进行自定义错误配置的站点，并选定该站点。&lt;/li&gt;
&lt;li&gt;4. 在中间窗口的底部，单击Features View。&lt;/li&gt;
&lt;li&gt;5. 在中间窗口，双击Error Pages。&lt;/li&gt;
&lt;li&gt;6. 双击Status Code 404。&lt;/li&gt;
&lt;li&gt;7. 在Edit Custom Error Page对话框中，&lt;/li&gt;
&lt;li&gt;a. 在"Insert content from static file into the error response"域中输入物理路径。当出现找不到页面的情况时，就会返回http 404错误并显示自定义的404错误页面。&lt;/li&gt;
&lt;li&gt;b. 在"Exectute a URL on this site"域中，输入绝对路径。在本实例中，输入/custom404.html。当出现找不到页面的情况时，就会返回http 200错误并显示自定义的404错误页面。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/8662.404_2D00_4.jpg" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8. 点击OK。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;参考&lt;/p&gt;
&lt;p&gt;&amp;nbsp;HTTP Errors &amp;lt;httpErrors&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.iis.net/ConfigReference/system.webServer/httpErrors"&gt;http://www.iis.net/ConfigReference/system.webServer/httpErrors&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;谢谢！&lt;/p&gt;
&lt;p&gt;微软　Internet　开发者支持小组&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10109230" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/IIS/">IIS</category></item><item><title>如何解决组件服务中的“红色箭头”问题</title><link>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/27/component-services.aspx</link><pubDate>Mon, 27 Dec 2010 09:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10109223</guid><dc:creator>APGC DSI Team</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/asiatech_zh-cn/rsscomments.aspx?WeblogPostID=10109223</wfw:commentRss><comments>http://blogs.msdn.com/b/asiatech_zh-cn/archive/2010/12/27/component-services.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;在分布式环境中，当调用DCOM组件或者COM+应用程序出现问题时，我们第一件需要做的事是打开Components Manager来检查或者重新设置COM+/DCOM参数。然而，当打开Component Services的时候，可能会有一个"红色箭头"出现在"My Computer"节点上：&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/4666.COMa.jpg" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;如果我们试图展开"My Computer"节点，可能会显示多个错误信息。为了解决这种问题，我们可以参照以下Check list，这样大多数常见的问题都可以得到解决：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;1. 确保MSDTC服务处于Started状态；&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/3157.COMb.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;2. 确保Users 用户组拥有注册表HKEY_CLASSES_ROOT\CLSID子键的Read权限。如果 Users group没有这样的权限，COM+系统应用程序服务可能无法正常启动，并导致"红色箭头"问题。可以参阅以下步骤来赋予Users 用户组相应权限（请在操作前备份HKEY_CLASSES_ROOT\CLSID）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a. 打开 Regedt32，找到HKEY_CLASSES_ROOT\CLSID；&lt;/li&gt;
&lt;li&gt;b. 选择CLSID，点击菜单栏中的Security -&amp;gt; Permission；&lt;/li&gt;
&lt;li&gt;c. 在Security选项卡中，添加Users到允许列表中，并赋予Read权限。&lt;/li&gt;
&lt;li&gt;d. 单击Advanced按钮，选中"Replace permissions entries on all child objects with entries shown here that apply to child objects"，之后单击"Apply"。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3. 确保用户Everyone对C:\Windows\Registration及其子对象拥有阅读权限，可以使用命令"cacls"来配置，具体请参阅：&lt;/p&gt;
&lt;p&gt;&lt;i&gt;909444&amp;nbsp; You may experience various problems after you install the Microsoft Security Bulletin MS05-051 for COM+ and MS DTC&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;909444"&gt;http://support.microsoft.com/default.aspx?scid=kb;EN-US;909444&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;4. 保证COM+ System Application服务处于Started状态：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img border="0" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-42-69/0815.COMc.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;5. 确保MSDTC服务允许Authenticated Users查阅服务状态。可以在命令行窗口中使用以下命令来查看：&lt;/p&gt;
&lt;p&gt;sc sdshow msdtc&lt;/p&gt;
&lt;p&gt;如果Authenticated Users用户组没有对MSDTC服务对象的query权限，这意味着大多数用户没有权限来获取MSDTC服务的状态，例如：&lt;/p&gt;
&lt;p&gt;(A;;CR;;;AU)&lt;/p&gt;
&lt;p&gt;我们需要运行此命令来为Authenticated Users赋予足够权限，然后重启DLLHOST.exe（请首先备份"sc sdshow msdtc"命令的输出信息）：&lt;/p&gt;
&lt;p&gt;sc sdset msdtc D:(A;;CCLCSWRPLOCRRC;;;S-1-2-0)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;CCLCSWRPLORC;;;NS)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)&lt;/p&gt;
&lt;p&gt;注意：关键部分是：&amp;nbsp;(A;;CCLCSWLOCRRC;;;AU)，而其他字符串来自于"sc sdshow msdtc"命令的结果。&lt;/p&gt;
&lt;p&gt;如需有关ACL的说明信息，请参考：&lt;/p&gt;
&lt;p&gt;&lt;i&gt;914392&amp;nbsp; Best practices and guidance for writers of service discretionary access control lists&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;914392"&gt;http://support.microsoft.com/default.aspx?scid=kb;EN-US;914392&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注意：该权限更改是针对Service Object ACL，而并不会影响NTFS文件属性。&lt;/p&gt;
&lt;p&gt;该设置亦在我们之前的博客中有详尽阐述，请参考：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/asiatech/archive/2009/05/22/security-audit-failure-560-caused-by-permission-setting-of-msdtc-service.aspx"&gt;http://blogs.msdn.com/asiatech/archive/2009/05/22/security-audit-failure-560-caused-by-permission-setting-of-msdtc-service.aspx&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/asiatech/archive/2009/04/13/cannot-expand-the-com-list-in-the-component-services-ui-error-0x8004e00f-or-0x8004d01b.aspx"&gt;http://blogs.msdn.com/asiatech/archive/2009/04/13/cannot-expand-the-com-list-in-the-component-services-ui-error-0x8004e00f-or-0x8004d01b.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;6. 如果以上步骤没有帮助，则需要查看Application和System的事件日志。有时我们会考虑重新构建COM+系统。这一步骤可能有些冒险，如果您之前已经安装了很多COM+应用程序，在重构COM+系统后会需要您重新安装这些COM+应用程序：&lt;/p&gt;
&lt;p&gt;&lt;i&gt;How to clean up a damaged COM+ catalog&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/?id=315296"&gt;http://support.microsoft.com/?id=315296&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在您开始第6步骤之前，请最好先向您的Application team 和Microsoft Support进行咨询。&lt;a name="_GoBack"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;谢谢！&lt;/p&gt;
&lt;p&gt;Internet 开发者支持小组&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10109223" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/asiatech_zh-cn/archive/tags/COM_2B00_/">COM+</category></item></channel></rss>