<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>AsiaTech: 微软全球技术支持中心互联网开发支持团队 官方博客</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/feed.xml</link>
    <description>我们关注各种Windows下IIS Web平台和分布式应用下疑难问题的诊断和解决方案</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:06:46 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>行动起来：转换传统桌面应用程序到UWP 并发布到Windows 应用商店！</title>
      <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/%E8%A1%8C%E5%8A%A8%E8%B5%B7%E6%9D%A5%EF%BC%9A%E8%BD%AC%E6%8D%A2%E4%BC%A0%E7%BB%9F%E6%A1%8C%E9%9D%A2%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%88%B0uwp-%E5%B9%B6%E5%8F%91%E5%B8%83%E5%88%B0windows</link>
      <pubDate>Mon, 24 Oct 2016 07:46:41 GMT</pubDate>
      <dc:creator><![CDATA[Freist]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/asiatech_zh-cn/?p=505</guid>
      <description><![CDATA[&nbsp; 一个月前微软发布了桌面应用程序转换器(Desktop Application Converter)，让我们可以把现有的桌面应用程序（.NET 4.6.1 或 Win32）轻松转换成 通用...]]></description>
      <content:encoded><![CDATA[<p>&nbsp; <p>一个月前微软发布了桌面应用程序转换器(<a href="https://msdn.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-run-desktop-app-converter">Desktop Application Converter</a>)，让我们可以把现有的桌面应用程序（.NET 4.6.1 或 Win32）轻松转换成 通用 Windows 平台 (UWP) 的程序。  <p>这实际上为开发者带来了巨大的机会。目前已经看到许多开发商主动开始这个过程并成功转换，发布到了 Windows 应用商店。 目前有超过3 亿 5000 万的设备正在运行 Windows 10，这种转换为有价值的桌面应用程序提供了前所未有的易于展现和购买的渠道。  <p>不过，在这个过程中，我也注意到有两个常见的问题︰  <p>A. 我成功转换此应用程序，它运行得相当好，但似乎没有办法直接发布到 Windows 商店？  <p>B. 真是太酷了！ 但是转换需要下载很大的image (3.5GB+) 和安装特定环境，我还没空尝试。。。。.  <p>当然也有其他的问题，比如一些细节的准备工作，如何添加一些代码来在传统桌面程序里面使用 UWP API，有其它参考链接对此做了详细解释，在这里我主要回答上面两个问题：  <p>关于问题 A，当决定转换并通过Windows应用商店发布自己的桌面应用程序时（不管会不会转换）都可以通过微软官方链接提交请求 （这个表格目前还是英文，但不难理解, 在提交的时候请注明来自国家地区，并附上本文博客链接）︰  <p><a href="https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge">https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge</a>  <p>微软应用咨询团队（包括我在内）将帮助这个过程，包括解决转换中的技术问题，创建一个用来发布应用程序的特定开发者帐户。我们需要在这里特定开发者帐户，是因为转换后的应用程序，需要"runFullTrust"，这就是转换后的程序不能直接将其发布的原因。  <p>关于 B 的问题，我开发创建了"Desktop Bridge Online" 的Azure 服务，它可以帮助开发人员上传和转换的应用程序（写了个调用DAC的 windows 服务） 在线快速 （几个点击和文件名输入）︰  <p><a href="https://bridge10.azurewebsites.net">https://bridge10.azurewebsites.net</a>  <p>这项服务可能没有涵盖所有极端复杂的安装转换场景，但会满足大多数转换需求。  <p>结果将是一个 zip 文件包含转换后的Appx程序包、测试证书和 程序包的分析文件。目前的应用程序安装程序文件大小仅限于 500 MB。如果您的安装程序是上面的文件大小，鼓励安装本地转换环境。这里是主要的用户界面︰  <p><a href="https://msdnshared.blob.core.windows.net/media/2016/10/clip_image00229.jpg"><img title="clip_image002" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/2016/10/clip_image002_thumb17.jpg" width="644" height="329"></a>  <p>转换选项如下所示参数的含义参考 <a href="https://msdn.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-run-desktop-app-converter">https://msdn.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-run-desktop-app-converter</a> ︰  <p><a href="https://msdnshared.blob.core.windows.net/media/2016/10/clip_image0035.png"><img title="clip_image003" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="clip_image003" src="https://msdnshared.blob.core.windows.net/media/2016/10/clip_image003_thumb4.png" width="404" height="484"></a>  <p>希望上面的信息和新的在线工具可以让我们更好地协助需要转换桌面应用程序的开发人员。任何反馈随时让我知道。  <p>从 Windows 应用程序咨询团队更有益的参考:  <p><a href="https://ssl.microsofttranslator.com/bv.aspx?from=&amp;to=zh-CHS&amp;a=https%3A%2F%2Fblogs.msdn.microsoft.com%2Fappconsult%2F2016%2F10%2F13%2Fdesktop-bridge-the-bridge-between-win32-apps-and-the-universal-windows-platform%2F">https://blogs.msdn.microsoft.com/appconsult/2016/10/13/desktop-bridge-the-bridge-between-win32-apps-and-the-universal-windows-platform/</a>  <p><a href="https://ssl.microsofttranslator.com/bv.aspx?from=&amp;to=zh-CHS&amp;a=https%3A%2F%2Fblogs.msdn.microsoft.com%2Fappconsult%2F2016%2F10%2F17%2Fdesktop-bridge-converting-an-installer%2F">https://blogs.msdn.microsoft.com/appconsult/2016/10/17/desktop-bridge-converting-an-installer/</a>  <p>Thanks!</p> <p>Freist Li</p>]]></content:encoded>
    </item>
    <item>
      <title>如何解决IE下载时中文文件名变乱码的问题</title>
      <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/ie</link>
      <pubDate>Tue, 11 Oct 2011 22:36:00 GMT</pubDate>
      <dc:creator><![CDATA[APGC DSI Team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/10/11/ie/</guid>
      <description><![CDATA[问题现象
当我们使用IE浏览器下载中文文件名的文件时，先弹出&ldquo;文件下载&rdquo;对话框如下：
&nbsp;
如果你点击&ldquo;保存&rdquo;的话，没有任何问题。但是如果...]]></description>
      <content:encoded><![CDATA[<h1><span style="color: #365f91;" color="#365f91">问题现象</span></h1>
<p><span style="font-size: small;" size="3">当我们使用<span style="font-family: Calibri;" face="Calibri">IE</span>浏览器下载中文文件名的文件时，先弹出&ldquo;文件下载&rdquo;对话框如下：</span></p>
<p><a href="http://ww2.sinaimg.cn/bmiddle/873bebc4gw1dlxw41i9ggj.jpg"></a><span style="font-size: small; font-family: Calibri;" size="3" face="Calibri">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/7103.1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7103.1.png"><img height="246" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/7103.1.png" original-url="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" /></a></span></p>
<p><span style="font-size: small;" size="3">如果你点击&ldquo;保存&rdquo;的话，没有任何问题。但是如果你点击&ldquo;打开&rdquo;按钮的话，你会发现文件名变成了一串乱码，见下图</span></p>
<p><a href="http://ww3.sinaimg.cn/bmiddle/873bebc4gw1dlxw6nafl3j.jpg"></a><span style="font-size: small; font-family: Calibri;" size="3" face="Calibri">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/6153.2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/6153.2.png"><img height="212" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/6153.2.png" original-url="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" /></a></span></p>
<h1><span style="color: #365f91;" color="#365f91">背景</span></h1>
<p><span style="font-size: small;" size="3">文件下载功能所对应的服务端<span style="font-family: Calibri;" face="Calibri">ASP.NET</span>代码如下：</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String value = "test";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Clear();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ClearHeaders();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Buffer = false;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ContentType = "application/octet-stream";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.ContentEncoding = System.Text.Encoding.UTF8;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String filename = HttpUtility.UrlEncode("中文.txt", System.Text.Encoding.UTF8);&nbsp;&nbsp;&nbsp; //对中文文件名进行HTML转码</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.AddHeader("CONTENT-LENGTH", value.Length.ToString());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.CacheControl = "public";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(value);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Flush();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.End();</p>
<p><span style="font-size: small; font-family: Calibri;" size="3" face="Calibri">&nbsp;</span></p>
<h1><span style="color: #365f91;" color="#365f91">环境</span></h1>
<p><span style="font-size: small;" size="3">实际上此问题只在<span style="font-family: Calibri;" face="Calibri">IE6</span>、<span style="font-family: Calibri;" face="Calibri">IE7</span>的环境下发生，<span style="font-family: Calibri;" face="Calibri">IE8</span>以上版本没有问题</span></p>
<p><span style="font-size: small; font-family: Calibri;" size="3" face="Calibri">&nbsp;</span></p>
<h1><span style="color: #365f91;" color="#365f91">问题起因</span></h1>
<p><span style="font-size: small;" size="3">如果你通过</span><a href="http://www.fiddler2.com/fiddler2/"><span style="font-size: small; color: #0000ff; font-family: Calibri;" color="#0000ff" size="3" face="Calibri">Fiddler</span></a><span style="font-size: small;" size="3">之类的工具来抓取<span style="font-family: Calibri;" face="Calibri">HTTP</span>包的话，可以看到服务器段发回来的<span style="font-family: Calibri;" face="Calibri">Response Header</span>如下。</span></p>
<p><br />HTTP/1.1 200 OK<br />Server: ASP.NET Development Server/9.0.0.0<br />Date: Sun, 09 Oct 2011 07:32:12 GMT<br />X-AspNet-Version: 2.0.50727<br />Content-Length: 4<br />Content-Disposition: attachment; filename=%e4%b8%ad%e6%96%87.txt<br />Cache-Control: public<br />Content-Type: application/octet-stream<br />Connection: Close</p>
<p><span style="font-size: small; font-family: Calibri;" size="3" face="Calibri">&nbsp;</span><span style="font-size: small;" size="3">实际上文件名是由<span style="font-family: Calibri;" face="Calibri">Content-Disposition</span>头里面的<span style="font-family: Calibri;" face="Calibri">filename</span>信息来决定的，这是一串经过<span style="font-family: Calibri;" face="Calibri">URLEncode</span>之后的<span style="font-family: Calibri;" face="Calibri">UTF-8</span>码，并不是乱码，它所对应的文字信息正是<span style="font-family: Calibri;" face="Calibri">&rdquo;</span>中文<span style="font-family: Calibri;" face="Calibri">&rdquo;</span>两个字。对于<span style="font-family: Calibri;" face="Calibri">IE6</span>、<span style="font-family: Calibri;" face="Calibri">IE7</span>来讲，在弹出&ldquo;文件下载&rdquo;对话框的时候<span style="font-family: Calibri;" face="Calibri">IE</span>浏览器实际上已经把文件保存在临时目录，而文件名并没有做转码，所以在临时目录里面的文件名就是<b><span style="font-family: Calibri;" face="Calibri">%e4%b8%ad%e6%96%87[1].txt</span></b>。</span></p>
<p><span style="font-size: small;" size="3">如果你点击&ldquo;保存&rdquo;按钮的话，依然是由<span style="font-family: Calibri;" face="Calibri">IE</span>浏览器在处理保存文件的工作，所以它会自动转码；而当你点击&ldquo;打开&rdquo;按钮的时候，<span style="font-family: Calibri;" face="Calibri">IE</span>浏览器只是负责通知相应的应用程序来打开临时目录里的文件，所以我们就看到了文件名在记事本里面显示为乱码的现象。</span></p>
<p><span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"></span>&nbsp;</p>
<h1><span style="color: #365f91;" color="#365f91">解决办法</span></h1>
<p><span style="font-size: small;" size="3"><b>我们所推荐的方式是升级到<span style="font-family: Calibri;" face="Calibri">IE8</span></b><b>或者以上版本。</b>如果不升级，针对<span style="font-family: Calibri;" face="Calibri">IE6</span>没有任何办法，针对<span style="font-family: Calibri;" face="Calibri">IE7</span>可以采取以下方法。</span></p>
<p>1)&nbsp;&nbsp;&nbsp; 下载最新的IE累积补丁。可以先访问<a href="http://technet.microsoft.com/en-us/cc264855.aspx"><span style="color: #0000ff;" color="#0000ff">http://technet.microsoft.com/en-us/cc264855.aspx</span></a>找到所有的最新安全补丁。</p>
<p>注意：请访问英文网站，因为中文网站有时候可能没有及时更新</p>
<p>从列表里面找到Cumulative Security Update for Internet Explorer，如下图</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/1425.3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/1425.3.png"><img height="257" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/1425.3.png" original-url="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" /></a></p>
<p><br />进入相关链接(在此时最新的IE补丁是Microsoft Security Bulletin MS11-057)，找到你的操作系统所对应的版本，比如我XP SP3的机器所下载的就是IE7-WindowsXP-KB2559049-x86-ENU.exe<br /><br /></p>
<p><span style="font-size: small; font-family: Calibri;" size="3" face="Calibri">2)</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用以下命令来打补丁<br /><b>IE7-WindowsXP-KB2559049-x86-ENU.exe /b:sp3qfe</b><br />注意：由于我的是XP SP3，所以/b后面对应的是sp3qfe；如果你是SP2的机器，就要用sp2qfe</p>
<p>3)&nbsp;&nbsp;&nbsp; &nbsp;打完补丁添加以下注册表键值<br />[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_ALLOW_LONG_INTERNATIONAL_FILENAMES]<br />"iexplore.exe"=dword:00000001<br /><span style="font-size: small; font-family: Calibri;" size="3" face="Calibri"></span></p>
<p><span style="font-size: small; font-family: Calibri;" size="3" face="Calibri">4)</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重起机器再测试</p>
<p>&nbsp;</p>
<p>Zhixing From APGC DSI Team</p>]]></content:encoded>
    </item>
    <item>
      <title>在SharePoint Web应用中访问Session对象时发生System.NullReferenceException异常</title>
      <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/sharepoint-websessionsystem-nullreferenceexception</link>
      <pubDate>Mon, 12 Sep 2011 19:18:00 GMT</pubDate>
      <dc:creator><![CDATA[APGC DSI Team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/09/12/sharepoint-websessionsystem-nullreferenceexception/</guid>
      <description><![CDATA[我们有个客户在SharePoint Web应用中集成自定义的代码到时，经常遇到System.NullReferenceException异常。通常来说，如果程序配置成了Web...]]></description>
      <content:encoded><![CDATA[<p align="left">我们有个客户在SharePoint Web应用中集成自定义的代码到时，经常遇到System.NullReferenceException异常。通常来说，如果程序配置成了Web Garden或者非Session Affinity的负载均衡，现象容易出现。</p>
<p align="left">但这次情况有所不同。</p>
<p align="left">通过.NET异常捕获，发现它是在访问Session对象的时候发生的。</p>
<table style="background-color: #d8dede;" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="599">
<p align="left"><span style="font-size: small;" size="3">000007ff`00fc2067 e8d4bb58ec call system_web_ni+0x25dc40 (000007fe`ed54dc40) (System.Web.HttpContext.get_Current(), mdToken: 060003c6)</span></p>
<p align="left"><span style="font-size: small;" size="3">000007ff`00fc206c 803800 cmp byte ptr [rax],0</span></p>
<p align="left"><span style="font-size: small;" size="3">000007ff`00fc206f 488bc8 mov rcx,rax</span></p>
<p align="left"><span style="font-size: small;" size="3">000007ff`00fc2072 e8511453ec call system_web_ni+0x2034c8 (000007fe`ed4f34c8) (System.Web.HttpContext.get_Session(), mdToken: 060003e2)</span></p>
<p align="left"><span style="font-size: small;" size="3">000007ff`00fc2077 48bb98c6a37f01000000 mov rbx,17FA3C698h</span></p>
<p align="left"><span style="font-size: small;" size="3">000007ff`00fc2081 488b13 mov rdx,qword ptr [rbx]</span></p>
<p align="left"><span style="font-size: small;" size="3">&gt;&gt;&gt; 000007ff`00fc2084 803800 cmp byte ptr [rax],0</span></p>
</td>
</tr>
</tbody>
</table>
<p align="left">代码片段如下：</p>
<p align="left">HttpContext.Current.Session["userdata"] = "123";</p>
<p align="left">为了解决这类问题，我们在Web.Config中显式地将EnableSessionState设为True。</p>
<p align="left">&lt;%@ Page EnableSessionState="True" %&gt;</p>
<p align="left">并确保所有相关的单独页面不在页面的级别设置这个值为False。之后，问题依然发生，在memory dump中，System.Web.SessionState.InProcSessionState对象不再出现。</p>
<p align="left">再一次检查了SharePoint的Web.Config文件，发现ASP.NET的session模块被注释掉了：</p>
<p align="left">&lt;!-- &lt;add name="Session" type="System.Web.SessionState.SessionStateModule"/&gt; --&gt;</p>
<p align="left">&nbsp;</p>
<p align="left">结论</p>
<p align="left">==========</p>
<p align="left">对于当前的SharePoint Web应用，Session对象是默认不可访问的，因为SharePoint应用会移除Session模块，并设置EnableSessionState为False。当把Session模块加回去，并在Web.Config中设置EnableSessionState为True后，抛System.NullReferenceException异常的问题就解决了。</p>
<p align="left">Freist from APGC DSI Team</p>]]></content:encoded>
    </item>
    <item>
      <title>匿名远程访问COM+应用时被拒绝访问的问题</title>
      <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/com</link>
      <pubDate>Sun, 28 Aug 2011 20:23:23 GMT</pubDate>
      <dc:creator><![CDATA[APGC DSI Team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/08/28/com/</guid>
      <description><![CDATA[&nbsp;
有个客户在一个Win2k3的域下建立了一个COM+应用服务器，而客户端是一个工作组机器。
为了重现这个场景，我们按照以下的方式，允许以匿名的方式访问调用COM+应用：如何以匿名方式远...]]></description>
      <content:encoded><![CDATA[<p>&nbsp;</p>
<p><span style="font-size: small; font-family: verdana,geneva;">有个客户在一个Win2k3的域下建立了一个COM+应用服务器，而客户端是一个工作组机器。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">为了重现这个场景，我们按照以下的方式，允许以匿名的方式访问调用COM+应用：<a href="http://blogs.msdn.com/b/asiatech/archive/2009/05/04/how-to-call-com-remotely-with-anonymous-user.aspx">如何以匿名方式远程调用COM+</a>，但还是在客户端出现了拒绝访问的错误。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">在网络监视器中显示了拒绝访问错误（status=0x5）被返回到服务端。</span></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/3348.COM+E.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/3348.COM_2B00_E.jpg"><img alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/3348.COM+E.jpg" original-url="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" /></a></p>
<p><span style="font-size: small; font-family: verdana,geneva;">客户用很多客户端在远程调用这个COM+应用，不能把它们全添加到这个域里。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">我们通过以下方式进行一个快速的测试：</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">1.在两台机器上创建相同的用户名和密码。将COM+认证从&ldquo;交互用户（Interactive User）&rdquo;改变为这个测试账号。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">2.在COM+应用服务器端，启用机器上的安全日志。在本地安全策略-&gt;本地策略-&gt;审计策略下，启用账号登录事件和登录事件的错误审计</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">在一个域控制器替代本地安全策略的情况下，我们需要检查域控制器安全策略。之后做一个&rdquo;gpupdate /force&rdquo;。做这个就是为了确保在安全日志里生成合适的事件日志项。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">3.重演一遍这个问题，发现安全日志里有这个类型的错误：</span></p>
<table cellspacing="0" cellpadding="0" align="left" border="1">
<tbody>
<tr>
<td valign="top" width="329">
<p><span style="font-size: small; font-family: verdana,geneva;">Event Type: Failure Audit</span><br /><span style="font-size: small; font-family: verdana,geneva;">Event Source: Security</span><br /><span style="font-size: small; font-family: verdana,geneva;">Event Category: Logon/Logoff </span><br /><span style="font-size: small; font-family: verdana,geneva;">Event ID: 534</span><br /><span style="font-size: small; font-family: verdana,geneva;">Description:</span><br /><span style="font-size: small; font-family: verdana,geneva;">Logon Failure:</span><br /><span style="font-size: small; font-family: verdana,geneva;">Reason: The user has not been granted the requested</span><br /><span style="font-size: small; font-family: verdana,geneva;">logon type at this machine</span><br /><span style="font-size: small; font-family: verdana,geneva;">User Name: Domain Test User account</span><br /><span style="font-size: small; font-family: verdana,geneva;">Logon Type: 8</span><br /><span style="font-size: small; font-family: verdana,geneva;">Logon Process: Advapi</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: small; font-family: verdana,geneva;">&nbsp;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&nbsp;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&nbsp;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&nbsp;</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: small; font-family: verdana,geneva;">这里的登陆类型（Logon Type）8表示&ldquo;通过网络访问此电脑&rdquo;的用户权限被禁止。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">4.检查Win2K3域，发现客户未被赋予普通域用户&ldquo;通过网络访问此电脑&rdquo;的权限。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">为了修正这个错误，我们在域控制器（DC）上创建了一个测试组织单位（OU），并将这个COM+应用服务器移到测试组织单位（OU）中，确保应用于此的域组策略没有定义&ldquo;通过网络访问此电脑&rdquo;的用户权限。然后在这个COM+应用服务器中，打开GPEDIT.MSC，进入本地安全策略-&gt;本地策略-&gt;用户权限，给所有人（everyone）&ldquo;通过网络访问此电脑&rdquo;的权限。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">这个方案最终可以运行正常的。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">Freist from APGC DSI Team</span></p>]]></content:encoded>
    </item>
    <item>
      <title>在预编译 (Pre-Compiled) 的ASP.NET应用中页面设置失效的问题</title>
      <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/pre-compiled-asp-net</link>
      <pubDate>Sun, 28 Aug 2011 19:47:10 GMT</pubDate>
      <dc:creator><![CDATA[APGC DSI Team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/08/28/pre-compiled-asp-net/</guid>
      <description><![CDATA[我的客户有一个验证视图（viewstate）MAC失败的问题。作为应急措施，他想在找出最终的解决方案之前，禁用视图MAC验证。然而当他在配置文件中添加了如下的设置后，还是有问题。
&lt;pages...]]></description>
      <content:encoded><![CDATA[<p align="left">我的客户有一个验证视图（viewstate）MAC失败的问题。作为应急措施，他想在找出最终的解决方案之前，禁用视图MAC验证。然而当他在配置文件中添加了如下的设置后，还是有问题。</p>
<p align="left"><i>&lt;pages validateRequest="false" enableEventValidation="false" enableViewStateMac="false" viewStateEncryptionMode="Never"&gt;</i></p>
<p align="left">客户的应用是一个预编译 (Pre_compiled) 的ASP.NET应用，且可更新(updateable)的选项被禁用。看了由编译器通过上述设置生成的代码后，我们发现这些设置是硬编码。所以这意味着仅仅简单地在web.config里添加上述设置，并不会影响预编译的应用。为了使其生效，必须重新编译整个应用。</p>
<p align="left"><i>&nbsp;[DebuggerNonUserCode]</i></p>
<p align="left"><i>private void __BuildControlTree(default_aspx __ctrl)</i></p>
<p align="left"><i>{</i></p>
<p align="left"><b><i>__ctrl.EnableViewStateMac = false;</i></b></p>
<p align="left"><b><i>__ctrl.EnableEventValidation = false;</i></b></p>
<p align="left"><b><i>__ctrl.ViewStateEncryptionMode = ViewStateEncryptionMode.Never;</i></b></p>
<p align="left">这是一个By-Design的行为。</p>
<p align="left">ASP.NET预编译概述如下：</p>
<p align="left"><a href="http://msdn.microsoft.com/en-us/library/bb398860.aspx">http://msdn.microsoft.com/en-us/library/bb398860.aspx</a></p>
<p align="left">Wei Zhao from AGPC DSI Team</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>委托非管理员账号回收IIS 7远程应用池的问题</title>
      <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/iis-7</link>
      <pubDate>Sun, 28 Aug 2011 19:43:06 GMT</pubDate>
      <dc:creator><![CDATA[APGC DSI Team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/08/28/iis-7/</guid>
      <description><![CDATA[最近客户频繁问到的一个问题是，当用户没有获得管理员权限时，是否能远程地回收一个IIS主机上的应用池。不幸的是，应用池的回收需要管理员权限才能运行。但是，通过使用MSDeploy，我们能设定recycl...]]></description>
      <content:encoded><![CDATA[<p>最近客户频繁问到的一个问题是，当用户没有获得管理员权限时，是否能远程地回收一个IIS主机上的应用池。不幸的是，应用池的回收需要管理员权限才能运行。但是，通过使用MSDeploy，我们能设定recycleAPP provider作为委托，并将其运行在提升后的管理员权限下。然后，通过使用一个本地的标准用户账号或者一个IIS管理员账号，我们能在远程调用recylceApp provider，通过这个提升了权限的recycleApp provider，只要此用户在IIS里有应用池的访问权限，就能远程地回收那些应用池了。</p>
<p>可以通过以下步骤解决此问题：</p>
<p>1) 安装或确认IIS管理服务被激活。<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/20/17/0184.RMIIS1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/0184.RMIIS1.jpg"> </a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/0383.RMIIS1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/0383.RMIIS1.jpg"><img height="69" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/0383.RMIIS1.jpg" original-url="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" /></a></p>
<p>2) 安装服务器和远程机器上最新版本的Web Deploy。相关资料见： <a href="http://www.iis.net/download/WebDeploy">http://www.iis.net/download/WebDeploy</a></p>
<p>3) 在服务器端的IIS中，选择管理服务。勾选&ldquo;启用远程连接&rdquo;，如果管理服务（WMSVC）正在停止状态，就启动它。<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/20/17/6471.RMIIS2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/6471.RMIIS2.jpg"> </a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/7752.RMIIS2.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7752.RMIIS2.jpg"><img height="145" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/7752.RMIIS2.jpg" original-url="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" /></a></p>
<p>4) 还是在服务器端，选择管理服务委托，然后选择recycleApp provider。我在IIS的机器里建立了一个管理员账号，叫做Recycler，它将得到提升的权限，以回收应用池。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/4263.RMIIS3.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/4263.RMIIS3.jpg"><img height="398" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/4263.RMIIS3.jpg" original-url="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" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/20/17/0131.RMIIS3.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/0131.RMIIS3.jpg"></a></p>
<p>5) 还是在服务器端，选择&ldquo;IIS管理员用户&rdquo;并添加所需的用户。在此例中，我添加了IISUser1。现在，到你所希望被允许执行远程回收的站点，在行为面板中选择&ldquo;IIS管理员权限&rdquo;和&ldquo;允许用户&rdquo;。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/5661.RMIIS4.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/5661.RMIIS4.jpg"><img height="93" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/5661.RMIIS4.jpg" original-url="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" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/1884.RMIIS5.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/1884.RMIIS5.jpg"><img height="107" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/1884.RMIIS5.jpg" original-url="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" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/20/17/8306.RMIIS4.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/8306.RMIIS4.jpg"></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/20/17/2500.RMIIS5.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/2500.RMIIS5.jpg"></a></p>
<p>6) 最后，我们现在可以从远程机器运行msdeploy命令进行测试。</p>
<p>msdeploy.exe -verb:sync -source:recycleApp -dest:recycleApp="Default Web Site",wmsvc=remote-computer,userName=IISManagerUserName,Password=IISManagerUserPassword,recycleMode="RecyleAppPool" &ndash;allowUntrusted</p>
<p>对于我们的例子，我们将运行如下：</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/7608.RMIIS6.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7608.RMIIS6.jpg"><img alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/7608.RMIIS6.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7608.RMIIS6.jpg" border="0" /></a></p>
<p>注：如果远程机器上没有合法证书，请使用-allowUntrusted标记。这能忽略那些证书错误。</p>
<p>更多关于Web Deploy recycleApp provider的信息见：<a href="http://technet.microsoft.com/en-us/library/ee522997(WS.10).aspx">http://technet.microsoft.com/en-us/library/ee522997(WS.10).aspx</a></p>
<p>顺带一提，在某些情境，即使你所有配置都正确，你也可能在运行命令时看到如下的信息。</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/1805.RMIIS7.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/1805.RMIIS7.jpg"><img height="56" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/1805.RMIIS7.jpg" original-url="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" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/20/17/3348.RMIIS7.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/3348.RMIIS7.jpg"></a></p>
<p>我有一个客户遇到了这个错误，通过测试能够按下面所述的步骤重现。如果没有安装IIS管理服务角色，就安装msdeploy包；或者当msdeploy在服务器上被激活，而管理服务角色被删了然后重装，缺少必要的handle。要解决此问题，只需重装msdeploy即可。</p>
<p>Matthew from APGC DSI Team</p>
<p><span style="font-size: small; font-family: Calibri;" size="3" face="Calibri">&nbsp;</span></p>]]></content:encoded>
    </item>
    <item>
      <title>IE访问IIS7.5架设的需Windows认证的网站时出现不停弹框的问题</title>
      <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/ieiis7-5windows</link>
      <pubDate>Tue, 02 Aug 2011 22:35:22 GMT</pubDate>
      <dc:creator><![CDATA[APGC DSI Team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/08/02/ieiis7-5windows/</guid>
      <description><![CDATA[这是一个安装了IIS的Windows...]]></description>
      <content:encoded><![CDATA[<p><span style="font-size: small; font-family: verdana,geneva;">这是一个安装了<span face="Calibri">IIS</span>的<span face="Calibri">Windows 2008</span>系统，它已运行了一些<span face="Calibri">Sharepoint</span>站点。这些<span face="Calibri">Sharepoint</span>站点使用<span face="Calibri">Windows</span>认证，且他们都正常运行。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">现在在此服务器上部署了一个新的Web站点，并启用了Windows认证（采用内核态），但当通过<a href="http://mywebserver:8080/">HTTP://MyWebServer:8080</a>或<a href="http://MyWebServer.MyDomain.com:8080">HTTP://MyWebServer.MyDomain.com:8080</a>访问此站点时，IE会不停地请求认证。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">首先，我们用域认证信息（<span size="3">domain credentials）测试了基本认证（basic authentication），它是成功的。然后我们启用了登陆事件的审查（audit）</span>功能；不幸的是，不管是否成功进入了Web站点，我们都没能发现任何登陆事件的记录。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">为了找出与此有关的更多信息，我们启用了IIS FREB跟踪功能，发现&ldquo;IIS Web Core&rdquo;设置了401状态，其错误信息是&ldquo;拒绝访问&rdquo;。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/3566.401.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/3566.401.jpg"><img alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/3566.401.jpg" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/3566.401.jpg" border="0" /></a></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/20/17/1325.IE1.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-20-17/1325.IE1.jpg"></a></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">现在，我们不得不回来看看对Kerberos纠错最有用的信息&mdash;&mdash;网络监视跟踪记录。从捕获的信息来看，我们确认了Kerberos错误是<b>KRB_AP_ERR_MODIFIED</b><b>。</b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">有两个引发该错误的常见原因：</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">1. 错误的DNS设定</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">2. 客户端发送的ticket被用不同的密钥加密/解密。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">我们用netmon确认了DNS的运行在意料之中。我们用Ldp工具审查SPN，当查询SPN时得到了如下的结果</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><i>Dn: CN=<b>MyWebServer</b>,&hellip;&hellip;..</i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><i>&hellip;&hellip;</i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><i>servicePrincipalName (11): </i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><i>&hellip;.</i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b><i>HOST/MyWebServer.MyDomain.com</i></b><i>;</i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b><i>HOST/MyWebServer</i></b><i>; </i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><i>&hellip;.</i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><i>Dn: CN=<b>SPS_Service_Account</b>&hellip;&hellip;.</i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><i>&hellip;.</i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><i>servicePrincipalName (18): </i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><i>&hellip;&hellip;</i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b><i>HTTP/ MyWebServer.MyDomain.com;</i></b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b><i>HTTP/ MyWebServer</i></b><i>; </i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><i>&hellip;&hellip;</i></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">我们能看到，HTTP/MyWebServer是SharePoint服务里注册的账号（被用来运行SharePoint应用池），运行在内核态认证的IIS 7以上服务器是不需要它的。然后回IIS MMC查看，我们发现所有SPS站点都采用用户态的Windows认证，它需要把SPN账号注册到应用池认证中。这就是SPS站点以Windows认证的方式运行的原因。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">新添加的站点使用用户态Windows认证，需要在机器账号中注册的SPN的账号。这与SharePoint站点产生了冲突。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">这解释了为何我们得到了<b>KRB_AP_ERR_MODIFIED</b>错误。当IE访问<a href="http://mywebserver:8080/">http://MyWebServer:8080</a>时，请求HTTP/MyWebServer的ticket，它被注册在SharePoint服务的账号里。IE把该ticket传递给Web服务器。在服务器端，IIS尝试使用机器账号对该ticket解密。这必然会失败，因为它被另一个密钥解密。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">为了解决此问题：</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">1. 我们给新添加的站点，如MySite，使用host头，将其加到站点绑定中。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">2．注册SPN HTTP/MySite的本机账号</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">3．现在，我们使用<a href="http://mysite/">http://MySite</a>访问此Web站点。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">随后，我们做以下SPN的配置：</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">MyWebServer:</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">HTTP/MySite</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">HTTP/MySite.MyDomain.com</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">HOST/ MyWebServer</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">HOST/ MyWebServer.MyDomain.com</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">SPS service account:</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">HTTP/ MyWebServer</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">HTTP/ MyWebServer. MyDomain.com</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">如下配置IIS:</span></p>
<table style="width: 643px;" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="109"></td>
<td valign="top" width="228">
<p><span style="font-size: small; font-family: verdana,geneva;">SPS 站点</span></p>
</td>
<td valign="top" width="306">
<p><span style="font-size: small; font-family: verdana,geneva;">MySite</span></p>
</td>
</tr>
<tr>
<td valign="top" width="109">
<p><span style="font-size: small; font-family: verdana,geneva;">SPN</span></p>
</td>
<td valign="top" width="228">
<p><span style="font-size: small; font-family: verdana,geneva;">HTTP/MyWebServer</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">注册在SPS服务账号中</span></p>
</td>
<td valign="top" width="306">
<p><span style="font-size: small; font-family: verdana,geneva;">HTTP/MySite</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">注册在机器账号MyWebServer中</span></p>
</td>
</tr>
<tr>
<td valign="top" width="109">
<p><span style="font-size: small; font-family: verdana,geneva;">绑定</span></p>
</td>
<td valign="top" width="228">
<p><span style="font-size: small; font-family: verdana,geneva;">所有可用的IP</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">无主机名</span></p>
</td>
<td valign="top" width="306">
<p><span style="font-size: small; font-family: verdana,geneva;">所有可用的IP</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">主机名: MySite</span></p>
</td>
</tr>
<tr>
<td valign="top" width="109">
<p><span style="font-size: small; font-family: verdana,geneva;">Windows</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">认证</span></p>
</td>
<td valign="top" width="228">
<p><span style="font-size: small; font-family: verdana,geneva;">用户态</span></p>
</td>
<td valign="top" width="306">
<p><span style="font-size: small; font-family: verdana,geneva;">内核态</span></p>
</td>
</tr>
<tr>
<td valign="top" width="109">
<p><span style="font-size: small; font-family: verdana,geneva;">应用池认证</span></p>
</td>
<td valign="top" width="228">
<p><span style="font-size: small; font-family: verdana,geneva;">SPS 服务账号</span></p>
</td>
<td valign="top" width="306">
<p><span style="font-size: small; font-family: verdana,geneva;">随意</span></p>
</td>
</tr>
<tr>
<td valign="top" width="109">
<p><span style="font-size: small; font-family: verdana,geneva;">如何访问</span></p>
</td>
<td valign="top" width="228">
<p><span style="font-size: small; font-family: verdana,geneva;"><a href="http://mywebserver/">HTTP://MyWebServer</a></span></p>
</td>
<td valign="top" width="306">
<p><span style="font-size: small; font-family: verdana,geneva;"><a href="http://mysite/">HTTP://MySite</a></span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: small; font-family: verdana,geneva;">顺带一提，若我们想用内核态认证（建议使用），并把SPN注册在应用池认证中，我们可以设置useAppPoolCredentials为true。这里有一个配置的例子。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;system.webServer&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;security&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;authentication&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;windowsAuthentication enabled="true" useKernelMode="true" <b>useAppPoolCredentials="true"</b> /&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/authentication&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/security&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/system.webServer&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">Wei Zhao from DSI team</span></p>]]></content:encoded>
    </item>
    <item>
      <title>如何解决请求超时的HttpException异常 (ASP.NET 2.0 32-bit)</title>
      <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/httpexception-asp-net-2-0-32-bit</link>
      <pubDate>Mon, 18 Jul 2011 23:50:00 GMT</pubDate>
      <dc:creator><![CDATA[APGC DSI Team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/07/18/httpexception-asp-net-2-0-32-bit/</guid>
      <description><![CDATA[注意：下列的步骤适用于ASP.NET 2.0(32 bit)...]]></description>
      <content:encoded><![CDATA[<p><span style="font-size: small; font-family: verdana,geneva;"><b>注意：</b>下列的步骤适用于ASP.NET 2.0(32 bit) 。没有测试过其他版本的ASP.NET。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b>症状</b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b>========</b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">应用事件记录里可能出现下方的警告文字：</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/7178.Timeout.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-69/7178.Timeout.jpg"><img height="352" alt="" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/42/69/7178.Timeout.jpg" original-url="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" /></a></span></p>
<p></p>
<p><span style="font-size: small; font-family: verdana,geneva;">这种问题基本上发生在当ASP.NET的服务器端执行请求的时间超过所允许的最大时间之时。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">最大超时时间可以在配置文件的httpRuntime元素的executionTimeout属性中设置。（在.Net 2.0中，默认值是110秒</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">如何重现</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b>===============</b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">创建一个ASPX页面，命名为sleep.aspx。它将睡眠20秒：</span></p>
<table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="590">
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;%@ Page Language="C#" %&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;%@ import Namespace="System.Diagnostics" %&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;script runat="server"&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">protected void Page_Load(object sender, EventArgs e)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">{</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">DateTime time = DateTime.Now;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">Response.Write(String.Format("Time: {0}:{1}:{2}", time.Hour, time.Minute, time.Second) +</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">"\tCurrent process: " + Process.GetCurrentProcess().Id.ToString());</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">Response.Write("&lt;BR&gt;");</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">Response.Write(String.Format("This application is running in {0}", System.Environment.Version.ToString()));</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">System.Threading.Thread.Sleep(20000);</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">}</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/script&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;html&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;head&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;title&gt;ASP.NET Simple Page&lt;/title&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/head&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;body bgcolor="#FFFFFF"&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;p&gt;&lt;asp:label id="Message" runat="server" /&gt;&lt;/p&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/body&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/html&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: small; font-family: verdana,geneva;">创建一个web.config文件，将其放在与sleep.aspx同一目录下。在此文件中设置最大超时时间为5秒。</span></p>
<table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="590">
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;configuration&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;system.web&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;httpRuntime executionTimeout="5"/&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/system.web&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/configuration&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: small; font-family: verdana,geneva;">使用你的浏览器访问sleep.aspx，过一会儿你就将收到错误信息：&ldquo;[HttpException (0x80004005): Request timed out.]&rdquo;。相关的警告信息也将出现在事件日志里。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b>注意：</b><b> </b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">你可能发现这个错误信息&mdash;&mdash;&ldquo;[HttpException (0x80004005): Request timed out.]&rdquo;&mdash;&mdash;并没有在5秒后立即出现。ASP.NET在内部使用一个定时器（System.Threading.Timer 的一个实例）来调用取消请求的操作。这个定时器15秒触发一次。因此实际上请求可能在5秒到20秒之间的任意时间发生超时。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">请参考</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><a href="http://blogs.msdn.com/b/pedram/archive/2007/10/02/how-the-execution-timeout-is-managed-in-asp-net.aspx">http://blogs.msdn.com/b/pedram/archive/2007/10/02/how-the-execution-timeout-is-managed-in-asp-net.aspx</a></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b>如何捕获&ldquo;</b><b>[HttpException (0x80004005): Request timed out.]</b><b>&rdquo;的</b><b>转储文件</b><b></b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b>===============================================================</b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">当发生HttpException异常时，人们常犯的一种*<b>错误</b>*是设置一个debugger来监视HttpException异常，并生成转储文件。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">实际上当发生请求超时之时，ASP.NET尽管显示给用户看地是HttpException，但是抛出的是<b>ThreadAbortException</b><b>y</b><b>异常。</b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">为所有ThreadAbortException异常生成转储文件是不可行的。为了解决这个问题，我们必须在ThreadAboutException异常被抛出设定断点。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">我用如下的步骤来捕获错误信息&ldquo;[HttpException (0x80004005): Request timed out.]&rdquo;的转储文件。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">将下方的文本保存成aspnet_timeout.cfg，放在c:\目录下。</span></p>
<table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="578">
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;ADPlus Version='2'&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;!-- Configuring ADPlus to log all first chance exceptions --&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;!-- Will still create full dump for any type of second chance exceptions --&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;KeyWords&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;keyword Name="loadbysos"&gt; .loadby sos mscorwks &lt;/keyword&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;keyword Name="GetJIT"&gt; !name2ee System.web.dll System.Web.RequestTimeoutManager.CancelTimedOutRequests &lt;/keyword&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;keyword Name="JITAddress"&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} &lt;/keyword&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/KeyWords&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;Settings&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;Option&gt; NoDumpOnFirst &lt;/Option&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;RunMode&gt; CRASH &lt;/RunMode&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/Settings&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;PreCommands&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;DebugActions&gt; loadbysos; GetJIT; JITAddress &lt;/DebugActions&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/PreCommands&gt;</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">&lt;/ADPlus&gt;</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: small; font-family: verdana,geneva;">用*<b>管理员权限</b><b>*</b>打开命令行，转到Windows的Debugging工具的安装目录（默认路径为%programfiles%\Debugging Tools for Windows (x86)）</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">运行以下命令：</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b>%windir%\system32\inetsrv\appcmd list wp</b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">你将得到发生问题的应用池的工作进程的PID。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">然后运行以下命令：</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b>adplus.exe -c c:\aspnet_timeout.cfg -o &lt;output folder&gt; -p &lt;pid of problematic apppool&gt;</b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">其中&lt;output foder&gt;是你想存放转储文件的存在的目录。</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">这样就会跳出一个cdb.exe窗口。请保持改窗口运行，因为它将会检测有问题的应用池。如果发生&ldquo;请求超时&rdquo;，他就会<b>自动</b>生成转储文件.</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b>如何通过</b><b>转储文件找到是哪个操作引发的&ldquo;请求超时&rdquo;</b><b></b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;"><b>===========================================================</b></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">使用windbg打开转储文件。然后加载sos</span></p>
<table cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="578">
<p><span style="font-size: small; font-family: verdana,geneva;">0:025&gt; .loadby sos mscorwks</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: small; font-family: verdana,geneva;">转储（dump）当前线程堆里的所有对象，你将发现System.Threading.Thread对象:</span></p>
<table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="590">
<p><span style="font-size: small; font-family: verdana,geneva;">0:025&gt; !dso</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">OS Thread Id: 0x444 (25)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">ESP/REG Object Name</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">eax 05baf5b0 System.Threading.Thread</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">ebx 05baf5b0 System.Threading.Thread</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">ecx 01c4f300 System.Web.RequestTimeoutManager+RequestTimeoutEntry</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">esi 01c4f300 System.Web.RequestTimeoutManager+RequestTimeoutEntry</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff03c 05b33ad4 System.Web.Util.DoubleLinkList</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff040 01c4b508 System.Collections.ArrayList</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff044 05b3397c System.Web.RequestTimeoutManager</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff064 01c4aa94 System.Threading.ContextCallback</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff068 05b3397c System.Web.RequestTimeoutManager</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff088 05b33b30 System.Threading._TimerCallback</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff094 01c4b4e4 System.Threading.ExecutionContext</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff0a0 01c4b4e4 System.Threading.ExecutionContext</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff0a4 05b33b30 System.Threading._TimerCallback</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff0b0 05b33b30 System.Threading._TimerCallback</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff1c0 01c4b090 System.Collections.Hashtable+HashtableEnumerator</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff25c 05b33b30 System.Threading._TimerCallback</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0f1ff260 05b33b30 System.Threading._TimerCallback</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: small; font-family: verdana,geneva;">转储（Dump） System.Threading.Thread对象中的信息，你将找到DONT_USE_InternalThread字段:</span></p>
<table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="590">
<p><span style="font-size: small; font-family: verdana,geneva;">0:025&gt; !do 05baf5b0</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">Name: System.Threading.Thread</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">MethodTable: 0e3c10f8</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">EEClass: 0e17d994</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">Size: 56(0x38) bytes</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">(C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">Fields:</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">MT Field Offset Type VT Attr Value Name</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3b1f08 400063f 4 ....Contexts.Context 0 instance 05b20528 m_Context</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3bd818 4000640 8 ....ExecutionContext 0 instance 01c4d2c8 m_ExecutionContext</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3c0b24 4000641 c System.String 0 instance 00000000 m_Name</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3c0f88 4000642 10 System.Delegate 0 instance 00000000 m_Delegate</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3ba220 4000643 14 System.Object[][] 0 instance 00000000 m_ThreadStaticsBuckets</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3c2cc0 4000644 18 System.Int32[] 0 instance 00000000 m_ThreadStaticsBits</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3c3720 4000645 1c ...ation.CultureInfo 0 instance 00000000 m_CurrentCulture</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3c3720 4000646 20 ...ation.CultureInfo 0 instance 00000000 m_CurrentUICulture</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3c0740 4000647 24 System.Object 0 instance 00000000 m_ThreadStartArg</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3c33ec 4000648 28 System.IntPtr 1 instance <span style="background-color: #ffff00;">1915fa8 DONT_USE_InternalThread</span></span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3c2d70 4000649 2c System.Int32 1 instance 2 m_Priority</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e3c2d70 400064a 30 System.Int32 1 instance 5 m_ManagedThreadId</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0e399740 400064b 16c ...LocalDataStoreMgr 0 shared static s_LocalDataStoreMgr</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: small; font-family: verdana,geneva;">运行 !threads 命令列出所有线程，你将发现与引发&ldquo;请求超时&rdquo;有关的线程（它的操作系统线程ID是dd4）：</span></p>
<table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="590">
<p><span style="font-size: small; font-family: verdana,geneva;">0:025&gt; !threads</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">ThreadCount: 7</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">UnstartedThread: 0</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">BackgroundThread: 7</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">PendingThread: 0</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">DeadThread: 0</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">Hosted Runtime: no</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">PreEmptive GC Alloc Lock</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">ID OSID ThreadOBJ State GC Context Domain Count APT Exception</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">8 1 1400 018ad710 8220 Enabled 05baea40:05baf074 018ac928 0 Ukn</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">19 2 132c 018b8658 b220 Enabled 00000000:00000000 018ac928 0 MTA (Finalizer)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">22 3 16ec 018d7718 80a220 Enabled 00000000:00000000 018ac928 0 MTA (Threadpool Completion Port)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">23 4 830 018d7ee8 1220 Enabled 00000000:00000000 018ac928 0 Ukn</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">24 5 <span style="background-color: #ffff00;">dd4</span> <span style="background-color: #ffff00;">01915fa8</span> 380b220 Enabled 01c57b44:01c58fe8 018d8590 1 MTA (Threadpool Worker)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">25 6 444 01923d00 180b220 Disabled 01c4b604:01c4d008 018d8590 0 MTA (Threadpool Worker)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">14 7 180 01933348 880a220 Enabled 00000000:00000000 018ac928 0 MTA (Threadpool Completion Port)</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: small; font-family: verdana,geneva;">切换到那个有问题的线程，列出调用栈。你将发现sleep函数:</span></p>
<table style="background-color: #d2cfd2;" cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr>
<td valign="top" width="590">
<p><span style="font-size: small; font-family: verdana,geneva;">0:025&gt; ~~[dd4]s</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">eax=0000002d ebx=00000000 ecx=00004e20 edx=00000000 esi=0edced40 edi=00000000</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">eip=777f96f4 esp=0edcecfc ebp=0edced64 iopl=0 nv up ei pl nz na po nc</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">ntdll!KiFastSystemCallRet:</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">777f96f4 c3 ret</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0:024&gt; !clrstack</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">OS Thread Id: 0xdd4 (24)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">ESP EIP</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcee4c 777f96f4 [HelperMethodFrame: 0edcee4c] System.Threading.Thread.<span style="background-color: #ffff00;">SleepInternal</span>(Int32)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edceea0 015806e1 <span style="background-color: #ffff00;">ASP.sleep_aspx.Page_Load</span>(System.Object, System.EventArgs)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edceedc 6d59a7ff System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr, System.Object, System.Object, System.EventArgs)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edceeec 62562544 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(System.Object, System.EventArgs)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcef00 6255ba44 System.Web.UI.Control.OnLoad(System.EventArgs)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcef14 6255ba83 System.Web.UI.Control.LoadRecursive()</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcef2c 62557b34 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf084 62557764 System.Web.UI.Page.ProcessRequest(Boolean, Boolean)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf0bc 62557691 System.Web.UI.Page.ProcessRequest()</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf0f4 62557626 System.Web.UI.Page.ProcessRequestWithNoAssert(System.Web.HttpContext)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf100 62557602 System.Web.UI.Page.ProcessRequest(System.Web.HttpContext)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf114 01580455 ASP.sleep_aspx.ProcessRequest(System.Web.HttpContext)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf118 6255dad6 System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf14c 6253132c System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf18c 62b2583f System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf190 62b1b96c [InlinedCallFrame: 0edcf190]</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf230 62b06071 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf2a0 62bdb5e6 System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf2a4 62bdb7d7 [InlinedCallFrame: 0edcf2a4]</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf7f8 005522b4 [NDirectMethodFrameStandalone: 0edcf7f8] System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf808 62bdb67d System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf88c 62bdb7d7 System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;">0edcf98c 005522b4 [ContextTransitionFrame: 0edcf98c]</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="font-size: small; font-family: verdana,geneva;">Xinjin from APAC DSI</span></p>
<p><span style="font-size: small; font-family: verdana,geneva;" face="Calibri" size="3">&nbsp;</span></p>]]></content:encoded>
    </item>
    <item>
      <title>为什么第一次访问ASP.NET应用会很慢</title>
      <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/asp-net</link>
      <pubDate>Sun, 24 Apr 2011 19:00:00 GMT</pubDate>
      <dc:creator><![CDATA[APGC DSI Team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/04/24/asp-net/</guid>
      <description><![CDATA[&nbsp;
问题现象
==========
ASP.NET页面第一次访问的时候很慢，时间可以持续几十秒到几分钟
&nbsp;
问题原因
==========
当程序里面需要调用到一些A...]]></description>
      <content:encoded><![CDATA[<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;"><strong>问题现象</strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;"><strong>==========</strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;"><i>ASP.NET</i>页面第一次访问的时候很慢，时间可以持续几十秒到几分钟</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;"><strong>问题原因</strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;"><strong>==========</strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">当程序里面需要调用到一些</span></span><a href="http://msdn.microsoft.com/en-us/library/ms537359(v=VS.85).aspx"><span style="font-family: verdana,geneva;"><span style="font-size: small;">Authenticode Signed</span></span></a><span style="font-family: verdana,geneva;"><span style="font-size: small;">的.NET Assembly的时候，它需要连接到外网来验证数字证书。当服务器是无法连接到外网时，这个校验证书的过程需要等到timeout之后才会结束。</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;"><strong>解决办法</strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;"><strong>==========</strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">建议采用以下方法中的任何一种</span></span></p>
<ul>
<li><span style="font-family: verdana,geneva;"><span style="font-size: small;">让您的服务器能连接到外网</span></span></li>
<li><span style="font-family: verdana,geneva;"><span style="font-size: small;">参考</span></span><a href="http://support.microsoft.com/kb/936707"><span style="font-family: verdana,geneva;"><span style="font-size: small;">http://support.microsoft.com/kb/936707</span></span></a><span style="font-family: verdana,geneva;"><span style="font-size: small;">的方法来禁止证书的验证过程</span></span></li>
</ul>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">请同时在以下两个aspnet.config文件中加入以下内容。</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet.config</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet.config</span></span></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&lt;configuration&gt;</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;runtime&gt;</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generatePublisherEvidence enabled="false"/&gt;</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/runtime&gt;</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&lt;/configuration&gt;</span></span></i></p>
<ul>
<li><span style="font-family: verdana,geneva;"><span style="font-size: small;">或者参考</span></span><a href="http://blogs.msdn.com/b/tom/archive/2008/10/28/web-site-stops-responding-for-15-25-seconds.aspx"><span style="font-family: verdana,geneva;"><span style="font-size: small;">http://blogs.msdn.com/b/tom/archive/2008/10/28/web-site-stops-responding-for-15-25-seconds.aspx</span></span></a><span style="font-family: verdana,geneva;"><span style="font-size: small;">对"Network Service"帐号下运行的所有程序禁止证书检查</span></span></li>
</ul>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">导入以下注册表键值并重起IIS服务</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">Windows Registry Editor Version 5.00</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">[HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing]</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">"State"=dword:00023e00</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;"><strong>详细分析</strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;"><strong>==========</strong></span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">这个时候如果我们抓取一个hang dump的话，页面所对应的managed callstack往往如下，很明显它正在加载一个Assembly</span></span></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">0:022&gt; !CLRStack</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">OS Thread Id: 0xeb4 (22)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">Child-SP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RetAddr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call Site</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1c900 000007fef91747c3 System.Reflection.Assembly.InternalLoad(System.Reflection.AssemblyName, System.Security.Policy.Evidence, </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">System.Threading.StackCrawlMark ByRef, Boolean)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1c990 000007ff0141f0f9 System.Reflection.Assembly.Load(System.Reflection.AssemblyName)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1c9d0 000007fef9fdd502 Microsoft.SharePoint.Portal.WebControls.StringResourceManager..cctor()</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1db50 000007ff014135e2 Microsoft.SharePoint.Portal.WebControls.MySiteLinkUserControl.SetControl()</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1dce0 000007fef398e04f Microsoft.SharePoint.Portal.WebControls.MySiteLinkUserControl.OnInit(System.EventArgs)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1de80 000007fef398f3af System.Web.UI.Control.InitRecursive(System.Web.UI.Control)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1dee0 000007ff014133c8 System.Web.UI.Control.AddedControl(System.Web.UI.Control, Int32)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1df50 000007ff0134115e Microsoft.SharePoint.WebControls.DelegateControl.AddControlResilient(System.Web.UI.Control)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1dff0 000007fef398fb22 Microsoft.SharePoint.WebControls.DelegateControl.CreateChildControls()</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e170 000007ff01341024 System.Web.UI.Control.EnsureChildControls()</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e1d0 000007fef398e04f Microsoft.SharePoint.WebControls.DelegateControl.OnInit(System.EventArgs)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e210 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e270 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e2d0 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e330 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e390 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e3f0 000007fef398a935 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e450 000007fef398a1f0 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e520 000007fef398a11b System.Web.UI.Page.ProcessRequest(Boolean, Boolean)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e580 000007fef398a0b0 System.Web.UI.Page.ProcessRequest()</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e5e0 000007fef3991557 System.Web.UI.Page.ProcessRequest(System.Web.HttpContext)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e640 000007fef395567b System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e6f0 000007fef39634b5 System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e790 000007fef3954733 System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e840 000007fef3958a54 System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">System.Object)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e8a0 000007fef395863c System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e930 000007fef395726c System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest)</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">000000001af1e970 000007fef9fdd502 System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32)</span></span></i></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">其实它所要加载的Assembly名字如下</span></span></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">Microsoft.SharePoint.Portal.intl</span></span></i></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">此线程所对应的native callstack如下</span></span></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">0:022&gt; k20</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">Child-SP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RetAddr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call Site</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00000000'1af1a208 000007fe'fdc610ac ntdll!ZwWaitForSingleObject+0xa </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00000000'1af1a210 000007fe'f5dfa2fa KERNELBASE!WaitForSingleObjectEx+0x79 00000000'1af1a2b0 000007fe'f5df76fa cryptnet!CryptRetrieveObjectByUrlWithTimeout+0x263 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">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 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00000000'1af1ad00 000007fe'f5df3810 cryptnet!FreshestCrlFromCrlGetTimeValidObject+0x61 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00000000'1af1ad70 000007fe'f5df99fc cryptnet!CryptGetTimeValidObject+0xb0 00000000'1af1adf0 000007fe'f5df345d cryptnet!GetTimeValidCrl+0x4b7 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00000000'1af1af30 000007fe'f5df3f82 cryptnet!GetBaseCrl+0x7d 00000000'1af1afc0 000007fe'f5df3d58 cryptnet!MicrosoftCertDllVerifyRevocation+0x238 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00000000'1af1b110 000007fe'fdb157c7 cryptnet!CertDllVerifyRevocation+0x28 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00000000'1af1b160 000007fe'fdb1552e crypt32!VerifyDefaultRevocation+0x398 00000000'1af1b250 000007fe'fdb15c09 crypt32!CertVerifyRevocation+0x144 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">...</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00000000'1af1bcc0 000007fe'f9e46c27 mscorwks!PEFile::CheckSecurity+0x39b924</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00000000'1af1bd50 000007fe'f9e5eb5d mscorwks!PEAssembly::DoLoadSignatureChecks+0x37 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00000000'1af1bd90 000007fe'f9e52ff8 mscorwks!PEAssembly::PEAssembly+0x12d 00000000'1af1be00 000007fe'f9e40b9d mscorwks!PEAssembly::DoOpen+0x11c 00000000'1af1c130 000007fe'f9f24a3e mscorwks!PEAssembly::Open+0x71</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;</span></span></i></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">从这些函数名我们知道它正在做一些证书检查之类的事情。而实际上它正在等待下面的这个线程。</span></span></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;</span></span></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">0:036&gt; kn</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;"># Child-SP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RetAddr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Call Site</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">00 00000000'2409e1c8 000007fe'fdc610ac ntdll!ZwWaitForSingleObject+0xa </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">01 00000000'2409e1d0 000007fe'f5d7f38e KERNELBASE!WaitForSingleObjectEx+0x79 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">02 00000000'2409e270 000007fe'f5d80a27 winhttp!IsWpadEnabledForConnectedNetworks+0x1f2 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">03 00000000'2409e340 000007fe'f5d806dc winhttp!ReadWinInetProxySettings+0x1c3 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">04 00000000'2409e3c0 000007fe'f5dfae42 winhttp!WinHttpGetIEProxyConfigForCurrentUser+0x28a </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">05 00000000'2409e510 000007fe'f5df9237 cryptnet!InetGetProxy+0x11e </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">06 00000000'2409e600 000007fe'f5df983d cryptnet!InetSendAuthenticatedRequestAndReceiveResponse+0x190 </span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">07 00000000'2409f770 000007fe'f5df9d9c cryptnet!InetSendReceiveUrlRequest+0x57e</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">.....</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">0:036&gt; .frame 7</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">07 00000000'2409f770 000007fe'f5df9d9c cryptnet!InetSendReceiveUrlRequest+0x57e [d:\w7rtm\ds\security\cryptoapi\pki\rpor\inetsp.cpp @ 2603]</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">0:036&gt; dv</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hInetSession = 0x00000000'218211f0</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pwszUrl = 0x00000000'1f8abe50 "</span></span></i><a href="http://crl.microsoft.com/pki/crl/products/CSPCA.crl"><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">http://crl.microsoft.com/pki/crl/products/CSPCA.crl</span></span></i></a><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">"</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwRetrievalFlags = 1</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pCredentials = 0x00000000'00000000</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcba = 0x00000000'2409fab0</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ppfnFreeObject = 0x00000000'2409fb38</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ppvFreeContext = 0x00000000'2409fb30</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pAuxInfo = 0x00000000'1f8abd78</span></span></i></p>
<p><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; phInetRequest = 0x00000000'00000000</span></span></i></p>
<p><span style="font-family: verdana,geneva;"><span style="font-size: small;"><i>&nbsp;</i>我们可以看到，当时我们抓取dump的时候它正在尝试连接</span></span><a href="http://crl.microsoft.com/pki/crl/products/CSPCA.crl"><i><span style="font-family: verdana,geneva;"><span style="font-size: small;">http://crl.microsoft.com/pki/crl/products/CSPCA.crl</span></span></i></a></p>
<p>Zhi Xing - 微软APAC技术支持中心 Internet Developer Support&nbsp;Team</p>]]></content:encoded>
    </item>
    <item>
      <title>如何用IIS Web Portal管理windows user password</title>
      <link>https://docs.microsoft.com/archive/blogs/asiatech_zh-cn/iis-web-portalwindows-user-password</link>
      <pubDate>Thu, 21 Apr 2011 19:38:01 GMT</pubDate>
      <dc:creator><![CDATA[APGC DSI Team]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/04/21/iis-web-portalwindows-user-password/</guid>
      <description><![CDATA[大多IIS用户都可能还记得我们曾经用老的版本的IIS（例如IIS 5或者IIS 6）架设的叫做IISADMPWD的web application。这个应用对domain...]]></description>
      <content:encoded><![CDATA[<p>大多IIS用户都可能还记得我们曾经用老的版本的IIS（例如IIS 5或者IIS 6）架设的叫做IISADMPWD的web application。这个应用对domain user更改密码很有用。可能很多人还在想既然我可以通过简单的Ctrl+Alt+Delete来更改密码，那这个还有什么用呢？我们先来看一个例子。</p>
<p><b>IISAPDPWD in Use</b></p>
<p>当我不在办公室的时候必须要通过OWA来收发邮件。然而，由于我忘记更新我的密码而且它已经过期，我没有能够成功的收到重要邮件。（VPN可能能够帮我解决，但是如果我同样不能连接VPN）</p>
<p>IT部门帮助我设置了IISADMPWD，这样我就可以进入一个页面来更改我的密码。现在OWA又恢复了正常，我也能够成功的检查到邮件！</p>
<p><b>IISAPDPWD Setup</b><b>（for IIS 5/6</b><b>）</b></p>
<p>下面文章可以帮助我们在IIS 5和6设置这样一个web application。</p>
<p>http://support.microsoft.com/kb/269082 </p>
<p>http://support.microsoft.com/kb/833734 </p>
<p>Tony DeCock提供了一篇文章，介绍可能在此过程中碰到的各种问题。 </p>
<p>&nbsp;<a href="http://support.microsoft.com/kb/907271">http://support.microsoft.com/kb/907271</a></p>
<p><b>IISAPDPWD on IIS 7</b></p>
<p>IIS 7中不再有IISAPDPWD这个功能。因此在Windows Server 2008下也没有IISADMPWD目录。这样除了使用VPN，我们还有别的办法来更改密码么？事实上如果我们从Windows Server 2003 box上拿到一份IISADMPWD的copy并且把它作为一个ASP/COM应用来使用，它也是可以帮助我们来更改密码的。解决方案如下：</p>
<ul>
<li>1. 复制Server 2003 box到Server 2008 box，在这边我用的是C:\Windows\system32\inetsrv\Iisadmpwd on Server 2008。</li>
<li>2. 在IISADMPWD目录下注册IISpwchg.dll文件</li>
<li>a. 打开一个命令运行栏。</li>
<li>b. 在Open box中，输入下述命令后按Enter：regsvr32 c:\windows\system32\inetsrv\iisadmpwd\iispwchg.dll</li>
<li>3. 配置PasswordChangeFlags特性，注意Password Change功能必须开启：</li>
<li>a. 打开一个命令运行栏。</li>
<li>b. 进入C:\Inetpub\Adminscripts目录（注意IIS 6 Scripting Tools feature必须打开）</li>
<li>c. 输入以下命令，按enter：</li>
</ul>
<p>cscript.exe adsutil.vbs set w3svc/passwordchangeflags <i>Value</i></p>
<p>注意这里Value为你所设置的PasswordChangeFlags的位置标识符，有如下几个数值，也可以使用它们的组合数值：</p>
<ul>
<li>0:默认值。这个值表明当你试图更改密码的时候一定要使用安全网路连接（SSL）</li>
<li>1：这个值允许对non-secure端口进行密码更改。如果SSL被禁用的话可以使用这个值。</li>
<li>2：这个值禁用了密码更改功能。</li>
<li>4：这个值禁用了密码过期提示。</li>
<li>4. 在IISADMPWD目录下创建一个应用：</li>
<li>a. 打开IIS Manager，左边面板右键Default Web Site节点。</li>
<li>b. 选中Add Application。在对话框中，输入alias（我用的是IISADMPWD）和路径（C:\Windows\system32\inetsrv\Iisadmpwd）。然后选中Select来选择一个合适的application pool，点击两次OK就可以了。</li>
<li>5. 现在就可以进入password change的页面：<a href="http://%3cserver%3e/iisadmpwd/aexp4b.asp">http://&lt;server&gt;/iisadmpwd/aexp4b.asp</a>（或者https的页面）</li>
</ul>
<p>注释：</p>
<p>如果只有x86版本的Server 2003，但是Server 2008却是x64版本，上诉步骤要稍作修改：首先，必须复制文件到%windir%\SysWOW64\inetsrv文件夹中，这个路径也要在之后介绍的步骤中用到。然后，application必须在一个32-bit的application pool中。</p>
<p>微软全球技术支持中心Internet 开发者支持组</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>