﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-学无止境</title><link>http://www.cnblogs.com/Ring1981/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 05 Jul 2009 23:48:51 GMT</lastBuildDate><pubDate>Sun, 05 Jul 2009 23:48:51 GMT</pubDate><ttl>60</ttl><item><title>VSTS2010 Load Test 介绍（二）如何为Web Test/Unit Test设置Network Emulation</title><link>http://www.cnblogs.com/Ring1981/archive/2009/06/25/1510847.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Thu, 25 Jun 2009 03:47:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2009/06/25/1510847.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/1510847.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2009/06/25/1510847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/1510847.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/1510847.html</trackback:ping><description><![CDATA[<p>Visual Studio 2010提供的网络仿真是一个基于软件的模拟器，它能够模拟物理连接的无线和有线网络，比如以太网。VS2010网络仿真模型中包含了许多网络属性，包括网络传输的往返时间（延迟），可用带宽，队列行为，丢包，数据包重新排序和衍生错误。</p>
<p>下面演示了如何为Web Test/Unit Test设置Network Emulation:</p>
<p>1.打开解决方案,双击Local.testsettings文件. 一个标题为&#8220;configuration Settings&#8221;的窗口会显示出来。</p>
<p>2.选择&#8220;Execution Criteria&#8221; 选项。</p>
<p>你可以选择以何种方式运行测试. &#8220;Execute tests locally&#8221; 表示在你的本机运行. &#8220;Execute tests remotely&#8221; 表示在远程Agent上运行.&nbsp; </p>
<p>这里我们选择&#8220;Execute tests remotely&#8221;, 输入Controller名字&#8220;iegwin2k8&#8221;. 然后点击 &#8220;Preview&#8230;&#8221;&nbsp; 可以检查一下可供你运行Test的Agent机器。 </p>
<p>&nbsp;</p>
<p><img height="435" alt="" src="http://images.cnblogs.com/cnblogs_com/ring1981/4.JPG" width="580" border="0" /></p>
<p>3.选择Network Emulation。</p>
<p>在Collectors下面有一个列表框, 勾选上 &#8220;Network Emulation&#8221; 这一项，然后点击 &#8220;Advanced&#8230;&#8221;, 一个名叫&#8220;Network Emulation Detail&#8221; 的对话框窗口会显示出来。 </p>
<p>&nbsp;</p>
<p><img height="436" alt="" src="http://images.cnblogs.com/cnblogs_com/ring1981/5.JPG" width="580" border="0" /></p>
<p>在 Network Emulation Detail 窗口, 有10种网络类型可供选择，这里我们选择network profile为&#8220;CDMA&#8221; ，然后点击 &#8220;OK&#8221;来选定我们要绑定的网络接口.</p>
<p>&nbsp;<img height="405" alt="" src="http://images.cnblogs.com/cnblogs_com/ring1981/6.JPG" width="580" border="0" /></p> <img src ="http://www.cnblogs.com/Ring1981/aggbug/1510847.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47989/" target="_blank">Twitter无处不在 魔兽世界Twitter发送器插件发布</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>VSTS2010 Load Test 介绍（一）如何配置Controller和Agent</title><link>http://www.cnblogs.com/Ring1981/archive/2009/06/25/1510842.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Thu, 25 Jun 2009 03:44:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2009/06/25/1510842.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/1510842.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2009/06/25/1510842.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/1510842.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/1510842.html</trackback:ping><description><![CDATA[<p>Visual Studio Team System 2010 Test Load Agent Beta 1包含有Team Test Load Agent和Team Test Load Controller。Team Test Load Agent通过一个运行在本机的服务来监听来自Controller发出运行一个新的测试的请求。Team Test Load Controller通过一个服务运行，该服务控制test agents并且报告该测试运行的状态和错误。</p>
<p>下面演示了如何配置Controller和Agent: </p>
<p>1.&nbsp; 启动 Visual Studio Team System 2010 Beta 1</p>
<p>2.&nbsp; 菜单Test-&gt;Administer Test Controller </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 输入Contrller机器名字，选择Load test results store。 默认情况下，数据存在ControllerName\SQLEXPRESS服务器的LoadTest数据库中。&nbsp;</p>
<p><img height="432" alt="" src="http://images.cnblogs.com/cnblogs_com/ring1981/1.JPG" width="506" border="0" />3.&nbsp; 点击 &#8220;Add&#8230;&#8221; 添加Agent机器名。 这里我们添加&#8220;WINXPTESTAGENT&#8221;，点击&#8220;OK&#8221;</p>
<p>&nbsp;&nbsp;&nbsp; 只要你在你的Agent机器上安装好Load Agent,确保&#8220;Visual Team Test Agent&#8221;服务启动起来，你就可以使用这个Agent。</p>
<p>&nbsp;<img height="522" alt="" src="http://images.cnblogs.com/cnblogs_com/ring1981/2.JPG" width="429" border="0" /></p>
<p>4. 现在 &#8220;WINXPTESTAGENT&#8221; 就已经准备好了.只要你选择远程执行并选中该机器,测试就可以在 &#8220;WINXPTESTAGENT&#8221;上运行. </p>
<p>&nbsp;<img height="434" alt="" src="http://images.cnblogs.com/cnblogs_com/ring1981/3.JPG" width="490" border="0" /></p>
<p>&nbsp;</p> <img src ="http://www.cnblogs.com/Ring1981/aggbug/1510842.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47989/" target="_blank">Twitter无处不在 魔兽世界Twitter发送器插件发布</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>匹配查找,vista有用的注册表设置</title><link>http://www.cnblogs.com/Ring1981/archive/2008/10/30/1322827.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Thu, 30 Oct 2008 03:12:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2008/10/30/1322827.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/1322827.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2008/10/30/1322827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/1322827.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/1322827.html</trackback:ping><description><![CDATA[<p><span style="color: #000000; font-family: MS Shell Dlg">dir /s /b | find /i "???"</span> </p>
<p>UAC:</p>
<p>&nbsp;REG Add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f</p>
<p>Add user:</p>
<p>net user /add [Name] [Password]</p>
<p>set power:</p>
<p>powercfg.exe -setactive SCHEME_MIN</p>
<p>&nbsp;</p>
<p>[SystemDrive]\A\A.exe -Install -Product [] -SKU [] -Language [] -ServicePack [] -Lab [] -InstallTo [] -FormatDisk -Quiet -MachineName [] -AddDriver []\[]\Software\driver -Quality [] -PostInstall 0x2:\XX\XXX\WTTInstall.cmd</p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/1322827.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47988/" target="_blank">Firefox 3.5匆忙推出漏洞多 Mozilla本月将更新</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>How to Repair Boot Sector when Installing Vista from Safe OS and Forgetting to Activate 1st Partition </title><link>http://www.cnblogs.com/Ring1981/archive/2008/10/16/1312444.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Thu, 16 Oct 2008 02:50:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2008/10/16/1312444.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/1312444.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2008/10/16/1312444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/1312444.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/1312444.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-size: 10pt; font-family: 'Tahoma','sans-serif'">How to Repair Boot Sector when Installing Vista from Safe OS and Forgetting to Activate 1st Partition </span></p>
<p>&nbsp;</p>
<p style="text-indent: -0.25in">1)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Bootsect /nt60 C:</p>
<p style="text-indent: -0.25in">2)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Diskpart </p>
<p>Sel Disk 0</p>
<p>Sel Part 1</p>
<p>Act</p>
<p style="text-indent: -0.25in">3)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Reboot the system and it will tell that bootmgr is missing</p>
<p style="text-indent: -0.25in">4)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Insert Vista Installation Disk and boot from CD ROM, then repair your system (note that it maybe work only if you try 2 times)</p>
<p style="text-indent: -0.25in">5)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Reboot and now you can log on successfully </p>
<p style="text-indent: -0.25in">6)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Repair safe OS by running following command : Bootsect /nt52 D: </p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/1312444.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47987/" target="_blank">预测：Twitter最可能收购的十家公司</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>make automatic update show.</title><link>http://www.cnblogs.com/Ring1981/archive/2008/10/13/1309732.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Mon, 13 Oct 2008 02:12:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2008/10/13/1309732.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/1309732.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2008/10/13/1309732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/1309732.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/1309732.html</trackback:ping><description><![CDATA[<font face="Verdana">In Windows XP, sometimes the Automatic update didn't show up. <br />
&nbsp;<br />
Reason 1: proxy setting error.[8024402C]<br />
behavior: <br />
1. Can open the WU page, but AU didn't show up.<br />
2. Open c:\windows\WindowsUpdate.log, can find the Proxy List is null or Netproxy:80<br />
3. Open the registry of HKLM\software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto update\Results\Detect, the value of Last Error is 8024402C<br />
4. Run command proxycfg, the proxy setting is incorrect<br />
&nbsp;<br />
Solution:<br />
1. Set the proxy to the correct server in Internet opition.<br />
2. Run command proxycfg -u<br />
3. Run command net stop wuauserv<br />
4. Run command net start wuauserv<br />
5. Change the automatic update setting to the last one "Never check"<br />
6. Change the automatic update setting to the third one "notify me only"<br />
&nbsp;<br />
Reason 2: network issue [80072efd]<br />
behavior:<br />
1. Show error 80072efd<br />
&nbsp;<br />
Solution:<br />
1. Add this site as trusted site:<br />
http://*.update.microsoft.com<br />
https://*.update.microsoft.com<br />
http://download.windowsupdate.com </font>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/1309732.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47986/" target="_blank">网易澄清:与暴雪合资公司仅提供技术支持</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>下一代ADO.NET介绍</title><link>http://www.cnblogs.com/Ring1981/archive/2007/12/25/431548.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 25 Dec 2007 05:44:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/12/25/431548.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/431548.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/12/25/431548.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/431548.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/431548.html</trackback:ping><description><![CDATA[<div><strong>ADO.NET Entity Framework的目标</strong><br />
<br />
从纷繁芜杂的关系数据模型中抽象出概念模型。这样开发人员可以只需着眼概念模型，而不必要去关心纷繁芜杂的关系数据模型，从而提高开发效率。<br />
<br />
那么如何能够做到这一点？<br />
答案就是：<span style="font-size: 11pt; font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">Language-Integrated Query 和 <st1:city w:st="on"><st1:place w:st="on">ADO</st1:place></st1:city>.NET Entity Framework，也就是下一代的ADO.NET.</span><br />
<br />
<br />
<strong>ADO.NET Entity Framework包括<br />
<br />
</strong>1. 实体数据模型(Entity Data Model),开发人员通过EDM抽象出非常合适的模型。<br />
2. 非常强大的client-view/mappping引擎，用于映射数据关系<br />
3. Entity SQL语言和LINQ查询对EDM schemas的全面支持<br />
4. object services layer供您选择以何种方式去处理查询结果。比如（行，列或作为对象）。<br />
5. 提供一个开放的模型使ADO.NET Entity Framework可以处理其他的数据存储。<br />
<br />
<br />
<strong>ADO.NET Entity Framework的架构<br />
<br />
</strong>ADO.NET Entity Framework分<strong>Storage Provider ，Mapping Layer</strong> ，<strong>Object Services</strong>和<strong>LINQ to Entities</strong>&nbsp;四层。<br />
<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ring1981/adonetvnextstack35.jpg" border="0" /><br />
<br />
<strong>Storage Provider:<br />
</strong>它负责直接和数据源通讯，支持的数据库比如Sql Server, Oracle等等.<br />
<br />
<strong>Mapping Layer：<br />
</strong>数据库概念层和逻辑层的映射。通过EDM模型和mapping provider，应用程序将构建在更高层次的EDM模型抽象层次上。同时，在应用程序中将不再使用本地数据库的查询语言比如（T-sql),取而代之的将是Entity SQL。<br />
<br />
<strong>Object Services：<br />
</strong>Object Services&nbsp;的目标是消除数据和应用程序代码风格的不匹配。ADO.NET允许你将查询结果呈现为行和列记录，同时也可以呈现为.NET对象。该层还包括了更多被O/R mapping框架支持的高级的服务，比如身份认证，跟踪对象状态变化，并行性检查以及处理更新。<br />
<br />
<strong>LINQ to Entities：<br />
</strong>将Entity Framework与LINQ项目集成，以提供面向对象编程语言适合自己特点的查询功能。LINQ to Entities这一层依赖于object services和mapping layer这两层。<br />
<br />
<br />
<br />
更详细的信息可以参阅：<br />
<br />
参考文档<br />
<a href="http://blogs.msdn.com/adonet/archive/category/14053.aspx">http://blogs.msdn.com/adonet/archive/category/14053.aspx<br />
</a><a href="http://wagnerblog.com/index.php?p=636">http://wagnerblog.com/index.php?p=636</a><br />
<a href="http://msdn.microsoft.com/data/default.aspx?pull=/library/en-us/dnvs05/html/ADONETEnFrmOvw.asp">http://msdn.microsoft.com/data/default.aspx?pull=/library/en-us/dnvs05/html/ADONETEnFrmOvw.asp</a><br />
<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/ADONET_EDM.asp"><font color="#1d58d1">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/ADONET_EDM.asp</font></a><br />
<br />
ADO.NET Entity Framework的架构层次<a href="http://wagnerblog.com/index.php?p=636"><br />
</a><a href="http://weblogs.asp.net/pgielens/archive/2006/08/20/ADO.NET-Entity-Framework-Layering.aspx">http://weblogs.asp.net/pgielens/archive/2006/08/20/ADO.NET-Entity-Framework-Layering.aspx<br />
</a><br />
视频资料<br />
<a href="http://datajunkies.net/screencasts/ado.net_vnext_ctp_screencast1/ado.net_vnext_ctp_screencast1.html">http://datajunkies.net/screencasts/ado.net_vnext_ctp_screencast1/ado.net_vnext_ctp_screencast1.html</a><br />
<a href="http://channel9.msdn.com/showpost.aspx?postid=217633">http://channel9.msdn.com/showpost.aspx?postid=217633</a><br />
<br />
8月份的ADO.NET Entity Framework下载地址:<br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B68F6F53-EC87-4122-B1C8-EE24A043BF72&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyId=B68F6F53-EC87-4122-B1C8-EE24A043BF72&amp;displaylang=en</a><br />
<br />
5月份的LINQ CTP下载地址：<br />
<a href="http://www.microsoft.com/downloads/details.aspx?familyid=1e902c21-340c-4d13-9f04-70eb5e3dceea&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?familyid=1e902c21-340c-4d13-9f04-70eb5e3dceea&amp;displaylang=en</a></div>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/431548.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47985/" target="_blank">杰克逊悼念仪式或成史上最大规模Web活动</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>导入一个COM组件(转载)</title><link>http://www.cnblogs.com/Ring1981/archive/2007/11/07/952348.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Wed, 07 Nov 2007 08:54:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/11/07/952348.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/952348.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/11/07/952348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/952348.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/952348.html</trackback:ping><description><![CDATA[<div><script type="text/javascript"><!--
google_ad_client = "pub-7464627477897169";
//468x15, 创建于 07-12-24
google_ad_slot = "9633504051";
google_ad_width = 468;
google_ad_height = 15;
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>  <br/ />
<span style="font-size: 14px">.Net提供三种途径供我们导入一个COM组件：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 通过Visual Studio .Net提从的&#8220;添加引用&#8221;功能<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 通过命令行方式——TLBIMP.EXE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 使用System.Runtime.InteropServices.TypeLibConverter类编程实现导入功能<br />
&nbsp;&nbsp;&nbsp; 第一种方式无须赘述，非常的简单。第三种方式我会说明PIA的用法的同时，对此方法的使用加以说明。不过，我的水平不高，各位不要要求太高喽。^_^ 言归正传，本文关注的是第二种方式。我们可以直接使用此工具提供的最简单的调用方式：TLBIMP TestObj.dll。但需要提醒各位的是，如果我们使用这种方式导入一个COM组件的话，我们将&#8220;牺牲&#8221;原有的COM组件，这样做是很危险的。个人认为，最简单的调用方式是TLBIMP TestObj.dll /out:interop.TestObjLib.dll。这样，执行后将会产生一个名为interop.TestObjLib.dll的COM Interop。下面将给出简单的例子以说明整个过程。<br />
1、首先用VB写的一个简单的ActiveX Dll<br />
'Project name is TestObjList, class name is TestObj<br />
Option Explicit
<p>Public Function Add(ByVal iValue As Integer) As Integer<br />
&nbsp;&nbsp;&nbsp; Add = iValue 1<br />
End Function</p>
<p>2、使用命令行工具导入这个COM组件<br />
TLBIMP TestObjLib.dll /out:interop.TestObjLib.dll</p>
<p>3、在一个.Net Windows Forms中写一段调用此组件的测试代码<br />
using interop.TestObjLib;<br />
private void button1_Click(object sender, System.EventArgs e)<br />
{<br />
&nbsp;&nbsp;&nbsp; TestObjClass obj = new TestObjClass();<br />
&nbsp;&nbsp;&nbsp; int num = 1;<br />
&nbsp;&nbsp;&nbsp; MessageBox.Show(obj.Add(num).ToString());<br />
}</p>
<p>&nbsp;&nbsp;&nbsp; 此处需要说明一点，当TLBIMP.EXE在生成Interop装配件时会在原COM中的类的名字后面加上一个"Class"。调用时，请各位注意。</p>
</span><img src ="http://www.cnblogs.com/Ring1981/aggbug/952348.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47984/" target="_blank">《商业周刊》:Mozilla的志愿者开发模式被复制</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>有关配置SqlCacheDependcy参数配置说明</title><link>http://www.cnblogs.com/Ring1981/archive/2007/06/25/794918.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Mon, 25 Jun 2007 05:53:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/06/25/794918.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/794918.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/06/25/794918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/794918.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/794918.html</trackback:ping><description><![CDATA[<p>分三步<br />1.配置数据库支持sqlCacheDependcy(Sql 2000, 2005)<br />window验证</p>
<p>aspnet_regsql -S ServerName -E -d pubs -ed<br />aspnet_regsql -S ServerName -E -d pubs -t authors -et<br />aspnet_regsql -S ServerName -E -d pubs -lt</p>
<p><br />说明：<br />-S 连接到哪个数据库实例<br />-E 连接数据库采用的连接方式<br />-d 数据库明<br />-ed为数据库启动该特性支持</p>
<p>sql验证<br />aspnet_regsql -S ServerName -U username -P password -d databasename -ed -et -t tablename</p>
<p>2.写Web应用程序</p>
<p>&lt;%OutputCache Duration="600" varybyparam="none" sqldependency="database.tablename"%&gt;</p>
<p>SqlDataSource:<br />GridView:<br />database.tablename:在WebConfig中会有所配置</p>
<p><br />3.配置WebConfig<br />&lt;ConnectionStrings&gt;<br />&nbsp; &lt;add name = "pubsConnectionString" value="""&gt;<br />&lt;/ConnectionStrings&gt;</p>
<p>&lt;cache&gt;<br />&nbsp;&nbsp; &lt;sqlCacheDependency enable="true" pollTime="1000"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;databases&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;add name="databasename" connectionString="pubsConnectionString"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/databases&gt;<br />&nbsp;&nbsp; &lt;/sqlCacheDependcy&gt;<br />&lt;/cache&gt;<br /></p>
 <img src ="http://www.cnblogs.com/Ring1981/aggbug/794918.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47977/" target="_blank">Mono 的Virtual PC 虚拟机</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>正则表达式小结 </title><link>http://www.cnblogs.com/Ring1981/archive/2007/06/05/772113.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 05 Jun 2007 06:07:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/06/05/772113.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/772113.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/06/05/772113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/772113.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/772113.html</trackback:ping><description><![CDATA[<div><script type="text/javascript"><!--
google_ad_client = "pub-7464627477897169";
//468x15, 创建于 07-12-24
google_ad_slot = "9633504051";
google_ad_width = 468;
google_ad_height = 15;
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>  <br/ /><p>匹配掉html标签:<br />
string s = "&lt;html&gt;&lt;body&gt;sdf&lt;br/&gt;&lt;/body&gt;&lt;/html&gt;";<br />
s = Regex.Replace(s, "&lt;(.|\n)*?&gt;", "");<br />
this.Response.Write(s);<br />
<br />
以来来自: <a href="http://www.cnblogs.com/maxianghui/archive/2006/05/11/397747.html">http://www.cnblogs.com/maxianghui/archive/2006/05/11/397747.html</a><br />
<br />
<br />
只能输入数字："^[0-9]*$"。<br />
只能输入n位的数字："^\d{n}$"。<br />
只能输入至少n位的数字："^\d{n,}$"。<br />
只能输入m~n位的数字：。"^\d{m,n}$"<br />
只能输入零和非零开头的数字："^(0|[1-9][0-9]*)$"。<br />
只能输入有两位小数的正实数："^[0-9]+(.[0-9]{2})?$"。<br />
只能输入有1~3位小数的正实数："^[0-9]+(.[0-9]{1,3})?$"。<br />
只能输入非零的正整数："^\+?[1-9][0-9]*$"。<br />
只能输入非零的负整数："^\-[1-9][]0-9"*$。<br />
只能输入长度为3的字符："^.{3}$"。<br />
只能输入由26个英文字母组成的字符串："^[A-Za-z]+$"。<br />
只能输入由26个大写英文字母组成的字符串："^[A-Z]+$"。<br />
只能输入由26个小写英文字母组成的字符串："^[a-z]+$"。<br />
只能输入由数字和26个英文字母组成的字符串："^[A-Za-z0-9]+$"。<br />
只能输入由数字、26个英文字母或者下划线组成的字符串："^\w+$"。<br />
验证用户密码："^[a-zA-Z]\w{5,17}$"正确格式为：以字母开头，长度在6~18之间，只能包含字符、数字和下划线。<br />
验证是否含有^%&amp;',;=?$\"等字符："[^%&amp;',;=?$\x22]+"。<br />
只能输入汉字："^[\u4e00-\u9fa5]{0,}$"<br />
验证Email地址："^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。<br />
验证InternetURL："^<a href="http://([/"><font color="#1d58d1">http://([</font></a>\w-]+\.)+[\w-]+(/[\w-./?%&amp;=]*)?$"。<br />
验证电话号码："^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为："XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。<br />
验证身份证号（15位或18位数字）："^\d{15}|\d{18}$"。<br />
验证一年的12个月："^(0?[1-9]|1[0-2])$"正确格式为："01"～"09"和"1"～"12"。<br />
验证一个月的31天："^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为；"01"～"09"和"1"～"31"。 <br />
利用正则表达式限制网页表单里的文本框输入内容：
<p>用正则表达式限制只能输入中文：onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
<p>用正则表达式限制只能输入全角字符：&nbsp;onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
<p>用正则表达式限制只能输入数字：onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
<p>用正则表达式限制只能输入数字和英文：onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
<p>得用正则表达式从URL地址中提取文件名的javascript程序，如下结果为page1
<p>s="http://www.9499.net/page1.htm"<br />
s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")<br />
alert(s)
<p>匹配双字节字符(包括汉字在内)：[^\x00-\xff]
<p>应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）
<p>String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}
<p>匹配空行的正则表达式：\n[\s| ]*\r
<p>匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/
<p>匹配首尾空格的正则表达式：(^\s*)|(\s*$)
<p>String.prototype.trim = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; return this.replace(/(^\s*)|(\s*$)/g, "");<br />
}
<p>利用正则表达式分解和转换IP地址：
<p>下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的Javascript程序：
<p>function IP2V(ip)<br />
{<br />
&nbsp;re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g&nbsp; //匹配IP地址的正则表达式<br />
if(re.test(ip))<br />
{<br />
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br />
}<br />
else<br />
{<br />
&nbsp;throw new Error("Not a valid IP address!")<br />
}<br />
}
<p>不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下：
<p>var ip="10.100.20.168"<br />
ip=ip.split(".")<br />
alert("IP值是："+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))<br />
符号解释：
<p>字符 <br />
描述
<p>\ <br />
将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
<p>^ <br />
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。
<p>$ <br />
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。
<p>* <br />
匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
<p>+ <br />
匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。
<p>? <br />
匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
<p>{n} <br />
n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。
<p>{n,} <br />
n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
<p>{n,m} <br />
m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
<p>? <br />
当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 "oooo"，'o+?' 将匹配单个 "o"，而 'o+' 将匹配所有 'o'。
<p>. <br />
匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。
<p>(pattern) <br />
匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在JScript 中则使用 $0&#8230;$9 属性。要匹配圆括号字符，请使用 '\(' 或 '\)'。
<p>(?:pattern) <br />
匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
<p>(?=pattern) <br />
正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如，'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ，但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。
<p>(?!pattern) <br />
负向预查，在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始
<p>x|y <br />
匹配 x 或 y。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
<p>[xyz] <br />
字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 "plain" 中的 'a'。
<p>[^xyz] <br />
负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 "plain" 中的'p'。
<p>[a-z] <br />
字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
<p>[^a-z] <br />
负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
<p>\b <br />
匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er\b' 可以匹配"never" 中的 'er'，但不能匹配 "verb" 中的 'er'。
<p>\B <br />
匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er'，但不能匹配 "never" 中的 'er'。
<p>\cx <br />
匹配由 x 指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。
<p>\d <br />
匹配一个数字字符。等价于 [0-9]。
<p>\D <br />
匹配一个非数字字符。等价于 [^0-9]。
<p>\f <br />
匹配一个换页符。等价于 \x0c 和 \cL。
<p>\n <br />
匹配一个换行符。等价于 \x0a 和 \cJ。
<p>\r <br />
匹配一个回车符。等价于 \x0d 和 \cM。
<p>\s <br />
匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
<p>\S <br />
匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
<p>\t <br />
匹配一个制表符。等价于 \x09 和 \cI。
<p>\v <br />
匹配一个垂直制表符。等价于 \x0b 和 \cK。
<p>\w <br />
匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
<p>\W <br />
匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
<p>\xn <br />
匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如，'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' &amp; "1"。正则表达式中可以使用 ASCII 编码。.
<p>\num <br />
匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)\1' 匹配两个连续的相同字符。
<p>\n <br />
标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为向后引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。
<p>\nm <br />
标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式，则 nm 为向后引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。
<p>\nml <br />
如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。
<p>\un <br />
匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如， \u00A9 匹配版权符号 (?)。</p><img src ="http://www.cnblogs.com/Ring1981/aggbug/772113.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47970/" target="_blank">19岁天才黑客发布首个iPhone 3GS破解软件</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Windows Server 2003网络服务器安全攻略[转载]</title><link>http://www.cnblogs.com/Ring1981/archive/2007/05/21/754291.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Mon, 21 May 2007 07:50:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/05/21/754291.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/754291.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/05/21/754291.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/754291.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/754291.html</trackback:ping><description><![CDATA[Win2003 Server的安全性较之Win2K确实有了很大的提高，但是用Win2003 Server作为服务器是否就真的安全了?如何才能打造一个安全的个人Web服务器?下面我们简单介绍一下&#8230;&#8230;
<p>　　<strong>一、Windows Server2003的安装</strong></p>
<p>　　1、安装系统最少两需要个分区，分区格式都采用NTFS格式</p>
<p>　　2、在断开网络的情况安装好2003系统</p>
<p>　　3、安装IIS，仅安装必要的 IIS 组件(禁用不需要的如FTP 和 SMTP 服务)。默认情况下，IIS服务没有安装，在添加/删除Win组件中选择&#8220;应用程序服务器&#8221;，然后点击&#8220;详细信息&#8221;，双击Internet信息服务(iis)，勾选以下选项:</p>
<p>　　Internet 信息服务管理器;</p>
<p>　　公用文件;</p>
<p>　　后台智能传输服务 (BITS) 服务器扩展;</p>
<p>　　万维网服务。</p>
<p>　　如果你使用 FrontPage 扩展的 Web 站点再勾选:FrontPage 2002 Server Extensions</p>
<p>　　4、安装MSSQL及其它所需要的软件然后进行Update。</p>
<p>　　5、使用Microsoft 提供的 MBSA(Microsoft Baseline Security Analyzer) 工具分析计算机的安全配置，并标识缺少的修补程序和更新。下载地址:见页末的链接</p>
<p>　<strong>　二、设置和管理账户</strong></p>
<p>　　1、系统管理员账户最好少建，更改默认的管理员帐户名(Administrator)和描述，密码最好采用数字加大小写字母加数字的上档键组合，长度最好不少于14位。</p>
<p>　　2、新建一个名为Administrator的陷阱帐号，为其设置最小的权限，然后随便输入组合的最好不低于20位的密码</p>
<p>　　3、将Guest账户禁用并更改名称和描述，然后输入一个复杂的密码，当然现在也有一个DelGuest的工具，也许你也可以利用它来删除Guest账户，但我没有试过。</p>
<p>　　4、在运行中输入gpedit.msc回车，打开组策略编辑器，选择计算机配置-Windows设置-安全设置-账户策略-账户锁定策略，将账户设为&#8220;三次登陆无效&#8221;，&#8220;锁定时间为30分钟&#8221;，&#8220;复位锁定计数设为30分钟&#8221;。</p>
<p>　　5、在安全设置-本地策略-安全选项中将&#8220;不显示上次的用户名&#8221;设为启用</p>
<p>　　6、在安全设置-本地策略-用户权利分配中将&#8220;从网络访问此计算机&#8221;中只保留Internet来宾账户、启动IIS进程账户。如果你使用了Asp.net还要保留Aspnet账户。</p>
<p>　　7、创建一个User账户，运行系统，如果要运行特权命令使用Runas命令。</p>
<p>　<strong>　三、网络服务安全管理</strong></p>
<p>　　1、禁止C$、D$、ADMIN$一类的缺省共享</p>
<p>　　打开注册表，HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters，在右边的窗口中新建Dword值，名称设为AutoShareServer值设为0</p>
<p>　　2、 解除NetBios与TCP/IP协议的绑定</p>
<p>　　右击网上邻居-属性-右击本地连接-属性-双击Internet协议-高级-Wins-禁用TCP/IP上的NETBIOS</p>
<p>　　3、关闭不需要的服务，以下为建议选项</p>
<p>　　Computer Browser:维护网络计算机更新，禁用</p>
<p>　　Distributed File System: 局域网管理共享文件，不需要禁用</p>
<p>　　Distributed linktracking client:用于局域网更新连接信息，不需要禁用</p>
<p>　　Error reporting service:禁止发送错误报告</p>
<p>　　Microsoft Serch:提供快速的单词搜索，不需要可禁用</p>
<p>　　NTLMSecuritysupportprovide:telnet服务和Microsoft Serch用的，不需要禁用</p>
<p>　　PrintSpooler:如果没有打印机可禁用</p>
<p>　　Remote Registry:禁止远程修改注册表</p>
<p>　　Remote Desktop Help Session Manager:禁止远程协助<br><br><strong>四、打开相应的审核策略</strong></p>
<p>　　在运行中输入gpedit.msc回车，打开组策略编辑器，选择计算机配置-Windows设置-安全设置-审核策略在创建审核项目时需要注意的是如果审核的项目太多，生成的事件也就越多，那么要想发现严重的事件也越难当然如果审核的太少也会影响你发现严重的事件，你需要根据情况在这二者之间做出选择。</p>
<p>　　推荐的要审核的项目是:</p>
<p>　　登录事件 成功 失败</p>
<p>　　账户登录事件 成功 失败</p>
<p>　　系统事件 成功 失败</p>
<p>　　策略更改 成功 失败</p>
<p>　　对象访问 失败</p>
<p>　　目录服务访问 失败</p>
<p>　　特权使用 失败</p>
<p>　<strong>　五、其它安全相关设置</strong></p>
<p>　　1、隐藏重要文件/目录</p>
<p>　　可以修改注册表实现完全隐藏:&#8220;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ Current-Version\Explorer\Advanced\Folder\Hi-dden\SHOWALL&#8221;，鼠标右击 &#8220;CheckedValue&#8221;，选择修改，把数值由1改为0</p>
<p>　　2、启动系统自带的Internet连接防火墙，在设置服务选项中勾选Web服务器。</p>
<p>　　3、防止SYN洪水攻击</p>
<p>　　HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters</p>
<p>　　新建DWORD值，名为SynAttackProtect，值为2</p>
<p>　　4. 禁止响应ICMP路由通告报文</p>
<p>　　HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\interface</p>
<p>　　新建DWORD值，名为PerformRouterDiscovery 值为0</p>
<p>　　5. 防止ICMP重定向报文的攻击</p>
<p>　　HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters</p>
<p>　　将EnableICMPRedirects 值设为0</p>
<p>　　6. 不支持IGMP协议</p>
<p>　　HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters</p>
<p>　　新建DWORD值，名为IGMPLevel 值为0</p>
<p>　　7、禁用DCOM:</p>
<p>　　运行中输入 Dcomcnfg.exe。 回车， 单击&#8220;控制台根节点&#8221;下的&#8220;组件服务&#8221;。 打开&#8220;计算机&#8221;子文件夹。</p>
<p>　　对于本地计算机，请以右键单击&#8220;我的电脑&#8221;，然后选择&#8220;属性&#8221;。选择&#8220;默认属性&#8221;选项卡。</p>
<p>　　清除&#8220;在这台计算机上启用分布式 COM&#8221;复选框。</p>
<p>　　注:3-6项内容我采用的是Server2000设置，没有测试过对2003是否起作用。但有一点可以肯定我用了一段的时间没有发现其它副面的影响。</p>
<p>　<strong>　六、配置 IIS 服务:</strong></p>
<p>　　1、不使用默认的Web站点，如果使用也要将 将IIS目录与系统磁盘分开。</p>
<p>　　2、删除IIS默认创建的Inetpub目录(在安装系统的盘上)。</p>
<p>　　3、删除系统盘下的虚拟目录，如:_vti_bin、IISSamples、Scripts、IIShelp、IISAdmin、IIShelp、MSADC。</p>
<p>　　4、删除不必要的IIS扩展名映射。</p>
<p>　　右键单击&#8220;默认Web站点&#8594;属性&#8594;主目录&#8594;配置&#8221;，打开应用程序窗口，去掉不必要的应用程序映射。主要为.shtml, .shtm, .stm</p>
<p>　　5、更改IIS日志的路径</p>
<p>　　右键单击&#8220;默认Web站点&#8594;属性-网站-在启用日志记录下点击属性</p>
<p>　　6、如果使用的是2000可以使用iislockdown来保护IIS，在2003运行的IE6.0的版本不需要。</p>
<p>　　7、使用UrlScan</p>
<p>　　UrlScan是一个ISAPI筛选器，它对传入的HTTP数据包进行分析并可以拒绝任何可疑的通信量。目前最新的版本是2.5，如果是2000Server需要先安装1.0或2.0的版本。下载地址见页未的链接</p>
<p>　　如果没有特殊的要求采用UrlScan默认配置就可以了。</p>
<p>　　但如果你在服务器运行ASP.NET程序，并要进行调试你需打开要%WINDIR%\System32\Inetsrv\URLscan</p>
<p>　　文件夹中的URLScan.ini 文件，然后在UserAllowVerbs节添加debug谓词，注意此节是区分大小写的。</p>
<p>　　如果你的网页是.asp网页你需要在DenyExtensions删除.asp相关的内容。</p>
<p>　　如果你的网页使用了非ASCII代码，你需要在Option节中将AllowHighBitCharacters的值设为1</p>
<p>　　在对URLScan.ini 文件做了更改后，你需要重启IIS服务才能生效，快速方法运行中输入iisreset</p>
<p>　　如果你在配置后出现什么问题，你可以通过添加/删除程序删除UrlScan。</p>
<p>　　8、利用WIS (Web Injection Scanner)工具对整个网站进行SQL Injection 脆弱性扫描.<br><strong>七、配置Sql服务器</strong></p>
<p>　　1、System Administrators 角色最好不要超过两个</p>
<p>　　2、如果是在本机最好将身份验证配置为Win登陆</p>
<p>　　3、不要使用Sa账户，为其配置一个超级复杂的密码</p>
<p>　　4、删除以下的扩展存储过程格式为:</p>
<p>　　use master</p>
<p>　　sp_dropextendedproc '扩展存储过程名'</p>
<p>　　xp_cmdshell:是进入操作系统的最佳捷径，删除</p>
<p>　　访问注册表的存储过程，删除</p>
<p>　　Xp_regaddmultistring　　Xp_regdeletekey　　Xp_regdeletevalue　　Xp_regenumvalues</p>
<p>　　Xp_regread　　　　　 Xp_regwrite　　　 Xp_regremovemultistring</p>
<p>　　OLE自动存储过程，不需要删除</p>
<p>　　Sp_OACreate　 　Sp_OADestroy　　　　Sp_OAGetErrorInfo　　Sp_OAGetProperty</p>
<p>　　Sp_OAMethod　　Sp_OASetProperty　　Sp_OAStop</p>
<p>　　5、隐藏 SQL Server、更改默认的1433端口</p>
<p>　　右击实例选属性-常规-网络配置中选择TCP/IP协议的属性，选择隐藏 SQL Server 实例，并改原默认的1433端口。</p>
<p>　<strong>　八、如果只做服务器，不进行其它操作，使用IPSec</strong></p>
<p>　　1、管理工具—本地安全策略—右击IP安全策略—管理IP筛选器表和筛选器操作—在管理IP筛选器表选项下点击</p>
<p>　　添加—名称设为Web筛选器—点击添加—在描述中输入Web服务器—将源地址设为任何IP地址——将目标地址设为我的IP地址——协议类型设为Tcp——IP协议端口第一项设为从任意端口，第二项到此端口80——点击完成——点击确定。</p>
<p>　　2、再在管理IP筛选器表选项下点击</p>
<p>　　添加—名称设为所有入站筛选器—点击添加—在描述中输入所有入站筛选—将源地址设为任何IP地址——将目标地址设为我的IP地址——协议类型设为任意——点击下一步——完成——点击确定。</p>
<p>　　3、在管理筛选器操作选项下点击添加——下一步——名称中输入阻止——下一步——选择阻止——下一步——完成——关闭管理IP筛选器表和筛选器操作窗口</p>
<p>　　4、右击IP安全策略——创建IP安全策略——下一步——名称输入数据包筛选器——下一步——取消默认激活响应原则——下一步——完成</p>
<p>　　5、在打开的新IP安全策略属性窗口选择添加——下一步——不指定隧道——下一步——所有网络连接——下一步——在IP筛选器列表中选择新建的 Web筛选器——下一步——在筛选器操作中选择许可——下一步——完成——在IP筛选器列表中选择新建的阻止筛选器——下一步——在筛选器操作中选择阻止 ——下一步——完成——确定</p>
<p>　　6、在IP安全策略的右边窗口中右击新建的数据包筛选器，点击指派，不需要重启，IPSec就可生效.</p>
<p>　　<strong>九、建议</strong></p>
<p>　　如果你按本文去操作，建议每做一项更改就测试一下服务器，如果有问题可以马上撤消更改。而如果更改的项数多，才发现出问题，那就很难判断问题是出在哪一步上了。</p>
<p>　<strong>　十、运行服务器记录当前的程序和开放的端口</strong></p>
<p>　　1、将当前服务器的进程抓图或记录下来，将其保存，方便以后对照查看是否有不明的程序。</p>
<p>　　2、将当前开放的端口抓图或记录下来，保存，方便以后对照查看是否开放了不明的端口。当然如果你能分辨每一个进程，和端口这一步可以省略。</p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/754291.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>用VSTS进行网站压力测试</title><link>http://www.cnblogs.com/Ring1981/archive/2007/05/14/745533.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Mon, 14 May 2007 03:13:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/05/14/745533.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/745533.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/05/14/745533.html#Feedback</comments><slash:comments>28</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/745533.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/745533.html</trackback:ping><description><![CDATA[VSTS提供了一个丰富、强大的工具平台，融合了软件开发领域的各个角色，涵盖软件开发生命周期的各个阶段，包括设计，开发，测试，管理，而这一整套构件的融会贯通，让它可以有效地改善软件开发过程中各个阶段的弊端，提高团队之间不同的角色的协调能力，提高工作效率。<br /><br />本文就简单介绍一下如何利用VSTS给一个网站做压力测试。<a class=hidden href="http://august.blog.51cto.com/"><br /></a><br />1 建立一个测试项目，起名MyTest<br /><br /><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/Test-1.JPG" border=0  alt="" /><br /><br />2 建立一个Web Test<br /><br /><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/Test-2.JPG" border=0  alt="" /><br /><br />点击Web Test... <br />IE马上就会弹出一个窗口，这样录制脚本工作就可以开始了。<br /><br />3 在IE里输入要测试的网站地址： 比如 <a href="http://localhost/WebSite/Default.aspx">http://localhost/WebSite/Default.aspx</a><br /><br />4 对该网站做一些操作， 此时VSTS会纪录下你的这些操作，用以作为压力测试的场景。<br /><br />5 录制脚本毕，点击 "STOP"<br /><br />6 点击生成代码，可以看到刚才录制的类似如下的代码：<br /><br />&nbsp;
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">------------------------------------------------------------------------------<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&lt;auto-generated&gt;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;code&nbsp;was&nbsp;generated&nbsp;by&nbsp;a&nbsp;tool.<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Runtime&nbsp;Version:2.0.50727.42<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changes&nbsp;to&nbsp;this&nbsp;file&nbsp;may&nbsp;cause&nbsp;incorrect&nbsp;behavior&nbsp;and&nbsp;will&nbsp;be&nbsp;lost&nbsp;if<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;code&nbsp;is&nbsp;regenerated.<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&lt;/auto-generated&gt;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">------------------------------------------------------------------------------</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;MyTest<br /><img id=Codehighlighter1_411_2803_Open_Image onclick="this.style.display='none'; Codehighlighter1_411_2803_Open_Text.style.display='none'; Codehighlighter1_411_2803_Closed_Image.style.display='inline'; Codehighlighter1_411_2803_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top  alt="" /><img id=Codehighlighter1_411_2803_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_411_2803_Closed_Text.style.display='none'; Codehighlighter1_411_2803_Open_Image.style.display='inline'; Codehighlighter1_411_2803_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align=top  alt="" /></span><span id=Codehighlighter1_411_2803_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id=Codehighlighter1_411_2803_Open_Text><span style="COLOR: #000000">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Collections.Generic;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Text;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;Microsoft.VisualStudio.TestTools.WebTesting;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;Microsoft.VisualStudio.TestTools.WebTesting.Rules;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" /><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" /><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;WebTest1Coded&nbsp;:&nbsp;WebTest<br /><img id=Codehighlighter1_655_2801_Open_Image onclick="this.style.display='none'; Codehighlighter1_655_2801_Open_Text.style.display='none'; Codehighlighter1_655_2801_Closed_Image.style.display='inline'; Codehighlighter1_655_2801_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top  alt="" /><img id=Codehighlighter1_655_2801_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_655_2801_Closed_Text.style.display='none'; Codehighlighter1_655_2801_Open_Image.style.display='inline'; Codehighlighter1_655_2801_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_655_2801_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id=Codehighlighter1_655_2801_Open_Text><span style="COLOR: #000000">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" /><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;WebTest1Coded()<br /><img id=Codehighlighter1_697_748_Open_Image onclick="this.style.display='none'; Codehighlighter1_697_748_Open_Text.style.display='none'; Codehighlighter1_697_748_Closed_Image.style.display='inline'; Codehighlighter1_697_748_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top  alt="" /><img id=Codehighlighter1_697_748_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_697_748_Closed_Text.style.display='none'; Codehighlighter1_697_748_Open_Image.style.display='inline'; Codehighlighter1_697_748_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_697_748_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id=Codehighlighter1_697_748_Open_Text><span style="COLOR: #000000">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.PreAuthenticate&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" /><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">override</span><span style="COLOR: #000000">&nbsp;IEnumerator</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">WebTestRequest</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;GetRequestEnumerator()<br /><img id=Codehighlighter1_834_2795_Open_Image onclick="this.style.display='none'; Codehighlighter1_834_2795_Open_Text.style.display='none'; Codehighlighter1_834_2795_Closed_Image.style.display='inline'; Codehighlighter1_834_2795_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top  alt="" /><img id=Codehighlighter1_834_2795_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_834_2795_Closed_Text.style.display='none'; Codehighlighter1_834_2795_Open_Image.style.display='inline'; Codehighlighter1_834_2795_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_834_2795_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id=Codehighlighter1_834_2795_Open_Text><span style="COLOR: #000000">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebTestRequest&nbsp;request1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;WebTestRequest(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://localhost/WebSite/Default.aspx</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request1.ThinkTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1688</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExtractHiddenFields&nbsp;rule1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ExtractHiddenFields();<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rule1.ContextParameterName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request1.ExtractValues&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;EventHandler</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ExtractionEventArgs</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(rule1.Extract);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;request1;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" /><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebTestRequest&nbsp;request2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;WebTestRequest(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://localhost/WebSite/Default.aspx</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request2.ThinkTime&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request2.Method&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">POST</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FormPostHttpBody&nbsp;request2Body&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FormPostHttpBody();<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request2Body.FormPostParameters.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__VIEWSTATE</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Context[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">$HIDDEN1.__VIEWSTATE</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">].ToString());<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request2Body.FormPostParameters.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Button1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Go&nbsp;to&nbsp;Test&nbsp;Page</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request2Body.FormPostParameters.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__VIEWSTATEENCRYPTED</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Context[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">$HIDDEN1.__VIEWSTATEENCRYPTED</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">].ToString());<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request2Body.FormPostParameters.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__EVENTVALIDATION</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Context[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">$HIDDEN1.__EVENTVALIDATION</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">].ToString());<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request2.Body&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;request2Body;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExtractHiddenFields&nbsp;rule2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ExtractHiddenFields();<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rule2.ContextParameterName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request2.ExtractValues&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;EventHandler</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ExtractionEventArgs</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">(rule2.Extract);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;request2;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" /><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebTestRequest&nbsp;request3&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;WebTestRequest(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://localhost/WebSite/test.aspx</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request3.Method&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">POST</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FormPostHttpBody&nbsp;request3Body&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FormPostHttpBody();<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request3Body.FormPostParameters.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__VIEWSTATE</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Context[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">$HIDDEN1.__VIEWSTATE</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">].ToString());<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request3Body.FormPostParameters.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Button1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Go&nbsp;to&nbsp;default&nbsp;page.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request3Body.FormPostParameters.Add(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">__EVENTVALIDATION</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.Context[</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">$HIDDEN1.__EVENTVALIDATION</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">].ToString());<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request3.Body&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;request3Body;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;request3;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top  alt="" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top  alt="" /></span></div>
<br />7 添加一个Load Test ...<br /><br /><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/Test-3.JPG" border=0  alt="" /><br /><br />8 填写好Load Test的各项参数<br />&nbsp;<img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/Test-4.JPG" border=0  alt="" /><br /><br />1) 第一步是填写场景名<br />2) 第二步是填写装载的样式<br />&nbsp;&nbsp;&nbsp; 如果选择一次装载固定的用户数，选择第一项Constant Load<br />&nbsp;&nbsp;&nbsp; 如果选择"Setp Load"，表示步增，设置好开始时的用户数，以及经过多久每次增加的用户数<br />3) Test Mix<br />4) Browser Mix<br />5) Network Mix<br />6) 在Counter Sets 选择Add Compuer...,表示要对某个PC进行监控<br />7) Run Settings<br /><br />9 点击Finish<br /><br />10 点击Run Test,测试就开始了。<br /><br /><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/Test-5.JPG" border=0  alt="" /><br /><br />压力测试运行后，我们就可以选中某个参数，查看某个时刻机器个方面的性能。参看下图：&nbsp;<br /><br /><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/Test-7.JPG" border=0  alt="" /><br /><br />我们也可以运行perfmon，通过Performance查看机器的各项指标。<br />&nbsp; 
  <img src ="http://www.cnblogs.com/Ring1981/aggbug/745533.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47968/" target="_blank">IE市场份额首次跌破60%</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>删除远程桌面链接</title><link>http://www.cnblogs.com/Ring1981/archive/2007/04/24/724884.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 24 Apr 2007 02:41:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/04/24/724884.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/724884.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/04/24/724884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/724884.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/724884.html</trackback:ping><description><![CDATA[<p>先查询：<br>qwinsta /server:servername<br><br>删除<br>rwinsta sessionid|sessionname /server:servername</p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/724884.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47965/" target="_blank">Google App Engine宕机6小时——云的安全在哪里？</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>域内机器改名问题</title><link>http://www.cnblogs.com/Ring1981/archive/2007/04/10/707533.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 10 Apr 2007 10:31:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/04/10/707533.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/707533.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/04/10/707533.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/707533.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/707533.html</trackback:ping><description><![CDATA[<p>域内有两台机器分别为ServerA(192.168.10.11)和ServerB(192.168.100.101), 将ServerA和ServerB互换机器名字后由于某些原因需要将他们的名字换回来, 就是说换回来后ServerA对应的ip还是192.168.10.11, ServerB对应的ip还是192.168.100.101. <br><br>但是以下问题出来了, 我想下面这些表象应该是同一个问题.<br>1) 从另一台机器(C)使用远程登陆,登陆到ServerA时,确跳转到ServerB上了.<br>2) 从 运行 输入 <a href="file://servera/">\\ServerA</a> ,同样跳转到ServerB上了.<br>3) 如果ping ServerA, 那么得到的结果是 reply from 192.168.100.101 .... , 期望的是reply from 192.168.10.11...<br><br>这个问题困扰了我一整天, 有人解决过同样的问题么? 多谢!<br><br>有人建议我干脆把ServerA改成别的名字,但这不是最好的办法.<br><br>@dudu及管理员, 若觉得本贴不合适发在首页, 就有劳移到别处了, 不然我就明天自己移走.&nbsp;<br><br>关于下面的回复：<br>@深圳同行<br>你应该更新你的DNS服务器的数据, 我无法得到DNS服务器, 我如何更新DNS服务器的数据呢? 再者,我只是域内的一个普通用户,我怎么操作能避免下回遇到同样的问题呢?</p>
<p>其他办法,比如在ServerA上通过重新配置系统,能解决该问题么?&nbsp; </p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/707533.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Asp.net常用状态管理方案分析</title><link>http://www.cnblogs.com/Ring1981/archive/2007/04/10/706659.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 10 Apr 2007 02:15:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/04/10/706659.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/706659.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/04/10/706659.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/706659.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/706659.html</trackback:ping><description><![CDATA[<div><script type="text/javascript"><!--
google_ad_client = "pub-7464627477897169";
//468x15, 创建于 07-12-24
google_ad_slot = "9633504051";
google_ad_width = 468;
google_ad_height = 15;
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>  <br/ /><span>Asp.net<span>常用状态管理方案有</span>:</span>
<p><span><strong>视图状态</strong></span><strong><span>View state<br />
</span><span>隐藏域</span></strong><span><strong> Hidden Fields<br />
</strong></span><span><strong>Cookies<br />
</strong></span><span><strong>Query string<br />
</strong></span><span><strong>Application state<br />
</strong></span><strong><span>Session state<br />
</span><span>Profile</span></strong></p>
<p><span>其中</span><span>View state, hidden fields, cookies, and query strings<span>将值以不同的方式保存在客户端。而</span>application state, session state, and profile<span>则在服务器端将值以不同的形式保存起来。</span></span>&nbsp;</p>
<p><strong><span>视图状态（</span><span>View state<span>）</span></span></strong></p>
<p><span>View state<span>会自动保存</span>web<span>页面各个元素的值，只要控件的</span>EnableViewState=true. ViewState<span>以键值对的形式存储元素的值</span>.<span>在</span>asp.net<span>中</span>,view state<span>的值是以隐藏域的形式通过哈希的方法存储在页面中</span>,<span>形同</span>: </span></p>
<p><span>&lt;input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTN7+FHXsyXJ2Jnzu0UxkEXCEetrg==" /&gt;</span></p>
<p><span>如果使用</span><span>View state<span>来存储数据</span>,<span>那么数据的大小不能超过</span>page<span>的</span>MaxPageStateFieldLength<span>定义的值</span>.</span></p>
<p><span><br />
优点</span><span>:<br />
</span><span>无需服务器端资源</span><span>,<span>由于</span>view state<span>是保存在页面中的</span>,<span>所以无需借用服务器端资源保存值的问题</span>.<br />
</span><span>使用简易</span><span>,<span>只须以键值对的形式即可保存元素的值</span>.<br />
</span><span>安全性方面由于</span><span>view state<span>保存的值是经哈希处理并且压缩过的</span>,<span>所以使用起来要比</span>Hidden Fields<span>安全</span>.</span></p>
<p><span>缺点</span><span>:<br />
</span><span>性能问题</span><span>,<span>正因为</span>view state<span>将值保存在</span>Page<span>中</span>,<span>因此每次在加载页面过程中都会去装载</span>view state<span>中保存的值</span>,<span>因此带来性能的损耗</span>.<br />
</span><span>安全问题，虽然</span><span>view state<span>保存的值是经哈希处理并且压缩处理的，但在页面中仍然以</span>hidden fields<span>的形式存在，仍然易被黑客截取并利用．<br />
</span></span></p>
<p><span><br />
<strong>隐藏域</strong></span><span><strong>(Hidden Fields)<span>：</span></strong></span></p>
<p><span>这是古老的</span><span>asp<span>保存元素值的一种方式</span>.<span>使用</span>Hidden Fields<span>取决于页面提交数据的方式</span>.<span>必须通过</span>Post<span>方法提交，才能取得</span>Hidden Fields<span>的值，如果使用</span>Http<span>的</span> Get<span>方法，则该</span>Hidden<span>元素的值无效。</span></span></p>
<p><span>Hidden Fields<span>另外一个特点就是，它保存元素的值在</span>Html<span>代码中是以明文的方式保存的。可以很方便地查看页面</span>html<span>源代码得到</span>hidden fields<span>元素的值。</span></span></p>
<p><span>优点：<br />
</span><span>使用方便, </span><span>适用范围广，几乎所有的浏览器和客户端设备都支持</span><span>hidden fields<span>这种形式．</span></span></p>
<p><span>缺点：<br />
</span><span>非常不安全<br />
</span><span>只能存储非常简单的数据，如</span><span>string<span>类型<br />
</span></span><span>性能问题，使用</span><span>hidden<span>　</span>fields<span>如同</span>view state<span>一样每次页面显示都要加载．</span></span>&nbsp;</p>
<p><span><strong><br />
Cookies<br />
<br />
</strong></span><span>Cookies<span>也是在客户端存储数据的一种形式。</span>Cookies<span>可以长期保存数据，也可以暂时保存数据，这依赖于</span>cookies<span>的过期时间设置。</span>Cookies<span>对应的作用范围是整个</span>web<span>站点，而不是某个页面，它依赖于浏览器进行管理，如果客户端浏览器禁用</span>Cookies<span>，那么就无法启用</span>Cookies<span>在客户端保存数据。</span>Cookies<span>伴随着页面的请求将数据发送到服务器端，它的值可以通过</span>Request<span>来获取。大多数浏览器支持</span>Cookies<span>能够存放</span><st1:chmetcnv w:st="on" unitname="m" sourcevalue="4" hasspace="False" negative="False" numbertype="1" tcsc="0">4M</st1:chmetcnv><span>字节的数据，同时浏览器对机器能够容纳的</span>Cookies<span>数也有限制，一般地，允许每个站点最多可以产生</span>20<span>个</span>Cookies<span>。</span></span></p>
<p><span>读取</span><span>Cookies<span>的值：<br />
</span></span><span>if (Request.Cookies["UserSettings"] != null)</span></p>
<p><span>{</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>string userSettings;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>if (Request.Cookies["UserSettings"]["Font"] != null)</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>{ userSettings = Request.Cookies["UserSettings"]["Font"]; }</span></p>
<p><span>}</span></p>
<p><span>向</span><span>Cookies<span>写值：</span></span></p>
<p><span>Response.Cookies["UserSettings"]["Font"] = "Arial";</span></p>
<p><span>Response.Cookies["UserSettings"]["Color"] = "Blue";</span></p>
<p><span>Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(1d);</span></p>
<p><span>优点：</span></p>
<p><span>可以配置过期时间<br />
</span><span>无需占用服务器端资源<br />
</span><span>简单易用<br />
</span><span>也可以保持持久数据</span></p>
<p><span>缺点：<br />
</span><span>大小限制，大多数浏览器置支持</span><st1:chmetcnv w:st="on" unitname="m" sourcevalue="4" hasspace="False" negative="False" numbertype="1" tcsc="0"><span>4M</span></st1:chmetcnv><span>字节。<br />
</span><span>受到用户配置限制，如果浏览器禁用</span><span>Cookies,<span>那么该项功能就没法使用<br />
</span></span><span>潜在的安全隐患。 由于</span><span>Cookies<span>是以文本文件的形式存放在客户端机器中，虽然</span>Cookies<span>的内容经过哈希，但仍然可以被人获取并利用。<br />
</span></span>&nbsp;</p>
<p><span><strong>查询字符串</strong></span>&nbsp;</p>
<p><span>查询字符串就是在页面的</span><span>URL<span>后面加上一些参数，通过这种形式进行页面之间的值传递。它提供了非常方便的页面传值方式。<br />
</span></span><span>形如：</span><span> <br />
</span><span><a href="http://www.abc.com/list.asp?id=1098&amp;type=a100"><span>http://www.abc.com/list.asp?id=1098&amp;type=a100</span></a></span></p>
<p><span>优点：<br />
</span><span>简单方便,</span><span>应用非常广泛</span></p>
<p><span>缺点：</span><span> <br />
</span><span>极不安全，非常有必要借助于</span><span>URLEncode<span>和</span>URLDecode<span>对字符串进行处理以增强安全。<br />
</span></span><span>大小受到限制，一些浏览器或客户端设备只支持长度为</span><span>2083<span>的</span>URL<span>字符串。</span></span></p>
<p>&nbsp;</p>
<p><st1:place w:st="on"><st1:placename w:st="on"><span><strong>Application</strong></span></st1:placename><span><strong> </strong><st1:placetype w:st="on"><strong>State</strong><br />
<br />
</st1:placetype></span></st1:place><span>Asp.net<span>允许你以</span>Application state<span>的方式存储值</span>--<span>它是</span>HttpApplicationState<span>类的一个实例。</span>Application state<span>提供一个全局的存储方式，可以被</span>web <span>应用程序的每一个页面获取。</span>Application state<span>和</span>Session State<span>一样，以键值对的形式存储值。</span></span></p>
<p><span>优点：<br />
</span><span>全局范围</span></p>
<p><span>缺点：<br />
</span><span>全局范围<br />
</span><span>占用服务器资源<br />
</span><span>脆弱性，由于</span><span>Application State<span>是存储在内存中，因此当应用程序停止或重启时会丢失。<br />
</span></span><span>扩展性差，无法在多个服务器或多个处理器之间共享。</span></p>
<p>&nbsp;<br />
<st1:place w:st="on"><strong><st1:placename w:st="on"><span>Session</span></st1:placename><span> <st1:placetype w:st="on">State</st1:placetype></span></strong></st1:place>&nbsp;</p>
<p><span>Session State<span>和</span>Application state<span>有点类似，但它作用于浏览器的会话中。如果不同的用户使用你的应用程序会产生不同的</span>session<span>会话。</span>Session state<span>也是以键</span>/<span>值对的形式存储数据。</span>&nbsp;</span>&nbsp;</p>
<p><span>优点：<br />
</span><span>使用方便<br />
</span><span>数据持久，因为</span>asp.net<span>提供的</span>Session<span>克服了原来</span>asp<span>进程依赖性的缺陷，可以将</span>Session<span>保存在数据库中，因此</span>session<span>的数据永久不会丢失。<br />
</span><span>无需</span>Cookies<span>支持，这也是</span>asp.net<span>的一大改进之处，可以在</span>ASP.NET<span>中客户端的</span>Session<span>信息以</span>Cookieless<span>方式存储。</span></p>
<p>&nbsp;<span>缺点：<br />
</span><span>由于</span><span>Session<span>变量存储在服务器端，因此占用服务器端资源。</span></span></p>
<p>&nbsp;<span><strong><br />
Profile</strong></span></p>
<p><span>以</span><span>Profile<span>的形式存储数据是</span>asp.net2.0<span>提供的一个新功能。它是将信息存储在数据库中的，因此永久不会丢失信息。</span></span></p>
<p><span>优点：<br />
</span><span>数据持久性<br />
</span><span>可扩展</span>&nbsp;</p>
<p><span>缺点：<br />
</span><span>由于</span><span>profile<span>将数据存储在数据库中，因此存在以下特点，<br />
</span></span><span>需要人工维护数据，<br />
</span><span>性能略差</span></p>
<p>&nbsp;<br />
<br />
</p><img src ="http://www.cnblogs.com/Ring1981/aggbug/706659.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>.NET中的缓存</title><link>http://www.cnblogs.com/Ring1981/archive/2007/04/10/680893.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 10 Apr 2007 02:13:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/04/10/680893.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/680893.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/04/10/680893.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/680893.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/680893.html</trackback:ping><description><![CDATA[<p><span>构建高性能的应用程序的非常重要一项就是使用缓存。使用缓存可以避免重新从读取服务器端读取数据，节省数据从客户端到服务器间往返的时间，同时也减轻了服务器数据存取的压力。如果客户端非常频繁地读取服务器上的数据，比如生成报表，并且服务器每次获取这些数据都经过复杂的处理逻辑，那么就可能非常有必要使用缓存。应用程序需要</span><span>.NET2.0</span><span>中提供了两种不同方式的缓存</span><span>:</span><strong><span>页面输出缓存</span></strong><span>和<strong>应用程序数据缓存</strong>。</span><strong>&nbsp;</strong></p>
<p><strong><span>页面输出缓存</span></strong><strong></strong></p>
<p><span>我们知道</span><span>asp.net</span><span>服务器控件每次生成数据都要经过一个复杂的生存周期过程，参见</span><span>[</span><span>服务器端控件页面生存周期</span><span>]</span><span>。使用页面输出缓存就是指内存中缓存</span><span>asp.net</span><span>页面的内容，这样每次需要这些内容都无需重新生成，取而代之的是从内存中直接读取，这样节省了</span><span>asp.net</span><span>页面控件生成这些内容的时间，从而大大地提高了应用程序的性能。如果客户访问的这些页面的内容不经常变化，这些页面的访问量较大，那么就非常适宜使用页面输出缓存。</span></p>
<p><span>我们可以设置两种不同类型的页面输出缓存：<strong>全局页面缓存</strong>和<strong>页面片断缓存</strong>。全局页面缓存是指将整个页面的内容都缓存在内存中供客户端调用。而页面片断缓存是指在内存中缓存部分页面的内容，而其他的部分是动态重新生成的。</span></p>
<p><span>页面片断缓存有一种较为特殊的情形是，除了页面的某一局部内容不进行缓存，其他整个页面是缓存起来的，这种情形叫做</span><span>Post-Cache Substitution</span><span>。比如，登陆后在页面某个部分显示用户名处，我们就有可能用到这种情形。</span></p>
<p>&nbsp;<strong><span>使用页面输出缓存</span></strong><strong></strong></p>
<p><span>可以通过两种方式设置使用缓存。</span></p>
<p><span>通过</span><span>web.config</span><span>配置缓存如下</span><span>:<br></span><span>&lt;System.web&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;caching&gt;</span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;outputCache enableOutputCache="true" </span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>enableFragmentCache="true" </span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sendCacheControlHeader="true" </span></p>
<p align=left><span><span>&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>omitVaryStar="false"&gt;</span></p>
<p align=left><span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/outputCache&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;caching&gt;</span></p>
<p align=left><span>&lt;/system.web&gt;</span></p>
<p><span>在页面中配置使用缓存如下：<br></span>&nbsp;</p>
<p><strong><span>如何从缓存中读取数据</span></strong><strong></strong></p>
<p><span>要从缓存中读取数据，需要先判断一下缓存的键值是否存在，因为缓存中存储的信息是不稳定的，可能它已经被</span><span>ASP.NET</span><span>移去。因此推荐采用如下方式读取缓存的内容：</span><strong></strong></p>
<p align=left><span>string cachedString;</span></p>
<p align=left><span>if (Cache["CacheItem"] != null)</span></p>
<p align=left><span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>cachedString = (string)Cache["CacheItem"];</span></p>
<p align=left><span>}</span></p>
<p align=left><span>else</span></p>
<p align=left><span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>Cache.Insert("CacheItem", "Hello, World.");</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>cachedString = (string)Cache["CacheItem"];</span></p>
<p align=left><span>}</span></p>
<p align=left>&nbsp;</p>
<p><strong><span>全局页面缓存</span></strong><strong>&nbsp;</strong></p>
<p><span>下面例子表示缓存时间</span><span>10</span><span>秒，就是说每隔</span><span>10</span><span>秒读取一次系统时间。</span></p>
<p><span>对</span><span>VaryByParam<span>参数的一点说明：</span></span></p>
<p><strong><span>VaryByParam</span></strong><span> </span><span>属性功能十分强大，它允许用户控件作者指示</span><span> ASP.NET </span><span>在服务器上缓存</span><span>/</span><span>存储输出缓存区域的多个实例。例如，前一个用户控件的宿主页的下列</span><span> URL </span><span>缓存用户控件内容的单独实例。</span><span> </span></p>
<p align=left><u><span>http://localhost/mypage.aspx?categoryid=foo&amp;selectedid=0</span></u><span><br><u>http://localhost/mypage.aspx?categoryid=foo&amp;selectedid=1</u> </span></p>
<p align=left><span>用户控件内的逻辑因此能够根据提供的参数动态生成不同的内容（单独缓存）。</span><span> </span></p>
<p align=left><span>除了支持</span><span> </span><strong><span>VaryByParam</span></strong><span> </span><span>属性外，片段缓存还支持</span><span> </span><strong><span>VaryByControl</span></strong><span> </span><span>属性。</span><strong><span>VaryByParam</span></strong><span> </span><span>属性基于使用</span><span> </span><strong><span>POST</span></strong><span> </span><span>或</span><span> </span><strong><span>GET</span></strong><span> </span><span>发送的名称</span><span>/</span><span>值对改变缓存结果，而</span><span> </span><strong><span>VaryByControl</span></strong><span> </span><span>属性则通过用户控件中的控件改变缓存片段。例如：</span><span> </span></p>
<p align=left><span>&lt;%@ OutputCache Duration="120" VaryByParam="none" VaryByControl="Category" %&gt;</span></p>
<p align=left><span>注意：与输出缓存页相似，即使不使用</span><span> </span><strong><span>VaryByParam</span></strong><span>，也要求显式使用它。</span><span> </span></p>
<p><span>例如，下列指令指示</span><span> ASP.NET </span><span>输出缓存用户控件</span><span> 120 </span><span>秒，并使用</span><span>&#8220;CategoryID&#8221;</span><span>和</span><span>&#8220;SelectedID&#8221;</span><span>查询字符串或窗体发布参数改变缓存。</span><span> </span></p>
<p><span>&lt;%@ OutputCache Duration="120" VaryByParam="CategoryID;SelectedID"%&gt;</span></p>
<p align=left><span>示例代码：</span></p>
<p align=left><span>&lt;%</span><span>@</span><span> <span>Page</span> <span>Language</span><span>="C#"</span> <span>%&gt;</span></span></p>
<p align=left><span>&lt;%</span><span>@</span><span> <span>OutputCache</span> <span>Duration</span><span>="10"</span> <span>VaryByParam</span><span>="*"</span><span>%&gt;</span></span></p>
<p align=left><span>&lt;!</span><span>DOCTYPE</span><span> <span>html</span> <span>PUBLIC</span> <span>"-//W3C//DTD XHTML 1.0 Transitional//EN"</span> <span>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</span></span></p>
<p align=left><span>&lt;</span><span>script</span><span> <span>runat</span><span>="server"&gt;</span></span>&nbsp;</p>
<p align=left><span>&lt;/</span><span>script</span><span>&gt;</span></p>
<p align=left><span>&lt;</span><span>html</span><span> <span>xmlns</span><span>="http://www.w3.org/1999/xhtml"</span> <span>&gt;</span></span></p>
<p align=left><span>&lt;</span><span>head</span><span> <span>runat</span><span>="server"&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;</span><span>title</span><span>&gt;</span>Untitled Page<span>&lt;/</span><span>title</span><span>&gt;</span></span></p>
<p align=left><span>&lt;/</span><span>head</span><span>&gt;</span></p>
<p align=left><span>&lt;</span><span>body</span><span>&gt;</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;</span><span>form</span> <span>id</span><span>="form1"</span> <span>runat</span><span>="server"&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;</span><span>div</span><span>&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;%</span>Response.Write(System.<span>DateTime</span>.Now);<span>%&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;/</span><span>div</span><span>&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;/</span><span>form</span><span>&gt;</span></span></p>
<p align=left><span>&lt;/</span><span>body</span><span>&gt;</span></p>
<p><span>&lt;/</span><span>html</span><span>&gt;</span></p>
<p>&nbsp;</p>
<p><strong><span>页面片断缓存</span></strong><strong></strong></p>
<p align=left><span>设置页面片断缓存可以采用</span><span>&lt;%</span><span>@</span><span> <span>Control</span> <span>Language</span><span>="C#"</span> <span>ClassName</span><span>="WebUserControl"</span> <span>%&gt;</span></span></p>
<p><span>或者在类名前加特性</span><span>[<span>PartialCaching</span>(3)]<span>。</span></span></p>
<p align=left><span>如：</span></p>
<p align=left><span>&lt;%</span><span>@</span><span> <span>Control</span> <span>Language</span><span>="C#"</span> <span>ClassName</span><span>="WebUserControl"</span> <span>%&gt;</span></span></p>
<p align=left><span>&lt;%</span><span>@</span><span> <span>OutputCache</span> <span>Duration</span><span>="10"</span> <span>VaryByParam</span><span>="*"</span><span>%&gt;</span></span></p>
<p align=left><span>&lt;</span><span>script</span><span> <span>runat</span><span>="server"&gt;</span></span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>protected</span> <span>void</span> Page_Load(<span>object</span> sender, <span>EventArgs</span> e)</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>this</span>.Label1.Text = System.<span>DateTime</span>.Now.ToString(<span>"hh:mm:ss"</span>);</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>this</span>.timer.Style.Add(<span>"width"</span>, (<span>DateTime</span>.Now.Second * 4).ToString() + <span>"px"</span>);</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p align=left><span>&lt;/</span><span>script</span><span>&gt;</span></p>
<p align=left><span>&lt;</span><span>div</span><span> <span>id</span> <span>=</span> <span>"timer"</span> <span>runat</span><span>="server"</span> <span>style</span><span>="background-color:Cyan;"&gt;</span></span></p>
<p align=left><span>&lt;</span><span>asp</span><span>:</span><span>Label</span><span> <span>ID</span><span>="Label1"</span> <span>runat</span><span>="server"</span> <span>Text</span><span>="Label"&gt;&lt;/</span><span>asp</span><span>:</span><span>Label</span><span>&gt;</span></span></p>
<p><span>&lt;/</span><span>div</span><span>&gt;</span></p>
<p><span>或，</span></p>
<p><span>[<span>PartialCaching</span>(3)]</span></p>
<p align=left><span>public</span><span> <span>partial</span> <span>class</span> <span>WebUserControl3</span> : System.Web.UI.<span>UserControl</span></span></p>
<p align=left><span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span><span>protected</span> <span>void</span> Page_Load(<span>object</span> sender, <span>EventArgs</span> e)</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>{</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>this</span>.Label1.Text = System.<span>DateTime</span>.Now.ToString(<span>"hh:mm:ss"</span>);</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>this</span>.timer.Style.Add(<span>"width"</span>, (<span>DateTime</span>.Now.Second * 4).ToString() + <span>"px"</span>);</span></p>
<p align=left><span><span>&nbsp;&nbsp;&nbsp; </span>}</span></p>
<p><span>}</span></p>
<p><strong>&nbsp;</strong></p>
<p><strong><span>应用程序数据缓存</span></strong><strong></strong></p>
<p><a name=intro><span>ASP.NET </span></a><span><span>提供一个功能完整的缓存引擎，页面可使用该引擎通过</span></span><span><span> HTTP </span></span><span><span>请求存储和检索任意对象。</span></span><span><span>ASP.NET </span></span><span><span>缓存对于每个应用程序是私有的并且将对象存储在内存中。缓存的生存期与应用程序的生存期相同，也就是说，当应用程序重新启动时，将重新创建缓存。</span></span><span><span> </span></span><span></span></p>
<p><span><span>缓存提供了简单的词典接口，使程序员可以轻松地将对象放到缓存中以及从缓存中检索对象。在最简单的情况下，将某项放到缓存中就像向词典中添加一个词条一样。</span></span><span></span></p>
<p align=left><span><span>对于需要更复杂功能的应用程序，</span></span><span><span>ASP.NET </span></span><span><span>缓存支持清理、过期、文件依赖项和键依赖项。</span></span><span><span> </span></span><span></span></p>
<p align=left><span><span><span>&#183;&nbsp;</span></span><span>清理是指当内存变得很少时，缓存尝试移除不常使用和不太重要的项。希望控制清理如何发生的程序员可以在项插入到缓存时为清理程序提供提示，指出创建项的相对成本和使项保持有用而必须具有的相对访问率。</span></span><span><span> </span></span><span></span></p>
<p align=left><span><span><span>&#183;&nbsp;</span></span><span>过期使程序员得以提供缓存项的生存期，其时间既可以是确切时间（例如，</span></span><span><span>6:00 </span></span><span><span>过期），也可以是相对于项的上次使用的时间（例如，上次访问项后</span></span><span><span> 20 </span></span><span><span>分钟过期）。项过期后将从缓存中被移除，以后若试图检索它，将返回空值，除非将它重新插入缓存。</span></span><span><span> </span></span><span></span></p>
<p align=left><span><span><span>&#183;&nbsp;</span></span><span>文件和键依赖项允许缓存项的有效性基于外部文件或其他缓存项。如果依赖项改变，则缓存项失效并从缓存中被移除。有关如何使用此功能的示例，请考虑下列方案：应用程序从定期更新的</span></span><span><span> XML </span></span><span><span>文件中读取财务信息。应用程序处理文件中的数据并以可使用的格式创建表示该数据的对象图形。应用程序缓存该数据并在从中读取该数据的文件上插入依赖项。当更新该文件时，数据从缓存中被移除，应用程序可以重新读取它并重新插入该数据的更新副本。</span></span><span><span> </span></span><span></span></p>
<p><span><span>示例，建立一个缓存</span></span><span><span>xml</span></span><span><span>文件的应用程序如下[下载源代码<a href="http://www.cnblogs.com/Files/Ring1981/Cache.rar">http://www.cnblogs.com/Files/Ring1981/Cache.rar</a>]</span></span><span><span>:</span></span></p>
<p><span><span><span>1．&nbsp;</span></span><span>建立</span></span><span><span>default.aspx</span></span><span><span>页面</span></span><span></span></p>
<p align=left><span><span>&lt;%</span></span><span><span>@</span></span><span><span> <span>Page</span> <span>Trace</span><span>="true"</span> <span>TraceMode</span><span>="SortByCategory"</span> <span>Language</span><span>="C#"</span> <span>AutoEventWireup</span><span>="true"</span> <span>CodeFile</span><span>="Default.aspx.cs"</span> <span>Inherits</span><span>="_Default"</span> <span>%&gt;</span></span></span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><span><span>&lt;!</span></span><span><span>DOCTYPE</span></span><span><span> <span>html</span> <span>PUBLIC</span> <span>"-//W3C//DTD XHTML 1.0 Transitional//EN"</span> <span>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</span></span></span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><span><span>&lt;</span></span><span><span>html</span></span><span><span> <span>xmlns</span><span>="http://www.w3.org/1999/xhtml"</span> <span>&gt;</span></span></span></p>
<p align=left><span><span>&lt;</span></span><span><span>head</span></span><span><span> <span>runat</span><span>="server"&gt;</span></span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;</span><span>title</span><span>&gt;</span>Untitled Page<span>&lt;/</span><span>title</span><span>&gt;</span></span></span></p>
<p align=left><span><span>&lt;/</span></span><span><span>head</span></span><span><span>&gt;</span></span></p>
<p align=left><span><span>&lt;</span></span><span><span>body</span></span><span><span>&gt;</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;</span><span>form</span> <span>id</span><span>="form1"</span> <span>runat</span><span>="server"&gt;</span></span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;</span><span>div</span><span>&gt;</span></span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&lt;</span><span>asp</span><span>:</span><span>Button</span> <span>ID</span><span>="Button1"</span> <span>runat</span><span>="server"</span> <span>Text</span><span>="Flush Cache"</span> <span>OnClick</span><span>="Button1_Click"</span> <span>/&gt;</span></span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;</span><span>asp</span><span>:</span><span>DataGrid</span> <span>ID</span><span>="dg1"</span> <span>runat</span><span>="server"/&gt;</span> </span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;/</span><span>div</span><span>&gt;</span></span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span><span>&lt;/</span><span>form</span><span>&gt;</span></span></span></p>
<p align=left><span><span>&lt;/</span></span><span><span>body</span></span><span><span>&gt;</span></span></p>
<p align=left><span><span>&lt;/</span></span><span><span>html</span></span><span><span>&gt;</span></span></p>
<p><span>&nbsp;</span></p>
<p><span><span><span>2．&nbsp;</span></span><span>添加一个</span></span><span><span>names.xml</span></span></p>
<p align=left><span><span>&lt;?</span></span><span><span>xml</span></span><span><span> </span></span><span><span>version</span></span><span><span>=</span></span><span><span>"<span>1.0</span>"<span> </span><span>encoding</span><span>=</span>"<span>utf-8</span>"<span> ?&gt;</span></span></span></p>
<p align=left><span><span>&lt;</span></span><span><span>people</span></span><span><span>&gt;</span></span></p>
<p align=left><span><span>&nbsp;&lt;</span></span><span><span>person</span></span><span><span> </span></span><span><span>first</span></span><span><span>=</span></span><span><span>"<span>Scott</span>"<span> </span><span>last</span><span>=</span>"<span>stafield</span>"<span>&gt;&lt;/</span><span>person</span><span>&gt;</span></span></span></p>
<p align=left><span><span>&nbsp;&lt;</span></span><span><span>person</span></span><span><span> </span></span><span><span>first</span></span><span><span>=</span></span><span><span>"<span>jim</span>"<span> </span><span>last</span><span>=</span>"<span>Green</span>"<span>&gt;&lt;/</span><span>person</span><span>&gt;</span></span></span></p>
<p align=left><span><span>&nbsp;&lt;</span></span><span><span>person</span></span><span><span> </span></span><span><span>first</span></span><span><span>=</span></span><span><span>"<span>kate</span>"<span> </span><span>last</span><span>=</span>"<span>Green</span>"<span>&gt;&lt;/</span><span>person</span><span>&gt;</span></span></span></p>
<p><span><span>&lt;/</span></span><span><span>people</span></span><span><span>&gt;</span></span></p>
<p><span><span>3.<span>添加后台代码</span></span></span></p>
<p align=left><span><span><span>&nbsp;</span></span></span><span><span>using</span></span><span><span> System;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Data;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Configuration;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Collections;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Web;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Web.Security;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Web.UI;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Web.UI.WebControls;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Web.UI.WebControls.WebParts;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Web.UI.HtmlControls;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Data;</span></span></p>
<p align=left><span><span>using</span></span><span><span> System.Web.Caching;</span></span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><span><span>public</span></span><span><span> <span>partial</span> <span>class</span> <span>_Default</span> : System.Web.UI.<span>Page</span></span></span></p>
<p align=left><span><span>{</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span><span>protected</span> <span>void</span> Page_Load(<span>object</span> sender, <span>EventArgs</span> e)</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span>{</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span> (!Page.IsPostBack)</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>DataSet</span> ds = <span>null</span>;</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ds = (<span>DataSet</span>)Cache[<span>"names"</span>];</span></span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>if</span> (ds == <span>null</span>)</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>string</span> path = <span>@"c:\inetpub\wwwroot\Cache\names.xml"</span>;</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ds = <span>new</span> <span>DataSet</span>();</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ds.ReadXml(path);</span></span></p>
<p align=left><span>&nbsp;</span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>CacheDependency</span> cd = <span>new</span> <span>CacheDependency</span>(path);</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Cache.Insert(<span>"names"</span>, ds, cd);</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Trace.Warn(<span>"Names read from XML file"</span>);</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>else</span></span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>{</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Trace.Warn(<span>"Names read from cache"</span>);</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dg1.DataSource = ds;</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dg1.DataBind();</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>}</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span>}</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span><span>protected</span> <span>void</span> Button1_Click(<span>object</span> sender, <span>EventArgs</span> e)</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span>{<br></span></span><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Cache.Remove(<span>"names"</span>);</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Response.Redirect(<span>"default.aspx"</span>);</span></span></p>
<p align=left><span><span><span>&nbsp;&nbsp;&nbsp; </span>}<br></span></span><span><span>}</span></span></p>
<p><span><span>运行程序</span></span><span><span>, <span>第一次运行时</span>,DataGrid<span>里的数据是从</span>xml<span>文件中读取的。 以后每次刷新，文件都是从缓存读取的。 我们可以从每次运行时间看到，每次读取</span>xml<span>文件花费时间大约</span></span></span><span><span>0.001275</span></span><span><span>s,</span></span><span><span>而每次读取缓存</span></span><span><span>花费时间大约</span></span><span><span>0.</span></span><span><span>000044</span></span><span><span>。</span></span><span><span> </span></span><span><span>可见读取缓存数据性能能够大大地改善。</span></span><span></span></p>
<table cellSpacing=0 cellPadding=0 width="100%" border=0>
    <tbody>
        <tr>
            <td>
            <p align=center><span><strong><span>Category</span></strong></span></p>
            </td>
            <td>
            <p align=center><span><strong><span>Message</span></strong></span></p>
            </td>
            <td>
            <p align=center><span><strong><span>From First(s)</span></strong></span></p>
            </td>
            <td>
            <p align=center><span><strong><span>From Last(s)</span></strong></span></p>
            </td>
        </tr>
        <tr>
            <td></td>
            <td>
            <p align=left><span><span>Names read from XML file</span></span></p>
            </td>
            <td>
            <p align=left><span><span>0.00155997480126664</span></span></p>
            </td>
            <td>
            <p align=left><span><span>0.001275</span></span><span></span></p>
            </td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td>
            <p align=left><span><span>Names read from cache</span></span></p>
            </td>
            <td>
            <p align=left><span><span>0.000343619091253218</span></span></p>
            </td>
            <td>
            <p align=left><span><span>0.000044</span></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span><br><strong>使用数据库缓存:<br></strong><br>待续...&nbsp;<br></span></p>
<p><span><br>参考文件：</span></p>
<p><span>MSDN </span><span>文档<br></span><span>Microsoft</span><span> ASP.NET </span><span>入门教</span><span>: </span><span><a href="http://chs.gotdotnet.com/quickstart/aspplus/doc/quickstart.aspx">http://chs.gotdotnet.com/quickstart/aspplus/doc/quickstart.aspx</a>&nbsp; <br></span><span>Scott stafield<span>先生的视频教程</span></span></p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/680893.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>如何控制Yahoo! Slurp蜘蛛的抓取频度 [本文转载]</title><link>http://www.cnblogs.com/Ring1981/archive/2007/03/19/679781.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Mon, 19 Mar 2007 05:40:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/03/19/679781.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/679781.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/03/19/679781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/679781.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/679781.html</trackback:ping><description><![CDATA[<p><em>来源:&nbsp;&nbsp;<span style="COLOR: red"> </span><a href="http://ysearchblog.cn/2006/07/yahoo_slurp.html"><span style="COLOR: red">http://ysearchblog.cn/2006/07/yahoo_slurp.html</span></a><br>作者：<span style="COLOR: red">车东 产品经理</span></em></p>
<p>上周末豆瓣的阿北给我电话：最近你们雅虎的蜘蛛（Yahoo! Slurp）对<a href="http://douban.com/">豆瓣网</a>的抓取频度非常高，导致服务器的速度有些慢，如何才能让Slurp降低抓取频度呢？</p>
<p>我首先想到的建议是在网站的robots.txt中增加<a href="http://search.help.cn.yahoo.com/h4_5.html">Crawl-delay: 设置</a>，这个设置是目前Slurp独有的，用来告诉Slurp蜘蛛2次访问之间的间隔，单位是秒。</p>
<p>剩下的问题就是Crawl-delay的值该设置多大，这个要看网站自身可以承受的负载，假设你希望Slurp每10秒来访问一次，这个设置就是：</p>
<p>User-agent: *<br>Crawl-delay: 10</p>
<p>我推荐使用 User-agent: * 万一有其他引擎逐步也支持这个配置呢，而不支持这个配置的引擎也会跳过这句。</p>
<p>可实际上我从自己网站的日志中看到：Slurp的压力却不止10秒一次，原因是这样：雅虎美国和雅虎中国有2套蜘蛛在运行，因此实际的访问可能是这样：</p>
<p>1.1.1.1 30/Jun/2006:00:00:03 Yahoo! Slurp China<br>2.2.2.2 30/Jun/2006:00:00:04 Yahoo! Slurp<br>1.1.1.1 30/Jun/2006:00:00:13 Yahoo! Slurp China</p>
<p>每个蜘蛛都是遵循Crawl-delay间隔的，因此为了进一步降低Slurp压力，希望达到10秒一次请求的频道 实际的Crawl-delay配置就要*2。</p>
<p>但是实际上我看到的雅虎的蜘蛛是分布在很多台服务器上的：而多个服务器集群之间也是不相互协调同一网站的抓取频度的</p>
<p>1.1.1.1 30/Jun/2006:00:00:03 Yahoo! Slurp China<br>2.2.2.2 30/Jun/2006:00:00:04 Yahoo! Slurp<br>1.1.1.1 30/Jun/2006:00:00:13 Yahoo! Slurp China<br>1.1.1.2 30/Jun/2006:00:00:13 Yahoo! Slurp China<br>1.1.1.1 30/Jun/2006:00:00:23 Yahoo! Slurp China<br>1.1.1.2 30/Jun/2006:00:00:27 Yahoo! Slurp China</p>
<p>我统计了一下：Slurp来源于40多个IP网段，同网段内的蜘蛛协调抓取频度。因此：实际的Slurp设置，需要设置为10*40 = 400秒，才能达到期望的Slurp每10秒访问一次频度。</p>
<p>给豆瓣推荐的Crawl-delay: 100 平均2.5秒访问一次，应该没有问题了。</p>
<p>另外，雅虎搜索的<a href="http://search.help.cn.yahoo.com/index.html">帮助中心</a>刚刚改版，专门增加了<a href="http://search.help.cn.yahoo.com/h4.html">站长专区</a>，可以去看看。</p>
<p>注：我查了一下Slurp的意思，就是咂吧嘴的声音，发音听着很像在吃面条吧？</p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/679781.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47960/" target="_blank">火狐3.5版被指推出太匆忙：存在50多个漏洞</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>"The server has rejected the client credentials"解决方案</title><link>http://www.cnblogs.com/Ring1981/archive/2007/03/16/677306.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Fri, 16 Mar 2007 07:01:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/03/16/677306.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/677306.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/03/16/677306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/677306.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/677306.html</trackback:ping><description><![CDATA[<p>当垮域访问.net Remoting应用程序时,会出现<span style="FONT-FAMILY: Arial"><font face="Times New Roman" color=#000000 size=3>"The server has rejected the client credentials" 错误. 解决方案就是在客户端模拟授权身份登陆.<br><br>客户端代码写法<br><br>RemotingConfiguration.Configure(@"C:\remotingdemo\Client\Client.exe.config", true);<br>RemoteObject obj = new RemoteObject();<br>... ...<br><br>配置文件格式:<br><br>&lt;?xml version="1.0" encoding="utf-8" ?&gt;<br>&lt;configuration&gt;<br>&nbsp;&lt;system.runtime.remoting&gt;<br>&nbsp;&nbsp;&lt;application&gt;<br>&nbsp;&nbsp;&nbsp;&lt;client&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;wellknown type="RemotingDemo.RemoteObject, General"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="tcp://binsu-***:8001/GetObject" /&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/client&gt;<br>&nbsp;&nbsp;&nbsp;&lt;channels&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;channel ref="tcp" secure="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; impersonationLevel="Impersonation" protectionLevel="EncryptAndSign"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username="administrator" password="******" domain="binsu-***"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;clientProviders&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;formatter ref="binary"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/clientProviders&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;serverProviders&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;formatter ref="soap" typeFilterLevel="Full" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;formatter ref="binary" typeFilterLevel="Full" /&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/serverProviders&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/channel&gt;<br>&nbsp;&nbsp;&nbsp;&lt;/channels&gt;<br>&nbsp;&nbsp;&lt;/application&gt;<br>&nbsp;&lt;/system.runtime.remoting&gt;<br>&lt;/configuration&gt;<br><br>毕!<br></font></span></p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/677306.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47959/" target="_blank">Google对手机搜索进行优化升级</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>测试运行时间通常该用Stopwatch </title><link>http://www.cnblogs.com/Ring1981/archive/2007/03/15/676216.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Thu, 15 Mar 2007 09:07:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/03/15/676216.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/676216.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/03/15/676216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/676216.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/676216.html</trackback:ping><description><![CDATA[&nbsp;测试运行时间通常该用Stopwatch ,如: <br><br>Stopwatch&nbsp;watch&nbsp;<span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;System.Diagnostics.Stopwatch();<br></span><span style="COLOR: #000000">watch.Start();<br></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;array.Length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span id=Codehighlighter1_765_815_Open_Text><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp; ... ...<br></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br>watch.Stop();<br><br><br>如果用:<br>System.DateTime.Now.Ticks t1 = ..<br>... ...<br>System.DateTime.Now.Ticks t2= ..<br><br>t2-t1<br>通常不太准确!</span>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/676216.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47958/" target="_blank">风声又起 Windows 7 RTM版7月13日完成</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>如何在.net应用程序中执行其他程序?</title><link>http://www.cnblogs.com/Ring1981/archive/2007/03/08/667764.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Thu, 08 Mar 2007 02:33:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/03/08/667764.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/667764.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/03/08/667764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/667764.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/667764.html</trackback:ping><description><![CDATA[<p>&nbsp;1.</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;Process&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Process();<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;p.StartInfo.FileName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">cmd.exe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;p.StartInfo.Arguments&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">notepad.exe</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">p.StartInfo.Arguments&nbsp;=&nbsp;"/c"+"C:\\\"Documents&nbsp;and&nbsp;Settings\"\\Test\\Test.exe";</span><span style="COLOR: #008000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;p.StartInfo.UseShellExecute&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;p.StartInfo.CreateNoWindow&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;p.Start();<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(waitForExit)<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.WaitForExit();<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>2.<br><font size=2>用</font><font size=3>WinExec</font><br>[DllImport("kernel32.dll")]<br>&nbsp;&nbsp;&nbsp; public static extern int WinExec(string exeName, int operType);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>public void StartProgram()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WinExec("....name.exe",5);<br>}<br><br>3. <br><font size=2>用ShellExecute</font>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/667764.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47957/" target="_blank">乔布斯和埃利森</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>如何构建安全的.net web应用系统</title><link>http://www.cnblogs.com/Ring1981/archive/2007/02/10/646489.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Sat, 10 Feb 2007 01:29:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/02/10/646489.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/646489.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/02/10/646489.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/646489.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/646489.html</trackback:ping><description><![CDATA[<p>&nbsp;构建一个安全的系统，这是一个非常庞大的工程。它包括设置网络安全，设置操作系统安全以及应用程序本身的安全性。本文介绍的是有关应用.Net技术如何构建一个安全的Web应用系统。<br /><br /><strong>一 安全涉及的服务</strong><br /><br />构建一个Web应用系统，肯定要涉及到客户端，iis以及数据库等各个组建。下面这幅图[该图来源：<a href="http://msdn2.microsoft.com/en-us/library/aa302415.aspx">http://msdn2.microsoft.com/en-us/library/aa302415.aspx</a>]很好地反映了web应用程序的整个风貌，左边表示web应用程序设计的组件或服务，右边表示各个组件或服务可以考虑使用的安全方案。<br />比如在IIS这个环节上，我们可以使用匿名访问或设置其它的验证控制方式，可以设置IP地址和域名限制，也可以设置安全案通讯服务器证书。最新版本的IIS都较上一个IIS版本更好的安全改进。最新的IIS7新增安全性可以阅读<a href="http://blogs.iis.net/bhill/archive/2006/08/16/Security-features-in-IIS-7.aspx">http://blogs.iis.net/bhill/archive/2006/08/16/Security-features-in-IIS-7.aspx</a>。<br /><br /><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/jiagoutu.gif" border="0"  alt="" /><br /></p>
<p><br /><strong>二 IIS的设置</strong><br /><br />如何设置IIS，在最大程度上确保IIS安全呢？<br />1. 给IIS打好补丁。 每隔一段时间，微软都会发布一些安全更新的补丁，必须及时给您的系统打上这些更新补丁。<br />2. 更改vs 2005自动生成的web项目的文件存放位置。建立web项目时，vs 2005会自动在C:\Inetpub\wwwroot下创建项目目录，更改这个自动生成的目录，将他放在其他盘下的某个位置，将会增加入侵者找到文档目录的难度。<br />3. 如采用匿名访问，给匿名用户尽量少的系统权限。<br />4. 如有必要，给站点设置IP地址限制。<br />5. 禁用目录浏览项目，阻止恶意用户导航到带有危险工具的目录。<br />&nbsp;&nbsp; [站点]-&gt;[属性]-&gt;[主目录]-&gt;[目录浏览]<br />6. 禁用父路径浏览，以防恶意用户使用MapPath方法浏览父目录。<br />&nbsp;&nbsp; [站点]-&gt;[属性]-&gt;[主目录]-&gt;[应用程序配置]-&gt;[启用父路径]<br />7. 删除不必要的IIS虚拟目录<br /><br /><br /><strong>三 Web程序的设置</strong><br /><br /><strong>1.&nbsp;设置服务器的验证方式</strong><br />.net 提供了我们三种验证的方式,分别为Windows身份验证,窗体身份验证和.net Passport身份验证。对于这三种验证方式，msdn中的 <a href="http://msdn2.microsoft.com/en-us/library/aa302388.aspx">http://msdn2.microsoft.com/en-us/library/aa302388.aspx</a>&nbsp;一文已对此作了非常详细的介绍。<br /><br /><strong>2. 加密连接数据库字符串</strong><br />&nbsp;
不少朋友喜欢将连接数据库字符串直接放在web.config中的&lt;connectionStrings&gt;节点下，如同&lt;add
name="SQLConnString" connectionString="Data Source=... User
Id=...;Password=....;Initial Catalog=...;"
providerName="System.Data.SqlClient"/&gt;其实这样做非常不安全，万一web.config这个文件被非法用
户获取，那么数据库服务器上的数据库及用户名密码信息就会被一览无余，这等于给了非法用户一个防盗门的钥匙。有两中较好的方法加密方法：<br /><br />方法1：<br />msdn中有两篇很好的文章分别叙述了如何使用DPAPI和RSA分别给它加密。<br />Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI： <!--content type: PSDK_13. Transform: pag2mtps.xslt.--><a href="http://msdn2.microsoft.com/en-us/library/ms998280.aspx">http://msdn2.microsoft.com/en-us/library/ms998280.aspx</a><br />Encrypt Configuration Sections in ASP.NET 2.0 Using RSA：&nbsp;<!--content type: PSDK_13. Transform: pag2mtps.xslt.--><a href="http://msdn2.microsoft.com/en-us/library/ms998283.aspx">http://msdn2.microsoft.com/en-us/library/ms998283.aspx</a><br /><br />方法2：<br />在windows注册表中新建键值，将SQLConnString加密后的信息存放在该键值上，然后设置某部分用户才有权限去读取注册表中的键值，这不失为一种更为安全的方法。<br /><br /><strong>3.&nbsp; 预防跨站点攻击</strong><br /><br />何为跨站点攻击？跨站点攻击是恶意教本通过其他站点通过脚本的形式注入系统。<br />如 view.aspx?stuname=sam 写成view.aspx?stuname=&lt;script&gt;alert('you are attacked!')&lt;/script&gt;<br />这就是一个典型的跨站点攻击。<br /><br />预防的措施有：<br /><br />1. 限制输入格式,输入类型，输入长度以及输入字符<br />&nbsp;如果你使用asp.net的web控件，可以使用asp.net提供的服务器端验证控件加以验证。如果使用html server端控件，那就需要使用System.Text.RegularExpressons.Regex在服务器端加以验证。<br />注意，<strong>不要仅仅在客户端使用js代码加以验证</strong>。因为客户端的js脚本可以轻松地通过禁用教本语言将它忽略。我对客户端的js脚本的理解是，他仅仅帮助改善用户体验。<br /><br />2.&nbsp;格式化输出。将输入的内容通过HttpUtility.HtmlEncode处理，这样就不能直接看出输出的内容。<br /><br />3.&nbsp;
要注意使用一些有潜在危险的html标签，这些标签很容易嵌入一些恶意网页代码。如&lt;img&gt;
&lt;iframe&gt;&lt;script&gt;&lt;frameset&gt;&lt;embed&gt;&lt;object&gt;&lt;
style&gt;等。<br /><br /><strong>4. 预防SQL注入式攻击<br />
</strong></p>
<p><strong><span style="font-weight: normal;">何为SQL注入式攻击？ 利用SQL语法规则，构建出恶意攻击语句入侵数据库系统。<br />
比如，用户输入了 a'; drop database ***<br />
将原本的select * from user where username = 'a' 构建成了select * from user
where username = 'a';drop database *** .
类似这种恶意的攻击后果非常严重，这句话就足以将您的数据库删除！！<br />
</span></strong></p>
<p><strong><span style="font-weight: normal;">预防的措施有：</span></strong></p>
<p>1. 限制输入格式,输入类型，输入长度以及输入字符<br />
2. 使用带参数的动态SQL语句，或者使用代参数的存储过程。这样程序中代替参数的内容将不被视为可执行的 代码，仅仅是表示一段文本。<br />
3. 限制数据库帐户的权限，坚持帐户最小权限原则。<br />
4. 如有必要，不给程序中连接数据库的帐户操作数据库表的权限。通过建立存储过程，给帐户操作存储过程的权限，通过存储过程实现数据库表的增删查改。<br />
</p>
<p><span style="font-weight: bold;"><br />
四. 数据库安全设置<br />
</span></p>
<p>对数据库的安全设置内容也非常博大精深，很多公司也有专门的数据库管理员负责数据库的安全。考虑以下几项内容，对数据库的安全一定也有帮助。<br />
1. 及时安装数据库补丁<br />
2. 给帐户设置尽量少的权限。<br />
3. 给sa帐户设置复杂的密码。该密码要包含数字，字母及如！＃％等非字母字符，长度要&gt;=8.<br />
4. 按必要删除一些不用的服务，比如终端服务等等。<br />
</p>
<p>如何构建安全的.net web应用系统是在是博大精深，当然在不同情形下，对应用程序的安全有不同级别的要求，每个开发人员也应从实际出发，构建符合实际需要的安全的系统。以上是我在实践中积累的一点经验，写出来供大家参考，不当之处，欢迎大家讨论。 <br />
</p>
<p>如有兴趣，更多更精深的内容也可以阅读<a title="http://msdn2.microsoft.com/en-us/library/aa302415.aspx"  href="http://msdn2.microsoft.com/en-us/library/aa302415.aspx">http://msdn2.microsoft.com/en-us/library/aa302415.aspx</a> 。<br />
</p>  <img src ="http://www.cnblogs.com/Ring1981/aggbug/646489.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47956/" target="_blank">Xbox Live将投放Silverlight广告</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>得到随机字符串算法</title><link>http://www.cnblogs.com/Ring1981/archive/2007/02/09/577400.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Fri, 09 Feb 2007 13:35:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/02/09/577400.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/577400.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/02/09/577400.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/577400.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/577400.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Collections.Generic;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Text;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;ring<br><img id=Codehighlighter1_83_994_Open_Image onclick="this.style.display='none'; Codehighlighter1_83_994_Open_Text.style.display='none'; Codehighlighter1_83_994_Closed_Image.style.display='inline'; Codehighlighter1_83_994_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_83_994_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_83_994_Closed_Text.style.display='none'; Codehighlighter1_83_994_Open_Image.style.display='inline'; Codehighlighter1_83_994_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_83_994_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_83_994_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Program<br><img id=Codehighlighter1_107_992_Open_Image onclick="this.style.display='none'; Codehighlighter1_107_992_Open_Text.style.display='none'; Codehighlighter1_107_992_Closed_Image.style.display='inline'; Codehighlighter1_107_992_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_107_992_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_107_992_Closed_Text.style.display='none'; Codehighlighter1_107_992_Open_Image.style.display='inline'; Codehighlighter1_107_992_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_107_992_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_107_992_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_151_435_Open_Image onclick="this.style.display='none'; Codehighlighter1_151_435_Open_Text.style.display='none'; Codehighlighter1_151_435_Closed_Image.style.display='inline'; Codehighlighter1_151_435_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_151_435_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_151_435_Closed_Text.style.display='none'; Codehighlighter1_151_435_Open_Image.style.display='inline'; Codehighlighter1_151_435_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[]&nbsp;constant&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span id=Codehighlighter1_151_435_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_151_435_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">c</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">e</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">f</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">g</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">h</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">i</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">j</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">k</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">l</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">m</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">o</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">q</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">t</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">u</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">v</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">y</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">z</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">B</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">C</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">D</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">E</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">F</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">G</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">H</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">I</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">J</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">K</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">L</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">M</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">N</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">O</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">P</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Q</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">R</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">S</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">U</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">V</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">W</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">X</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Y</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Z</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;GetRandomStringByLength(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Length)<br><img id=Codehighlighter1_511_789_Open_Image onclick="this.style.display='none'; Codehighlighter1_511_789_Open_Text.style.display='none'; Codehighlighter1_511_789_Closed_Image.style.display='inline'; Codehighlighter1_511_789_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_511_789_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_511_789_Closed_Text.style.display='none'; Codehighlighter1_511_789_Open_Image.style.display='inline'; Codehighlighter1_511_789_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_511_789_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_511_789_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;newRandom&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;StringBuilder();<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;rd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Random();<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;Length;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_667_738_Open_Image onclick="this.style.display='none'; Codehighlighter1_667_738_Open_Text.style.display='none'; Codehighlighter1_667_738_Closed_Image.style.display='inline'; Codehighlighter1_667_738_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_667_738_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_667_738_Closed_Text.style.display='none'; Codehighlighter1_667_738_Open_Image.style.display='inline'; Codehighlighter1_667_738_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_667_738_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_667_738_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newRandom.Append(constant[rd.Next(</span><span style="COLOR: #000000">62</span><span style="COLOR: #000000">)]);<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;newRandom.ToString();<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Main(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">[]&nbsp;args)<br><img id=Codehighlighter1_839_986_Open_Image onclick="this.style.display='none'; Codehighlighter1_839_986_Open_Text.style.display='none'; Codehighlighter1_839_986_Closed_Image.style.display='inline'; Codehighlighter1_839_986_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_839_986_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_839_986_Closed_Text.style.display='none'; Codehighlighter1_839_986_Open_Image.style.display='inline'; Codehighlighter1_839_986_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_839_986_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_839_986_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Get&nbsp;10&nbsp;random&nbsp;caracters&nbsp;string</span><span style="COLOR: #008000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(GetRandomStringByLength(</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">));<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();<br><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br><span style="COLOR: #ffffff">private static char[] constant =&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '0','1','2','3','4','5','6','7','8','9',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static string GetRandomStringByLength(int Length)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder newRandom = new StringBuilder();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Random rd = new Random();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; Length; i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newRandom.Append(constant[rd.Next(62)]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return newRandom.ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Get 10 random caracters string<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(GetRandomStringByLength(10));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadLine();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span> 
<img src ="http://www.cnblogs.com/Ring1981/aggbug/577400.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47951/" target="_blank">Debian无视GNU创始人警告 接受Mono</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>有关IIS7概述以及配置和开发的几篇文章摘录</title><link>http://www.cnblogs.com/Ring1981/archive/2007/01/19/624250.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Fri, 19 Jan 2007 04:54:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/01/19/624250.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/624250.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/01/19/624250.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/624250.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/624250.html</trackback:ping><description><![CDATA[<div><script type="text/javascript"><!--
google_ad_client = "pub-7464627477897169";
//468x15, 创建于 07-12-24
google_ad_slot = "9633504051";
google_ad_width = 468;
google_ad_height = 15;
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>  <br/ />
<strong><a title="Internet Information Services 7.0" href="http://www.iis.net/default.aspx?tabid=7"><strong></strong></a>IIS7伴随着Vista已经悄悄来临，学习的时候我也摘录了一些有关于此的文章。 不敢独享，还是贴出来大家共享吧！<br />
<br />
初识IIS7<br />
</strong><br />
<a href="http://www.15seconds.com/issue/061215.htm" target="_blank" snap_preview_added="spa"><font size="3">A Quick Look at IIS 7</font></a> <br />
这篇文章中浅显地介绍的IIS7的一些新特性，很容易就能对IIS7的特性有一个初略的了解。<br />
<br />
<a title="Internet Information Services 7.0&#13;&#10;" href="http://www.iis.net/default.aspx?tabid=7">Internet Information Services 7.0 </a><br />
这是官方对IIS7一些新特性的介绍，这些新特性包括模块架构，全面的可扩展性，统一且分布式的配置模型，高效的管理工具，强大的诊断能力。<br />
<br />
<a title="IIS7 - Vista vs. Longhorn Server " href="http://blogs.iis.net/bills/archive/2006/09/18/IIS7-_2D00_-Vista-vs.-Longhorn-Server.aspx">IIS7 - Vista vs. Longhorn Server </a><br />
本文稍加介绍了IIS的历史，且对在Vista以及在Server上使用IIS7的一些好处。<br />
<br />
<a title="在Windows Vista中安装IIS 7 " href="http://www.cnblogs.com/lgp/archive/2006/11/14/iis7.html">在Windows Vista中安装IIS 7 </a><br />
如果你是初学者，对Vista中IIS7还从来没接触过，那么且看看这篇最初级的入门介绍吧!<br />
<br />
<a title="Security features in IIS 7 " href="http://blogs.iis.net/bhill/archive/2006/08/16/Security-features-in-IIS-7.aspx">Security features in IIS 7 </a><br />
本文从6个方面介绍了IIS7在安全性方面的特性，看来IIS7在安全性方面是对之前的版本做了大量的工作。<br />
<br />
<br />
<a title="IIS 7管理API——Microsoft.Web.Administration介绍 " href="http://dflying.cnblogs.com/archive/2006/04/17/377276.html">IIS 7管理API——Microsoft.Web.Administration介绍 </a>[中]<br />
<a title="Microsoft.Web.Administration in IIS 7" href="http://blogs.msdn.com/carlosag/archive/2006/04/17/MicrosoftWebAdministration.aspx">Microsoft.Web.Administration in IIS 7</a>&nbsp;[英]<br />
IIS7还可以编程实现对站点的配置和管理？ 答案是真的。因为Microsoft.Web.Administration中还提供了管理IIS7的一些非常强大的API。<br />
<br />
<br />
<strong>如何在IIS7下使用asp连接Access数据库?<br />
</strong><br />
<a title="图解Windows Vista中IIS7的安装及配置ASP+Access环境" href="http://www.xujiwei.cn/blog/article.asp?id=633">图解Windows Vista中IIS7的安装及配置ASP+Access环境</a><br />
<br />
默认装完IIS7之后，使用ASP程序连接Access 2003数据库时会发现提示数据库连接失败! 这是因为MS&nbsp;Jet引擎改变了临时目录的位置，但是又没有对临时的存取权限，导致数据库使用失败。那么该如何在IIS7上配置ASP+Access呢？请读该文！<br />
<br />
<br />
<strong>如何在IIS7下调试.NET程序?</strong><br />
<br />
<a title="技巧和诀窍：在VS 2005里使用Vista的IIS7 " href="http://blog.joycode.com/scottgu/archive/2006/09/20/83906.aspx">技巧和诀窍：在VS 2005里使用Vista的IIS7 </a><br />
<a title="如何在Vista IIS 7 中用 vs2005 调试 Web 项目? " href="http://blog.joycode.com/ghj/archive/2006/12/25/89933.aspx">如何在Vista IIS 7 中用 vs2005 调试 Web 项目? <br />
</a><a title="Enabling ASP.NET 2.0 Debugging on Visual Studio 2005, IIS 7.0 and Vista" href="http://www.thousandtyone.com/blog/EnablingASPNET20DebuggingOnVisualStudio2005IIS70AndVista.aspx">Enabling ASP.NET 2.0 Debugging on Visual Studio 2005, IIS 7.0 and Vista<br />
<br />
</a>当你看完下面的文章，该问题就不在话下了，对其缘由也了然于胸了吧！<br />
<br />
<br />
<strong>如何在IIS7下配置PHP程序?<br />
</strong><br />
<a title="How to install PHP on IIS7 (RC1) " href="http://blogs.iis.net/bills/archive/2006/09/19/How-to-install-PHP-on-IIS7-_2800_RC1_2900_.aspx"><strong>How to install PHP on IIS7 (RC1)？</strong> </a><br />
<br />
要在IIS7下配置PHP程序？看看IIS7项目经理Bill Staples这篇steps by steps吧！<br />
<br />
<strong><br />
</strong><a title="Response caching in IIS7" href="http://blogs.iis.net/ksingla/archive/2006/11/16/caching-in-iis7.aspx"><strong>Response caching in IIS7</strong></a><br />
<br />
在IIS6提供的缓存特性基础上，IIS7还提供了一下特性：
<li><span>Static compression module disable kernel caching of response if static compression is enabled for the request but the client requested uncompressed response. This makes sure only compressed response is cached in kernel.</span>
<li><span>You might see few changes in performance counters because URI cache module maintains additional pointers to cached files and metadata objects which saves some hashtable lookups.</span><br />
<br />
<br />
<strong>其他资源备录<br />
</strong><br />
<a title="Windows Vista中QQ蓝屏问题解决方法" href="http://it.people.com.cn/GB/42892/42927/5203235.html">为何</a><a title="Windows Vista中QQ蓝屏问题解决方法" href="http://it.people.com.cn/GB/42892/42927/5203235.html">W</a><a title="Windows Vista中QQ蓝屏问题解决方法" href="http://it.people.com.cn/GB/42892/42927/5203235.html">indows Vista中QQ蓝屏?</a>
<p>由于QQ所采用的nProtect键盘输入加密控件与最新的Windows Vista操作系统不兼容，因此，Windows Vista系统的用户在使用QQ的时候，可能会产生计算机蓝屏等故障。在QQ安装目录下删除npkcrypt.sys/npkcrypt.vxd/npkcusb.sys三个文件。由于键盘加密控件相关文件已被删除，因此QQ会检测到键盘加密控件被破坏，从而登录界面上有相应的提示，这并非木马所致。<cite></cite></p>
<p>贴个图<img height="20" src="http://www.cnblogs.com/Emoticons/QQ/15.gif" width="20" border="0"  alt="" /><br />
&nbsp;<a href="http://www.cnblogs.com/images/cnblogs_com/ring1981/IIS7OverView.jpg"><img height="640" src="http://www.cnblogs.com/images/cnblogs_com/ring1981/IIS7OverView.jpg" width="680" border="0"  alt="" /></a></p>
</li><img src ="http://www.cnblogs.com/Ring1981/aggbug/624250.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47950/" target="_blank">iPhone 3GS首发日创AT&T多项纪录</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>英文工作语言 </title><link>http://www.cnblogs.com/Ring1981/archive/2007/01/16/621941.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 16 Jan 2007 12:21:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2007/01/16/621941.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/621941.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2007/01/16/621941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/621941.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/621941.html</trackback:ping><description><![CDATA[转载自：<a href="http://www.xue68.com/detail.asp?id=1261">http://www.xue68.com/detail.asp?id=1261</a><br><br>初来乍到，我说话还比较文明。客户，同事，老板在不是太熟的时候也都说话文质彬彬的。大家都愣装丫挺的。<br>&nbsp;<br>现在熟了，个个都慢慢露出了人性的本色。很多人都sh*t,&nbsp;f**k,&nbsp;j**k不离口了。慢慢的我觉得有点跟不上大家脏话的脚步。很有必要找个时间突击学习一下，以便更好的&#8220;融入&#8221;工作环境。<br>&nbsp;<br>1.&nbsp;Stop&nbsp;complaining!&nbsp;别发牢骚！&nbsp;<br>2.&nbsp;You&nbsp;make&nbsp;me&nbsp;sick!&nbsp;你真让我恶心！&nbsp;<br>3.&nbsp;What's&nbsp;wrong&nbsp;with&nbsp;you?&nbsp;你怎么回事？&nbsp;<br>4.&nbsp;You&nbsp;shouldn't&nbsp;have&nbsp;done&nbsp;that!&nbsp;你真不应该那样做!&nbsp;<br>5.&nbsp;You're&nbsp;a&nbsp;jerk!&nbsp;你是个废物/混球！&nbsp;<br>6.&nbsp;Don't&nbsp;talk&nbsp;to&nbsp;me&nbsp;like&nbsp;that!&nbsp;别那样和我说话!&nbsp;<br>7.&nbsp;Who&nbsp;do&nbsp;you&nbsp;think&nbsp;you&nbsp;are?&nbsp;你以为你是谁？&nbsp;<br>8.&nbsp;What's&nbsp;your&nbsp;problem?&nbsp;你怎么回事啊？&nbsp;<br>9.&nbsp;I&nbsp;hate&nbsp;you!&nbsp;我讨厌你！&nbsp;<br>10.&nbsp;I&nbsp;don't&nbsp;want&nbsp;to&nbsp;see&nbsp;your&nbsp;face!&nbsp;我不愿再见到你！&nbsp;<br>11.&nbsp;You're&nbsp;crazy!&nbsp;你疯了!&nbsp;<br>12.&nbsp;Are&nbsp;you&nbsp;insane/crazy/out&nbsp;of&nbsp;your&nbsp;mind?&nbsp;你疯了吗？（美国人绝对常用！）&nbsp;<br>13.&nbsp;Don't&nbsp;bother&nbsp;me.&nbsp;别烦我。&nbsp;<br>14.&nbsp;Knock&nbsp;it&nbsp;off.&nbsp;少来这一套。&nbsp;<br>15.&nbsp;Get&nbsp;out&nbsp;of&nbsp;my&nbsp;face.&nbsp;从我面前消失！&nbsp;<br>16.&nbsp;Leave&nbsp;me&nbsp;alone.&nbsp;走开。&nbsp;<br>17.&nbsp;Get&nbsp;lost.滚开！&nbsp;<br>18.&nbsp;Take&nbsp;a&nbsp;hike!&nbsp;哪儿凉快哪儿歇着去吧。&nbsp;<br>19.&nbsp;You&nbsp;piss&nbsp;me&nbsp;off.&nbsp;你气死我了。&nbsp;<br>20.&nbsp;It's&nbsp;none&nbsp;of&nbsp;your&nbsp;business.&nbsp;关你屁事！&nbsp;<br>21.&nbsp;What's&nbsp;the&nbsp;meaning&nbsp;of&nbsp;this?&nbsp;这是什么意思？&nbsp;<br>22.&nbsp;How&nbsp;dare&nbsp;you!&nbsp;你敢！&nbsp;<br>23.&nbsp;Cut&nbsp;it&nbsp;out.&nbsp;省省吧。&nbsp;<br>24.&nbsp;You&nbsp;stupid&nbsp;jerk!&nbsp;你这蠢猪！&nbsp;<br>25.&nbsp;You&nbsp;have&nbsp;a&nbsp;lot&nbsp;of&nbsp;nerve.&nbsp;脸皮真厚。&nbsp;<br>26.&nbsp;I'm&nbsp;fed&nbsp;up.&nbsp;我厌倦了。&nbsp;<br>27.&nbsp;I&nbsp;can't&nbsp;take&nbsp;it&nbsp;anymore.&nbsp;我受不了了！&nbsp;<br>28.&nbsp;I've&nbsp;had&nbsp;enough&nbsp;of&nbsp;your&nbsp;garbage.&nbsp;我听腻了你的废话。&nbsp;<br>29.&nbsp;Shut&nbsp;up!&nbsp;闭嘴！&nbsp;<br>30.&nbsp;What&nbsp;do&nbsp;you&nbsp;want?&nbsp;你想怎么样？&nbsp;<br>31.&nbsp;Do&nbsp;you&nbsp;know&nbsp;what&nbsp;time&nbsp;it&nbsp;is?&nbsp;你知道现在都几点吗？&nbsp;<br>32.&nbsp;What&nbsp;were&nbsp;you&nbsp;thinking?&nbsp;你脑子进水啊？&nbsp;<br>33.&nbsp;How&nbsp;can&nbsp;you&nbsp;say&nbsp;that?&nbsp;你怎么可以这样说？&nbsp;<br>34.&nbsp;Who&nbsp;says?&nbsp;谁说的？&nbsp;<br>35.&nbsp;That's&nbsp;what&nbsp;you&nbsp;think!&nbsp;那才是你脑子里想的！&nbsp;<br>36.&nbsp;Don't&nbsp;look&nbsp;at&nbsp;me&nbsp;like&nbsp;that.&nbsp;别那样看着我。&nbsp;<br>37.&nbsp;What&nbsp;did&nbsp;you&nbsp;say?&nbsp;你说什么？&nbsp;<br>38.&nbsp;You&nbsp;are&nbsp;out&nbsp;of&nbsp;your&nbsp;mind.&nbsp;你脑子有毛病！&nbsp;<br>39.&nbsp;You&nbsp;make&nbsp;me&nbsp;so&nbsp;mad.你气死我了啦。&nbsp;<br>40.&nbsp;Drop&nbsp;dead.&nbsp;去死吧！&nbsp;<br>41.&nbsp;Bug&nbsp;off.&nbsp;滚蛋。&nbsp;<br>42.&nbsp;Don't&nbsp;give&nbsp;me&nbsp;your&nbsp;shit.&nbsp;别跟我胡扯。&nbsp;<br>43.&nbsp;Don't&nbsp;give&nbsp;me&nbsp;your&nbsp;excuses/&nbsp;No&nbsp;more&nbsp;excuses.&nbsp;别找借口。&nbsp;<br>44.&nbsp;You're&nbsp;a&nbsp;pain&nbsp;in&nbsp;the&nbsp;ass.&nbsp;你这讨厌鬼。&nbsp;<br>45.&nbsp;You're&nbsp;an&nbsp;asshole.&nbsp;你这缺德鬼。&nbsp;<br>46.&nbsp;You&nbsp;bastard!&nbsp;你这杂种！&nbsp;<br>47.&nbsp;Get&nbsp;over&nbsp;yourself.&nbsp;别自以为是。&nbsp;<br>48.&nbsp;You're&nbsp;nothing&nbsp;to&nbsp;me.&nbsp;你对我什么都不是。&nbsp;<br>49.&nbsp;It's&nbsp;not&nbsp;my&nbsp;fault.&nbsp;不是我的错。&nbsp;<br>50.&nbsp;You&nbsp;look&nbsp;guilty.&nbsp;你看上去心虚。&nbsp;<br>51.&nbsp;I&nbsp;can't&nbsp;help&nbsp;it.&nbsp;我没办法。&nbsp;<br>52.&nbsp;That's&nbsp;your&nbsp;problem.&nbsp;那是你的问题。&nbsp;<br>53.&nbsp;I&nbsp;don't&nbsp;want&nbsp;to&nbsp;hear&nbsp;it.&nbsp;我不想听！&nbsp;<br>54.&nbsp;Get&nbsp;off&nbsp;my&nbsp;back.&nbsp;少跟我罗嗦。&nbsp;<br>55.&nbsp;Give&nbsp;me&nbsp;a&nbsp;break.&nbsp;饶了我吧。&nbsp;<br>56.&nbsp;Who&nbsp;do&nbsp;you&nbsp;think&nbsp;you're&nbsp;talking&nbsp;to?&nbsp;你以为你在跟谁说话？&nbsp;<br>57.&nbsp;Look&nbsp;at&nbsp;this&nbsp;mess!&nbsp;看看这烂摊子！&nbsp;<br>58.&nbsp;You're&nbsp;so&nbsp;careless.&nbsp;你真粗心。&nbsp;<br>59.&nbsp;Why&nbsp;on&nbsp;earth&nbsp;didn't&nbsp;you&nbsp;tell&nbsp;me&nbsp;the&nbsp;truth?&nbsp;你到底为什么不跟我说实话？&nbsp;<br>60.&nbsp;I'm&nbsp;about&nbsp;to&nbsp;explode!&nbsp;我肺都快要气炸了！&nbsp;<br>61.&nbsp;What&nbsp;a&nbsp;stupid&nbsp;idiot!&nbsp;真是白痴一个！&nbsp;<br>62.&nbsp;I'm&nbsp;not&nbsp;going&nbsp;to&nbsp;put&nbsp;up&nbsp;with&nbsp;this!&nbsp;我再也受不了啦！&nbsp;<br>63.&nbsp;I&nbsp;never&nbsp;want&nbsp;to&nbsp;see&nbsp;your&nbsp;face&nbsp;again!&nbsp;我再也不要见到你！&nbsp;<br>64.&nbsp;That's&nbsp;terrible.&nbsp;真糟糕！&nbsp;<br>65.&nbsp;Just&nbsp;look&nbsp;at&nbsp;what&nbsp;you've&nbsp;done!&nbsp;看看你都做了些什么！&nbsp;<br>66.&nbsp;I&nbsp;wish&nbsp;I&nbsp;had&nbsp;never&nbsp;met&nbsp;you.&nbsp;我真后悔这辈子遇到你！&nbsp;<br>67.&nbsp;You're&nbsp;a&nbsp;disgrace.&nbsp;你真丢人！&nbsp;<br>68.&nbsp;I'll&nbsp;never&nbsp;forgive&nbsp;you!&nbsp;我永远都不会饶恕你！&nbsp;<br>69.&nbsp;Don't&nbsp;nag&nbsp;me!&nbsp;别在我面前唠叨！&nbsp;<br>70.&nbsp;I'm&nbsp;sick&nbsp;of&nbsp;it.&nbsp;我都腻了。&nbsp;<br>71.&nbsp;You're&nbsp;such&nbsp;a&nbsp;*****!&nbsp;你这个婊子!&nbsp;<br>72.&nbsp;Stop&nbsp;screwing/&nbsp;fooling/&nbsp;messing&nbsp;around!&nbsp;别鬼混了！&nbsp;<br>73.&nbsp;Mind&nbsp;your&nbsp;own&nbsp;business!&nbsp;管好你自己的事！&nbsp;<br>74.&nbsp;You're&nbsp;just&nbsp;a&nbsp;good&nbsp;for&nbsp;nothing&nbsp;bum!&nbsp;你真是一个废物！/&nbsp;你一无是处！&nbsp;<br>75.&nbsp;You've&nbsp;gone&nbsp;too&nbsp;far!&nbsp;你太过分了！&nbsp;<br>76.&nbsp;I&nbsp;loathe&nbsp;you!&nbsp;我讨厌你！&nbsp;<br>77.&nbsp;I&nbsp;detest&nbsp;you!&nbsp;我恨你！&nbsp;<br>78.&nbsp;Get&nbsp;the&nbsp;hell&nbsp;out&nbsp;of&nbsp;here!&nbsp;滚开!&nbsp;<br>79.&nbsp;Don't&nbsp;be&nbsp;that&nbsp;way!&nbsp;别那样！&nbsp;<br>80.&nbsp;Can't&nbsp;you&nbsp;do&nbsp;anything&nbsp;right?&nbsp;成事不足，败事有余。&nbsp;<br>81.&nbsp;You're&nbsp;impossible.&nbsp;你真不可救药。&nbsp;<br>82.&nbsp;Don't&nbsp;touch&nbsp;me!&nbsp;别碰我！&nbsp;<br>83.&nbsp;Get&nbsp;away&nbsp;from&nbsp;me!&nbsp;离我远一点儿！&nbsp;<br>84.&nbsp;Get&nbsp;out&nbsp;of&nbsp;my&nbsp;life.&nbsp;我不愿再见到你。/&nbsp;从我的生活中消失吧。&nbsp;<br>85.&nbsp;You're&nbsp;a&nbsp;joke!&nbsp;你真是一个小丑！&nbsp;<br>86.&nbsp;Don't&nbsp;give&nbsp;me&nbsp;your&nbsp;attitude.&nbsp;别跟我摆架子。&nbsp;<br>87.&nbsp;You'll&nbsp;be&nbsp;sorry.&nbsp;你会后悔的。&nbsp;<br>88.&nbsp;We're&nbsp;through.&nbsp;我们完了！&nbsp;<br>89.&nbsp;Look&nbsp;at&nbsp;the&nbsp;mess&nbsp;you've&nbsp;made!&nbsp;你搞得一团糟！&nbsp;<br>90.&nbsp;You've&nbsp;ruined&nbsp;everything.&nbsp;全都让你搞砸了。&nbsp;<br>91.&nbsp;I&nbsp;can't&nbsp;believe&nbsp;you&nbsp;never.&nbsp;你好大的胆子！&nbsp;<br>92.&nbsp;You're&nbsp;away&nbsp;too&nbsp;far.&nbsp;你太过分了。&nbsp;<br>93.&nbsp;I&nbsp;can't&nbsp;take&nbsp;you&nbsp;any&nbsp;more!&nbsp;我再也受不了你啦！&nbsp;<br>94.&nbsp;I'm&nbsp;telling&nbsp;you&nbsp;for&nbsp;the&nbsp;last&nbsp;time!&nbsp;我最后再告诉你一次！&nbsp;<br>95.&nbsp;I&nbsp;could&nbsp;kill&nbsp;you!&nbsp;我宰了你！&nbsp;<br>96.&nbsp;That's&nbsp;the&nbsp;stupidest&nbsp;thing&nbsp;I've&nbsp;ever&nbsp;heard!&nbsp;那是我听到的最愚蠢的事！&nbsp;(比尔&#183;盖茨常用)&nbsp;<br>97.&nbsp;I&nbsp;can't&nbsp;believe&nbsp;a&nbsp;word&nbsp;you&nbsp;say.&nbsp;我才不信你呢!&nbsp;<br>98.&nbsp;You&nbsp;never&nbsp;tell&nbsp;the&nbsp;truth！&nbsp;你从来就不说实话！&nbsp;<br>99.&nbsp;Don't&nbsp;push&nbsp;me&nbsp;!&nbsp;别逼我！&nbsp;<br>100.&nbsp;Enough&nbsp;is&nbsp;enough!&nbsp;够了够了！&nbsp;<br>101.&nbsp;Don't&nbsp;waste&nbsp;my&nbsp;time&nbsp;any&nbsp;more.&nbsp;别再浪费我的时间了！&nbsp;<br>102.&nbsp;Don't&nbsp;make&nbsp;so&nbsp;much&nbsp;noise.&nbsp;I'm&nbsp;working.&nbsp;别吵，我在干活。&nbsp;<br>103.&nbsp;It's&nbsp;unfair.&nbsp;太不公平了。&nbsp;<br>104.&nbsp;I'm&nbsp;very&nbsp;disappointed.&nbsp;真让我失望。&nbsp;<br>105.&nbsp;Don't&nbsp;panic!&nbsp;别怕!&nbsp;<br>106.&nbsp;What&nbsp;do&nbsp;you&nbsp;think&nbsp;you&nbsp;are&nbsp;doing?&nbsp;你知道你在做什么吗？&nbsp;<br>107.&nbsp;Don't&nbsp;you&nbsp;dare&nbsp;come&nbsp;back&nbsp;again!&nbsp;你敢再回来！&nbsp;<br>108.&nbsp;You&nbsp;asked&nbsp;for&nbsp;it.&nbsp;你自找的。&nbsp;<br>109.&nbsp;Nonsense!&nbsp;鬼话！胡说八道！<br>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/621941.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47949/" target="_blank">Silverlight开发大赛奖金高达10000美元</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>软件测试的原则</title><link>http://www.cnblogs.com/Ring1981/archive/2006/12/23/569150.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Sat, 23 Dec 2006 14:55:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/12/23/569150.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/569150.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/12/23/569150.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/569150.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/569150.html</trackback:ping><description><![CDATA[<p>1 A necessary part of a test case is a definition of the expected output or result.<br>&nbsp;&nbsp; 一个测试用例的一个必要部分是定义期望的输出或结果。<br><br>2 A programmer should avoid attempting to test his or her own program.<br>&nbsp;&nbsp; 开发人员应当避免测试自己编写的程序。<br><br>3 A programming organization should not test its own programs.<br>&nbsp;&nbsp; 开发软件的组织不应当测试自己组织编写的程序。<br><br>4 Thoroughly inspect the results of each test.<br>&nbsp; 应彻底地检查各个测试的结果。<br><br>5 Test cases must be written for input conditions that are invalid and unexpected, as well as for those that are valid and expected.<br>&nbsp; 测试用例不仅要写出那些有效的和期望的输入情况，而且要写出无效的和不期望的输入条件。<br><br>6 Examining a program to see if it does not do what it is supposed to do is only half the battle; the other half is seeing whether the program does what it is not supposed to do.<br>&nbsp; 检查一个程序看看它是否没有满足它设想要做的仅仅是完成任务的一半，另一半是看看它是否已经做了不期望要做的。<br><br>7 Avoid throwaway test cases unless the program is truly a throwaway program.<br>&nbsp; 避免抛弃测试用例，除非这个程序是真正要抛弃的。<br><br>8 Do not plan a testing effort under the tacit assumption that no errors will be found.<br>&nbsp; 计划测试工作时不应默许假定不会发生错误。<br><br>9 The probability of the existence of more errors in a section of a program is proportional to the number of errors already found in that section.<br>&nbsp;&nbsp; 程序某部分中尚存的更多的错误可能和该段程序中发现的错误成正比。<br><br>10 Testing is an extremely creative and intellectually challenging task.<br>&nbsp; 测试是一个极富创造性，极具智力挑战性的工作。<br><br>摘自: "The Art Of Software Testing ". Second Edition</p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/569150.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47947/" target="_blank">微软告攒机商第一案胜诉</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>列举几本关于敏捷开发的书</title><link>http://www.cnblogs.com/Ring1981/archive/2006/11/25/572559.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Sat, 25 Nov 2006 15:30:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/11/25/572559.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/572559.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/11/25/572559.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/572559.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/572559.html</trackback:ping><description><![CDATA[《敏捷软件开发：原则、模式与实践》&nbsp;<br>《解析极限编程—拥抱变化》<br>《探索极限编程》<br>《敏捷迭代开发：管理者指南》<br>《敏捷建模：极限编程和统一过程的有效实践》<br>《敏捷项目管理》<br>《敏捷软件开发》<br>《超越传统的软件开发——极限编程的幻象与真实》<br>《测试驱动开发——实用指南》<br>《测试驱动开发（中文版）》<br>《极限编程实践》<br>《规划极限编程》<br>《极限编程实施》<br>《极限编程研究》<br>《特征驱动开发方法原理与实践》<br>《Agile Project Management with Scrum》 
<img src ="http://www.cnblogs.com/Ring1981/aggbug/572559.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47946/" target="_blank">Mono这只猴子招惹了谁？</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>XHTML + CSS + JavaScript这种当前网站制作标准将走下坡路? </title><link>http://www.cnblogs.com/Ring1981/archive/2006/11/22/568533.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Wed, 22 Nov 2006 06:24:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/11/22/568533.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/568533.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/11/22/568533.html#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/568533.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/568533.html</trackback:ping><description><![CDATA[<div><script type="text/javascript"><!--
google_ad_client = "pub-7464627477897169";
//468x15, 创建于 07-12-24
google_ad_slot = "9633504051";
google_ad_width = 468;
google_ad_height = 15;
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>  <br/ />按照当前网页的Web标准，网页主要由三部分组成：结构（Structure）、表现（Presentation）和行为（Behavior）。与之对应的标准也分三方面：结构化标准语言主要包括XHTML和XML，表现标准语言主要包括CSS，行为标准主要采用JavaScript。<br />
<br />
Web标准似乎刚刚引入到中国，很多网页开发人员似乎还没有认识到什么叫网页标准，它又马上要走下坡路？你觉得可信吗？ 但那是真的。<br />
<br />
在csdn<a class="headermaintitle" id="Header1_HeaderTitle" href="http://blog.csdn.net/myan">孟岩</a>的&#8220;<a href="http://blog.csdn.net/myan/archive/2006/11/21/1402346.aspx">这一天终于来了</a>&#8221; 中得到一点启示，<a class="headermaintitle" id="Header1_HeaderTitle" href="http://blog.csdn.net/myan">孟岩</a>兄前一天还发表了<a href="http://blog.csdn.net/myan/archive/2006/11/20/1398915.aspx">谁不是&#8220;过渡技术&#8221;</a>一文，按照孟兄的看法， &#8220;<a href="http://blog.csdn.net/myan/archive/2006/11/21/1402346.aspx">这一天终于来了</a>&#8221;算是对前天发表的<a href="http://blog.csdn.net/myan/archive/2006/11/20/1398915.aspx">谁不是&#8220;过渡技术&#8221;</a> 一文的印证。<br />
<br />
那么"这一天"如果来了，它又会给大家带来什么新的技术？ 是 Microsoft Expression ?&nbsp; 还是MXML？<br />
<br />
Microsoft Expression又是什么？ 文中说，Expression是微软涉足图形与界面设计工具的一套产品，建立在WPF之上 ... ...&nbsp; 问题在于，Expression基于WPF，所以界面效果由XAML描述，而不是横行十年的W3C标准HTML。再看看WPF的竞争对手Adobe Flex，同样是基于MXML，而不是HTML。所以说，有一些事情总算是要发生了 ... ...<br />
<br />
按照微软官方网站(<a href="http://www.microsoft.com/products/expression/en/default.mspx">http://www.microsoft.com/products/expression/en/default.mspx</a>)的说法,<br />
<br />
Expression Web is a professional design tool that helps you create and work with:
<ul>
    <li>Standards-based Web sites
    <li>Sophisticated CSS-based layouts
    <li>Extensive CSS formatting and management
    <li>Rich data presentation
    <li>Powerful ASP.NET 2.0-based technology </li>
</ul>
<p>并且我看了看Microsoft Expression产品的组成，包括Graphic Designer, Interactive Designer和Web Sesinger。 根据官方网站对该产品的介绍，它能帮助我们: 1)构建标准的网站，2)复杂的基于css的布局, 3)扩展css格式和管理，4) 丰富的数据表示, 5)基于asp.net2.0强大的技术。<br />
<br />
从介绍中，我们得知该产品可以用来帮助设计web界面，它并不是说不支持css布局，然而它又支持独有的XAML标准。 那是不是意味着XHTML + CSS + JavaScript将来一场革命？ 或者说XAML今后将取代HTML/XHTML标准?&nbsp; 我不知道！<br />
<br />
但是如果这一天真的到来了，又会对Web时代带来什么冲击呢？是否意味着今后将是XAML的天下？ 还是 ... ...&nbsp;<br />
<br />
我们姑且拭目以待！ <br />
<br />
</p>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src ="http://www.cnblogs.com/Ring1981/aggbug/568533.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47945/" target="_blank">Firefox 3.5本月晚些时候即首次升级</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>CodeForFun--编写自动登录Email的程序</title><link>http://www.cnblogs.com/Ring1981/archive/2006/11/09/450744.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Thu, 09 Nov 2006 14:28:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/11/09/450744.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/450744.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/11/09/450744.html#Feedback</comments><slash:comments>26</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/450744.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/450744.html</trackback:ping><description><![CDATA[<p>每天早上一开机就登录博客园已经成了习惯, 总要先打开浏览器, 然后输入<a href="http://www.cnblogs.com/">www.cnblogs.com</a>,然后等待... ...<br>要是某天有火箭队的比赛, 还要去关注一下赛事情况: 先打开浏览器, 然后输入<a href="http://www.sohu.com/">www.sohu.com</a>,点NBA,然后... ...<br>哈哈, 还有一件少不了的事情,就是要登录电子油箱查看一下是否有新邮件...<br><br>这么多操作真是麻烦! 能不能通过点击一个按纽来简化这些操作呢?<br><br>前两天从同事(ZnS04)那里得到启示, 根据自动化测试的原理, 完全可以...<br><br>好了，下面就开始编写吧 ... ...</p>
<p>1).&nbsp; 新建一个 window application 工程. <br>2). 在窗体上添加3个Button,设置好属性, 如图:<br><br><img height=159 src="http://www.cnblogs.com/images/cnblogs_com/ring1981/play.JPG" width=234 border=0><br>3). 给工程添加2个引用 Microsoft.mshtml 和SHDocVw.dll<br>4). 编写代码</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
<p><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Collections.Generic;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.ComponentModel;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Data;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Drawing;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Text;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;System.Windows.Forms;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top>using System.Threading;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">添加引用</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;SHDocVw;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;mshtml;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;WebExplorer<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img id=Codehighlighter1_225_2321_Open_Image onclick="this.style.display='none'; Codehighlighter1_225_2321_Open_Text.style.display='none'; Codehighlighter1_225_2321_Closed_Image.style.display='inline'; Codehighlighter1_225_2321_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_225_2321_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_225_2321_Closed_Text.style.display='none'; Codehighlighter1_225_2321_Open_Image.style.display='inline'; Codehighlighter1_225_2321_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_225_2321_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_225_2321_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;partial&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Form1&nbsp;:&nbsp;Form<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id=Codehighlighter1_269_2319_Open_Image onclick="this.style.display='none'; Codehighlighter1_269_2319_Open_Text.style.display='none'; Codehighlighter1_269_2319_Closed_Image.style.display='inline'; Codehighlighter1_269_2319_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_269_2319_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_269_2319_Closed_Text.style.display='none'; Codehighlighter1_269_2319_Open_Image.style.display='inline'; Codehighlighter1_269_2319_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_269_2319_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_269_2319_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Form1()<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id=Codehighlighter1_302_347_Open_Image onclick="this.style.display='none'; Codehighlighter1_302_347_Open_Text.style.display='none'; Codehighlighter1_302_347_Closed_Image.style.display='inline'; Codehighlighter1_302_347_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_302_347_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_302_347_Closed_Text.style.display='none'; Codehighlighter1_302_347_Open_Image.style.display='inline'; Codehighlighter1_302_347_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_302_347_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_302_347_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id=Codehighlighter1_358_487_Open_Image onclick="this.style.display='none'; Codehighlighter1_358_487_Open_Text.style.display='none'; Codehighlighter1_358_487_Closed_Image.style.display='inline'; Codehighlighter1_358_487_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_358_487_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_358_487_Closed_Text.style.display='none'; Codehighlighter1_358_487_Open_Image.style.display='inline'; Codehighlighter1_358_487_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_358_487_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_358_487_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;summary&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;Redirect&nbsp;to&nbsp;the&nbsp;URL&nbsp;page.<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;/summary&gt;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #808080">&lt;param&nbsp;name="URL"&gt;</span><span style="COLOR: #008000">Your&nbsp;wanted&nbsp;URL.</span><span style="COLOR: #808080">&lt;/param&gt;</span><span style="COLOR: #808080"></span></span><br><span style="COLOR: #008080">26</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;GotoURL(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;URL)<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img id=Codehighlighter1_536_817_Open_Image onclick="this.style.display='none'; Codehighlighter1_536_817_Open_Text.style.display='none'; Codehighlighter1_536_817_Closed_Image.style.display='inline'; Codehighlighter1_536_817_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_536_817_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_536_817_Closed_Text.style.display='none'; Codehighlighter1_536_817_Open_Image.style.display='inline'; Codehighlighter1_536_817_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_536_817_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_536_817_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">实例化一个IE模型</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">29</span><span style="COLOR: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHDocVw.InternetExplorer&nbsp;IE&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;InternetExplorer();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IE.Visible&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;nullArg&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">引导到URL</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IE.Navigate(URL,&nbsp;</span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000">&nbsp;nullArg,&nbsp;</span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000">&nbsp;nullArg,&nbsp;</span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000">&nbsp;nullArg,&nbsp;</span><span style="COLOR: #0000ff">ref</span><span style="COLOR: #000000">&nbsp;nullArg);<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;gotocnBlogs_Click(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img id=Codehighlighter1_895_950_Open_Image onclick="this.style.display='none'; Codehighlighter1_895_950_Open_Text.style.display='none'; Codehighlighter1_895_950_Closed_Image.style.display='inline'; Codehighlighter1_895_950_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_895_950_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_895_950_Closed_Text.style.display='none'; Codehighlighter1_895_950_Open_Image.style.display='inline'; Codehighlighter1_895_950_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_895_950_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_895_950_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.GotoURL(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">www.cnblogs.com</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;gotoNBA_Click(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img id=Codehighlighter1_1024_1084_Open_Image onclick="this.style.display='none'; Codehighlighter1_1024_1084_Open_Text.style.display='none'; Codehighlighter1_1024_1084_Closed_Image.style.display='inline'; Codehighlighter1_1024_1084_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1024_1084_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1024_1084_Closed_Text.style.display='none'; Codehighlighter1_1024_1084_Open_Image.style.display='inline'; Codehighlighter1_1024_1084_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1024_1084_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_1024_1084_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.GotoURL(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">sports.sohu.com/nba</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;gotoGmail_Click(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img id=Codehighlighter1_1160_2313_Open_Image onclick="this.style.display='none'; Codehighlighter1_1160_2313_Open_Text.style.display='none'; Codehighlighter1_1160_2313_Closed_Image.style.display='inline'; Codehighlighter1_1160_2313_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1160_2313_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1160_2313_Closed_Text.style.display='none'; Codehighlighter1_1160_2313_Open_Image.style.display='inline'; Codehighlighter1_1160_2313_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1160_2313_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_1160_2313_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img id=Codehighlighter1_1190_2241_Open_Image onclick="this.style.display='none'; Codehighlighter1_1190_2241_Open_Text.style.display='none'; Codehighlighter1_1190_2241_Closed_Image.style.display='inline'; Codehighlighter1_1190_2241_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1190_2241_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1190_2241_Closed_Text.style.display='none'; Codehighlighter1_1190_2241_Open_Image.style.display='inline'; Codehighlighter1_1190_2241_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1190_2241_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_1190_2241_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.GotoURL("<a href="http://gmail.google.com/">http://gmail.google.com</a>");<br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(</span><span style="COLOR: #000000">3000</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">得到IE的文档对象模型</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">58</span><span style="COLOR: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mshtml.IHTMLDocument2&nbsp;DOM&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(mshtml.IHTMLDocument2)IE.Document;<br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">声明用户名</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">60</span><span style="COLOR: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mshtml.IHTMLInputTextElement&nbsp;txtUserName&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(mshtml.IHTMLInputTextElement)DOM.all.item(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Email</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtUserName.value&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">YOUE&nbsp;USERNAME</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">声明密码</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">63</span><span style="COLOR: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mshtml.IHTMLInputTextElement&nbsp;txtPwd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(mshtml.IHTMLInputTextElement)DOM.all.item(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Passwd</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">64</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtPwd.value&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">PASSWORD</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">65</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">声明登录</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">66</span><span style="COLOR: #008000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mshtml.HTMLInputElement&nbsp;btnLogin&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(mshtml.HTMLInputElement)DOM.all.item(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">null</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">67</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">68</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btnLogin.click();<br></span><span style="COLOR: #008080">69</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">70</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;ex)<br></span><span style="COLOR: #008080">71</span><span style="COLOR: #000000"><img id=Codehighlighter1_2288_2303_Open_Image onclick="this.style.display='none'; Codehighlighter1_2288_2303_Open_Text.style.display='none'; Codehighlighter1_2288_2303_Closed_Image.style.display='inline'; Codehighlighter1_2288_2303_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2288_2303_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2288_2303_Closed_Text.style.display='none'; Codehighlighter1_2288_2303_Open_Image.style.display='inline'; Codehighlighter1_2288_2303_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_2288_2303_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"></span><span id=Codehighlighter1_2288_2303_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">72</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">73</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">74</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">75</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">76</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></p>
</div>
<br>5. 运行工程，点击上面的Button，OK!<br><br>需要说明两点：<br>1. 关于两个引用<br>&nbsp;&nbsp; Microsoft.mshtml：这个引用可以从add reference-&gt;.NET中得到。<br>&nbsp;&nbsp; SHDocVw.dll：这个引用在windows/system32目录下。<br>2.对上述dll进行引用后，即可实例化IE模型，通过构建页面元素进行操作。 
<img src ="http://www.cnblogs.com/Ring1981/aggbug/450744.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47944/" target="_blank">Google App Engine出现故障宕机6小时</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>各种常见测试类型简单说明</title><link>http://www.cnblogs.com/Ring1981/archive/2006/11/06/420389.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Mon, 06 Nov 2006 13:30:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/11/06/420389.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/420389.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/11/06/420389.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/420389.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/420389.html</trackback:ping><description><![CDATA[&nbsp;
<table cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td vAlign=top width=142>
            <p align=center><strong><span>名称</span></strong><strong></strong></p>
            </td>
            <td vAlign=top width=440>
            <p align=center><strong><span>说明</span></strong><strong></strong></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>黑盒测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>基于软件需求，而不是基于软件内部设计和程序实现的测试方式。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>白盒测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>基于软件内部设计和程序实现的测试方式。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>单元测试</span></p>
            <p>&nbsp;</p>
            </td>
            <td vAlign=top width=440>
            <p><span>主要测试软件模块的源代码。一般由开发人员而非独立测试人员来执行，因为测试者需要懂得该单元的设计与程序实现，测试者可能需要编写额外的测试驱动程序。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>集成测试</span></p>
            <p>&nbsp;</p>
            </td>
            <td vAlign=top width=440>
            <p><span>将一些&#8220;构件&#8221;集成一起时，测试它们能否正常运行。这里&#8220;构件&#8221;可以是程序模块、客户机－服务器程序等等。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>功能测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>测试软件的功能是否符合功能性需求，通常采用黑盒测试方式。一般由独立测试人员执行。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>系统测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>测试软件系统是否符合所有需求，包括功能性需求与非功能性需求。一般由独立测试人员执行，通常采用黑盒测试方式。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>回归测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>指错误被修正后或软件功能、环境发生变化后进行的重新测试。回归测试的困难在于不好确定哪些内容应当被重新测试。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>验收测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>由客户或最终用户执行，测试软件系统是否符合需求规格说明书。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>负载测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>测试软件系统的最大负载，超出此负载软件可能会失常。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>压力测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>概念上与负载测试相似，叫法不同。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>性能测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>测试软件在各种状况下的性能，如在正常或最大负载下的状况。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>易用性测试</span></p>
            <p>&nbsp;</p>
            </td>
            <td vAlign=top width=440>
            <p><span>测试软件是否易用，主观性比较强。一般要根据很多用户的测试反馈信息，才能评价易用性。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>安装与反安装测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>测试软件在&#8220;全部、部分、升级&#8221;等状况下的安装</span><span>/</span><span>反安装过程。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>恢复测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>测试该系统从故障中恢复过来的能力。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>安全性测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>测试该系统防止非法侵入的能力。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>兼容性测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>测试该系统与其它软件硬件兼容的能力。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>比较测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>通过与同类产品比较，考察该系统的优点、缺点。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>Alpha </span><span>测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>一种先期的用户测试，此时系统刚刚开发完成。</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top width=142>
            <p><span>Beta</span><span>测试</span></p>
            </td>
            <td vAlign=top width=440>
            <p><span>一种后期的用户测试，此时系统已经通过内部测试，大部分错误已经改正，即将正式发行。</span></p>
            </td>
        </tr>
    </tbody>
</table>
<br>摘自 &lt;&lt<strong>软件工程&gt;&gt;</strong></span><img src ="http://www.cnblogs.com/Ring1981/aggbug/420389.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47943/" target="_blank">消息称Facebook今年营收将达5.5亿美元</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>是什么使得我的进程崩溃了?</title><link>http://www.cnblogs.com/Ring1981/archive/2006/10/24/450628.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 24 Oct 2006 02:20:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/10/24/450628.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/450628.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/10/24/450628.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/450628.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/450628.html</trackback:ping><description><![CDATA[<br>原文地址：<a id=ctl00___ctl00___Month___postlist___EntryItems_ctl01_PostTitle href="http://blogs.msdn.com/tess/archive/2005/11/28/497386.aspx">What on earth caused my process to crash?</a><br><font face=Tahoma>发布时间：<a id=ctl00___ctl00___Month___postlist___EntryItems_ctl01_PermaLink href="http://blogs.msdn.com/tess/archive/2005/11/28/497386.aspx"><font color=#002c99>Monday, November 28, 2005 8:27 AM</font></a> <br></font><font face=Tahoma>作　　者：</font><a id=bp___v___r___postlist___EntryItems__ctl2_AuthorLink href="http://blogs.msdn.com/user/Profile.aspx?UserID=14373"><font face=Tahoma color=#002c99>Tess</font></a><font face=Tahoma>&nbsp;&nbsp;</font> <br>
<p>&nbsp;</p>
<p>你在事件查看器中看到w3wp.exe意外地停止了1000次,或者你的进程以一种未定义的方式神秘地退出了，可你不知道为什么。</p>
<p>当进程崩溃或退出时，一个特殊的事件将会被触发，这个事件叫做EPR(Exit Process)。因此借助调试器，如windbg.exe，可以把它附在进程上，等待EPR被抛出异常，做一个memory dump。在windows下安装好调试工具后，会得到叫做adplus的vbscript(<a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;286350">http://support.microsoft.com/default.aspx?scid=kb;en-us;286350</a>) ,它会自动运行，打印在整个进程生存期内发生的大多数异常的日志。</p>
<p><font style="COLOR: red" size=+0>调试技巧！：</font>在crash模式下打开一个dump，当程序崩溃时，它会在活动线程上自动定位崩溃处。若你切换线程到出错的线程，输入 ~ 将所有的线程列举出来，一个断点会标记有问题的线程。<br><br>若dump只显示在进程里有一个活动线程，并且该线程是主线程，那么该进程可能因外部因素被杀死，譬如健康监视器（health monitoring),低系统内存，IIS重启等等。</p>
<font face=Tahoma>
<p><font face=Tahoma>在后续的帖子里，我会更为深入地讨论一些情景。我是一个自始自终的人，因此我想以一些常见的情形开始本帖子。当你看到一个托管进程退出时，你会对在dump文件里该查看些什么心中有点数。<br></font><br>这是一些在支持中的最常见情形，并不按照特殊顺序排列：</p>
</font>
<p><font face=Tahoma><strong><br>堆栈溢出异常 <br><br></strong></font><font face=Tahoma>当一个线程分配的堆栈内存用尽了，就会发生堆栈溢出。默认分配1MB，故堆栈调用可以调得相当深。在大多数情况下，堆栈溢出是因无穷递归引起的， 譬如，函数A调用函数B,函数B又调用函数A... 以至无穷，没有停止的条件。<br></font><font face=Tahoma><br>异常处理应用程序块使用不恰当，这是常见的一个隐晦的无穷递归情形。想象一下这个情形：应用程序发生了一个异常，异常处理跟踪了该异常，并建立了一个日志文件。在登陆时遇到了一个这种类型的异常（禁止登陆），此时你会使用异常处理去处理它。在这个案例中，在处理该异常时，会产生一个无穷的递归循环，它抛出另一个异常，处理该异常时又抛出一个异常...此时你该明白了。在这儿想说明的是，不要再用异常处理去处理先前异常处理语句中产生的异常:)</font></p>
<p><font face=Tahoma>运行"kb 2000（参阅本地堆栈）和"!clrstack"（从sos.dll 可以查看托管堆栈），可以跟踪到递归在哪里发生的，为什么发生的。</font></p>
<p><strong><br>内存溢出异常</strong></p>
<p>&nbsp;发生内存溢出在大多数情况下是因设计问题引起的，太多的内存存储在缓存或Session中。如果使用恰当，缓存可以极大地提升性能，譬如，将经常使用的数据缓存，按需要的时间设置过期。相信我，在老的asp技术中，将对象存入Session中有时会出现问题。开发人员应仅将最必要的东西存入Session。但是，譬如将大的数据集存放在Session中，这反而有害于应用程序的性能，因为这将降低网站能够处理的并发用户数量。当内存使用率足够高时，最先要做的事情可能是花时间进行垃圾对象回收。通过使用缓存搜索数据，你可以避免从数据库中取得所需数据。</p>
<p><font face=Tahoma>是否需要将数据存储在Session/缓存中，这没有一个固定的方法适合所有的情形。最好的办法是早期评估确定，确定应用程序有多少用户以及基于此分析出每个用户允许存储量是多少。 然后按照最大数量的用户做一下压力测试，确保没有问题。对session中存储和不存储对象都做一下压力测试，看看哪个更好，将会是更好的。不同的用户数得出的结果是不同的。</font></p>
<p><font face=Tahoma>软件产品中的内存问题是非常难以修复的，因它常常需要做很多的重新设计。因此未雨绸缪将省下后期的很多工作。</font></p>
<p><span style="COLOR: red">测试技巧！：</span>先运行<font face=Tahoma> !dumpheap -type System.Web.Caching.Cache 得到cache的根源，然后在相应地址上使用!objsize ，查看cache存储了多少资源。（注释: InProc Session 模式也存储在Cache中）</font></p>
<p><font face=Tahoma>关于为什么会发生内存溢出异常的更多深入的讨论，可以参看我先前的帖子。</font></p>
<p><strong><font face=Tahoma><br>COM 组件中未处理的异常</font></strong></p>
<p><font face=Tahoma>若应用程序调用了本地的COM组件，因COM组件中有未处理的异常，应用程序也会崩溃。例如，引用了某块内存，但它已经释放了。<br></font></p>
<p><strong><br>本地堆损毁</strong>&nbsp;</p>
<p>&nbsp;<font face=Tahoma>这和GC漏洞都是一些最烦人的问题。向一个非假定的地址写入时，将发生本地堆损毁。执行写错地址的代码时，不会得到错误提示信息，然而开发人员并不知试图写入的内存地址是错误的。换句话说，那儿早已经有&#8220;贼&#8221;了。错误写入处可能是堆，但更糟糕的是，可能写入的是存放代码指令处，因此先前指令会被重写，这样代码执行到中间就无法继续调用了。向缓冲区的边界（或其他类似存储区）写入时，这种情况发生最频繁。<br></font>&nbsp;<font face=Tahoma><br></font><font face=Tahoma>阅读<a href="http://www.windowsitpro.com/Web/Article/ArticleID/22275/22275.html">Geoff Gray's 的有关堆损毁的文章</a>，有对此的介绍。因堆损毁而造成的崩溃，出问题处通常会在<font face=Tahoma></font>ntdll中的堆分配调用函数。需要一同运行GFlags或PageHeap，抓住这个&#8220;贼&#8221;，才能解决问题。然而，发生地址错误写入的情况很难捕获到，因为它的发生时机很任意且难以再现。</font></p>
<p><font face=Tahoma><strong><br></strong></font><font face=Tahoma><strong>托管堆<font face=Verdana>损毁</font></strong></font></p>
<p><font face=Tahoma>托管堆损毁是一种发生在托管堆上的堆损毁。这个问题也是很难被捕获。向托管堆上覆写一块不允许写入的内存时，将发生托管堆损毁。通常不会在托管代码中发生缓冲溢出。对于byte[]这样一个数组，若对其赋值超出了边界</font>，将会发生一个<font face=Tahoma>IndexOutOfRange异常。托管堆损毁的一个最常见的原因是一段叫做PInvoke的函数代码传入了按某种条件排序的缓冲区，但缓冲区容量太小，PInvoked函数向缓冲区写操作时，超出了缓冲区的边界，写到了托管堆的下一个对象上。然后垃圾回收器工作，试图穿过该托管堆，此时进程就会崩溃了。</font></p>
<p><font face=Tahoma>若在一个含有垃圾回收器功能的活动堆栈上发生崩溃，应查询代码中的PInvokes函数，查是否因缓冲区太小而发生穿越行为。<br></font><font face=Tahoma><br><strong><br>致命执行引擎异常<br></strong></font><font face=Tahoma><br>致命执行引擎异常非常罕见，发生致命执行引擎异常通常是一个bug。这意味着由于某些原因，代码执行进入了CLR中一些未预料到的代码段中。CLR会因这些不可靠事件进入而抛出一个致命执行引擎异常并且崩溃，因为它不能从该断点再恢复。它会作为发生致命执行引擎异常记录在事件日志中，列出的地址将是发生崩溃的准确地址。若发生致命执行引擎异常，找不到相关技术文章，联系技术支持，最好附上一个崩溃的dump，这样易于技术支持决解决该问题。 </font></p>
<p><font face=Tahoma><strong><br>GC漏洞</strong></p>
<p>&nbsp;这也是非常罕见的。CLR的非托管部分有一个指针，它指向托管代码，但它&#8220;忘记&#8221;告诉垃圾回收器相关信息了。 因此垃圾回收器不知道该如何保存现场或者不知如何跟踪指令。上述的意思是：垃圾回收执行清理的时机有误，此时那个指针可指向任何一个地方，并引起了许多破坏。Yun Jin在这儿对此有一点点讨论：<a href="http://blogs.msdn.com/yunjin/archive/2004/02/08/69906.aspx">http://blogs.msdn.com/yunjin/archive/2004/02/08/69906.aspx</a>。</p>
<p><span><font face=Tahoma><font color=#000000><font size=3></font></font></font></span><span><font face=Tahoma><font color=#000000><font size=3>&nbsp;</p>
</font></font></font></span></font>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/450628.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47937/" target="_blank">微软8月25日开始通过WSUS推送IE8</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>内存泄漏!!!我该做些什么?(找出问题出在哪里)</title><link>http://www.cnblogs.com/Ring1981/archive/2006/10/21/447250.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Sat, 21 Oct 2006 05:44:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/10/21/447250.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/447250.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/10/21/447250.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/447250.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/447250.html</trackback:ping><description><![CDATA[摘要: &nbsp;&nbsp;<a href='http://www.cnblogs.com/Ring1981/archive/2006/10/21/447250.html'>阅读全文</a><img src ="http://www.cnblogs.com/Ring1981/aggbug/447250.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47935/" target="_blank">暴风称新旧版更换完毕 总计超4000万用户换装</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>OutOfMemory这家伙是谁？为什么我还留有许多内存，它却使进程崩溃了？</title><link>http://www.cnblogs.com/Ring1981/archive/2006/10/20/446690.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Fri, 20 Oct 2006 14:40:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/10/20/446690.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/446690.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/10/20/446690.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/446690.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/446690.html</trackback:ping><description><![CDATA[<p><font face=Tahoma><br>原文地址：<a id=ctl00___ctl00___Month___postlist___EntryItems_ctl04_PostTitle href="http://blogs.msdn.com/tess/archive/2005/11/25/496898.aspx">Who is this OutOfMemory guy and why does he make my process crash when I have plenty of memory left?</a><br>发布时间：<a id=ctl00___ctl00___Month___postlist___EntryItems_ctl04_PermaLink href="http://blogs.msdn.com/tess/archive/2005/11/25/496898.aspx"><font color=#002c99>Friday, November 25, 2005 10:43 AM</font></a> <br>作　　者：<a id=bp___v___r___postlist___EntryItems__ctl2_AuthorLink href="http://blogs.msdn.com/user/Profile.aspx?UserID=14373"><font color=#002c99>Tess</font></a>&nbsp;&nbsp;<br><br>为了回答这个问题，我们先来看看一些概念。<br></font><br><span>工作在32位系统上，可以寻址4GB内存。典型地, 其中2GB留给操作系统，另外2GB则用于各个用户态的进程，如w3wp.exe(asp.net)进程。这块2GB的内存叫做虚拟内存，它和另外附加的RAM是独立的。RAM的大小仅决定了有多少内存分页和交换可用，如，程序多快能访问它们。<br></span><span><br>一个进程分配内存时，它是这样进行的：首先，预定虚拟内存；然后，提交内存到该块中（这是实际使用的内存）。提交的内存叫做私有字节。<br></span><span><br>虚拟地址空间用于存放进程中的一些项目，例如：</p>
<p></span></p>
<ul>
    <li>
    <div>动态链接库</div>
    <li>
    <div>本地堆（非.net堆）</div>
    <li>
    <div>线程（每个线程保留1MB内存堆栈）</div>
    <li>
    <div>.net堆（托管变量）</div>
    <li>
    <div><span>.net装载堆（程序集及相关的结构变量）</span> </div>
    <li>
    <div>com组件分配的虚拟内存</div>
    </li>
</ul>
<p><span>虚拟分配的内存并不是次序排列的（或者很少按次序排列）。例如，dll会装载在各自的地址空间，因此dll间会留下内存空隙。另外，重新分配的虚拟内存间也会留下空隙。这就意味着尽管拥有2GB的虚拟内存，你却不可能完全使用它。因为使用了足够多的内存后，这块内存看起来就会像瑞士硬干酪，起码得有足够的空间让你的叉子能叉进去吧？ </span></p>
<p><span>这就是遇上OutOfMemory异常时发生的东西。</span></p>
<p><span>以后我可能会讨论更多关于.net内存管理知识,但现在我将只做简单介绍,因为已经有一些很好的博客对此加以介绍了,如Maoni的CLR性能博客 <a href="http://blogs.msdn.com/maoni/">http://blogs.msdn.com/maoni/</a>&nbsp;和<a href="http://blogs.msdn.com/yunjin">http://blogs.msdn.com/yunjin</a> 。</span></p>
<p><span>在.net框架中，垃圾回收器就是内存管理者，它以堆的方式预定虚拟内存。一旦这些堆被分配，就会创建新的.net对象实例。这个对象将被存储在堆内存断中，此时也将内存提交。<br><br></span><span>在.net框架1.1（服务器版本）中，会创建规则的.net堆, 大小为64MB。(若使用8+处理器或手动改变设置，该堆大小会有所变动。在这里先忽略这些情况，而仅讨论一般的情形)</span></p>
<span><span>
<p><br>这些64MB的片断需以一大整块的形式分配，而不能在这里分配32MB,在那里分配32MB。因此这些64MB的内存片断填充完后，就需要在2GB的内存空间中去寻找一块64MB或更大的空闲内存块，用以分配新的内存块。若这样大小的空闲内存块没了，就会发生OutOfMemory异常。<br><br></span></span><span>这些OutOfMemory 异常通常不是致命的，但仍然很糟糕，因为它们会使进程处于一种不稳定的状态。然而，当垃圾回收器做内存整理时，它本身的内也需要空间，这样它才能整理内存。且使用的内存越多，也将需要越多的这些内部结构体。若没有留给垃圾回收器足够的空间用于垃圾整理，就会产生一个致命的内存异常，进程也将终结。</span></p>
<p><span></span><span>由上所知，预定的内存（性能监视器中的虚拟字节）将比提交的内存字节（性能监视器中的私有字节）大得多。通常在内存使用率高的时候,差别大约是500MB.当虚拟字节达到大约1.2-1.4GB的时候，再寻找64MB的空闲块将变得非常困难，这意味着此时一个正常的.net进程将会发生OutOfMemory异常。<br></span><span><br>再次声明，这个值可能会因应用程序或装载的dll和本地com组件的内存分配模式(等等)不同会有所差别。<br></span><span><br>现在该知道为什么会出现OutOfMemory 异常了吧？尽管仍然还有许多的RAM可用。下一任务是去找出为什么使用这些内存，我将会花些时间在我以后的博客帖子中加以讨论。</span></p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/446690.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47934/" target="_blank">3.5版既出 Firefox面临新挑战</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ASP.NET 崩溃-SiteMap中疯狂的循环 </title><link>http://www.cnblogs.com/Ring1981/archive/2006/10/19/443280.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Thu, 19 Oct 2006 09:28:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/10/19/443280.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/443280.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/10/19/443280.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/443280.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/443280.html</trackback:ping><description><![CDATA[<div class=posthead>
<div class=postviewhead>原文地址：<a id=ctl00___ctl00___Month___postlist___EntryItems_ctl03_PostTitle href="http://blogs.msdn.com/tess/archive/2006/10/10/ASP.NET-Crash-_2D00_-Crazy-looping-in-a-SiteMap.aspx">ASP.NET Crash - Crazy looping in a SiteMap</a><br>发布时间：<a id=ctl00___ctl00___Month___postlist___EntryItems_ctl03_PermaLink href="http://blogs.msdn.com/tess/archive/2006/10/10/ASP.NET-Crash-_2D00_-Crazy-looping-in-a-SiteMap.aspx"><font color=#002c99>Tuesday, October 10, 2006 4:10 PM</font></a> <br>作　　者：<a id=bp___v___r___postlist___EntryItems__ctl2_AuthorLink href="http://blogs.msdn.com/user/Profile.aspx?UserID=14373"><font color=#002c99>Tess</font></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></div>
<div class=postviewhead>一天，我收到了一封有关我的博客的邮件，提出如下问题，简述如下：<br>&nbsp; <br><em>我想快速地创建一个站点地图，因此我重写了BuildSiteMap()方法，在里面我写了一个循环，用以添加一些仿造的sitemap节点。<br></em></div>
<div class=postviewhead><br><em>public override SiteMapNode BuildSiteMap(){<br>&nbsp;&nbsp; for (int i = 0; i &lt; 5; i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myRoot.ChildNodes.Add(new SiteMapNode(this, i.ToString(), i.ToString(), i.ToString()));<br>&nbsp;&nbsp; return myRoot;<br>} <br><br>运行程序，就发生堆栈溢出，服务器也崩溃了。我用调试器单步调试，发现真的很奇怪:&nbsp; <br><br>1) int i = 0<br>2) i &lt; 5<br>3) myRoot...<br>4) int i = 0<br>5) i &lt; 5<br>etc.<br></em></div>
<div class=postviewhead><em>i的值看起来从来没有增加，除非我调用到SiteMapNode（access a property, call a method），看起来这个循环是正确的。 <br>是什么使得这个循环不确定呢？咋看可能是编译器或者是CLR的一个bug.</em></div>
<div class=postviewhead><br>(当我获此问题时，我真不知道ASP.NET2.0中的站点导航，但我找到了这些文章... <a href="http://weblogs.asp.net/scottgu/archive/2005/11/20/431019.aspx">http://weblogs.asp.net/scottgu/archive/2005/11/20/431019.aspx</a> 和<a href="http://aspnet.4guysfromrolla.com/articles/111605-1.aspx">http://aspnet.4guysfromrolla.com/articles/111605-1.aspx</a> ,叙述得真是很不错.)<br></div>
<div class=postviewhead><br><br><strong>最初的想法 <br></strong></div>
<div class=postviewhead><br>这个问题最重要的就是它始终重新开始, 这就意味着可以对此做现场调试。但我们暂不走那么远，先回头看看现在有什么... <br></div>
<div class=postviewhead><br>1. 堆栈溢出 <br></div>
<div class=postviewhead><br>2. 一次又一次重新开始的循环 <br></div>
<div class=postviewhead><br>&nbsp;我已经在先前的博客帖子里讨论过堆栈溢出，现在重复一下...&nbsp;&nbsp;&nbsp; 引起堆栈溢出的原因是, 分配了太多的函数指针，变量指针和参数，以致在堆栈里申请的内存数量不够用。到目前为止，堆栈溢出最平常的原因是无终止的递归。换句话说，function A调用了function B, function B又调用了function A... <br></div>
<div class=postviewhead><br>因此，callstack看上去有点像这样.... <br></div>
<div class=postviewhead><br>...<br>functionB()<br>functionA() <br>functionB()<br>functionA()&nbsp; <br></div>
<div class=postviewhead><br>好了，一切都好极了，但那仅仅解释了堆栈溢出。那么疯狂的循环是怎么回事呢？</div>
<div class=postviewhead>&nbsp;</div>
<div class=postviewhead>好...想象一下有这样一个函数（在--&gt;处有有一个断点） <br></div>
<div class=postviewhead><br>void MyRecursiveFunction(){<br>&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0; i&lt;5; i++){<br>--&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyRecursiveFunction();<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>} <br></div>
<div class=postviewhead><br>当你第一次停在断点处，i的值应该是0,callstack看起来是这样的... <br></div>
<div class=postviewhead><br>MyRecursiveFunction()<br>... <br></div>
<div class=postviewhead><br><br>现在调用MyRecrusive函数,每一次调用这个函数自己，会再一次出现 i=0（虽然我们并不真的在同一个loop里）。若调用MyRecrusive这个函数几个来回，并用实际执行的代码代替之，它将执行类似如下的代码: <br></div>
<div class=postviewhead><br>for(int i=0; i&lt;5; i++){<br>&nbsp;&nbsp; for(int i2=0; i2&lt;5; i2++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i3=0; i3&lt;5; i3++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i4=0; i4&lt;5; i4++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i5=0; i5&lt;5; i5++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i6=0; i6&lt;5; i6++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i7=0; i7&lt;5; i7++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br>} <br></div>
<div class=postviewhead><br>... 在visual studio中查看它，看起来总是运行同样的循环，且并不改变变量i的值。暂时,你对此不会有深层次的理解，直到你真正看到堆栈调用。 <br>假如我们看一下callstack, callstack现在看起来是这样的... <br><br>MyRecursiveFunction()<br>MyRecursiveFunction()<br>MyRecursiveFunction()<br>MyRecursiveFunction()<br>MyRecursiveFunction()<br>MyRecursiveFunction()<br>MyRecursiveFunction()<br>... <br></div>
<div class=postviewhead>因此最初想法的结论是，我们无疑地要看看某些递归...但在哪呢？例子中的代码 </div>
<div class=postviewhead><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRoot.ChildNodes.Add(new SiteMapNode(this, i.ToString(), i.ToString(), i.ToString())); </div>
<div class=postviewhead><br>看起来并不是那么复杂...</div>
<div class=postviewhead><br>在这儿最可疑的是new SiteMapNode() 和myRoot.ChildNodes.Add() ，假如我们用reflector查看一下，那么这将不再那么神秘。<br>&nbsp;</div>
<div class=postviewhead><br><strong>调试问题</strong> <br></div>
<div class=postviewhead><br>最后:) &nbsp;少一点口舌，多来一点windbg行动... <br></div>
<div class=postviewhead><br>因它易重新呈现，所以我会在我的机器上重新呈现它，我只要将windbg (File / Attach to process)附到w3wp.exe上，点击g开始即可。然后会重新产生了这个问题，程序中止时提示我这是一个堆栈溢出（我们已经知道了）。<br>&nbsp;</div>
<div class=postviewhead><span style="COLOR: #000000; BACKGROUND-COLOR: #00ccff">(7e4.ddc): Stack overflow - code c00000fd (first chance)<br>First chance exceptions are reported before any exception handling.<br>This exception may be expected and handled.<br>eax=0fa4235c ebx=02beca74 ecx=02beca74 edx=02becb54 esi=02becb54 edi=02beca74<br>eip=686b5cb4 esp=02163000 ebp=02163004 iopl=0 nv up ei pl zr na pe nc<br>cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00210246<br>System_Web_ni+0xf5cb4:686b5cb4 56 push esi</span><br><br>我们查看一下堆栈，使用 !clrstack命令看看是怎么中止的，但我们只能看到.... <br></div>
<div class=postviewhead><br><span style="BACKGROUND-COLOR: #00ccff">0:016&gt; !clrstack<br>OS Thread Id: 0xddc (16)<br>ESP EIP 02163000 686b5cb4 System.Web.StaticSiteMapProvider.GetChildNodes(System.Web.SiteMapNode)</span><br><br>&nbsp;... 这对我们并没有太大的帮助。有时当我们遇到堆栈溢出时，使用!clrstack 命令就会出现一些这样的问题。因此我们还需要使用!dumpstack命令查看一下raw stack。 <br></div>
<div class=postviewhead><br><span style="BACKGROUND-COLOR: #00ccff">0:016&gt; !dumpstack<br>OS Thread Id: 0xddc (16)<br>Current frame: (MethodDesc 0x68b03720 +0x4 System.Web.StaticSiteMapProvider.GetChildNodes(System.Web.SiteMapNode))<br>ChildEBP RetAddr Caller,Callee<br>02163004 686b1fc4 (MethodDesc 0x68aeff30 +0x18 System.Web.SiteMapNode.get_ChildNodes())<br>0216300c 0f765641 (MethodDesc 0xfa42328 +0x59 ViewSiteMapProvider.BuildSiteMap())<br>0216303c 686b5cdf (MethodDesc 0x68b03720 +0x2f System.Web.StaticSiteMapProvider.GetChildNodes(System.Web.SiteMapNode))<br>02163074 686b1fc4 (MethodDesc 0x68aeff30 +0x18 System.Web.SiteMapNode.get_ChildNodes())<br>0216307c 0f765641 (MethodDesc 0xfa42328 +0x59 ViewSiteMapProvider.BuildSiteMap())<br>021630ac 686b5cdf (MethodDesc 0x68b03720 +0x2f System.Web.StaticSiteMapProvider.GetChildNodes(System.Web.SiteMapNode))<br>021630e4 686b1fc4 (MethodDesc 0x68aeff30 +0x18 System.Web.SiteMapNode.get_ChildNodes())<br>021630ec 0f765641 (MethodDesc 0xfa42328 +0x59 ViewSiteMapProvider.BuildSiteMap())<br>0216311c 686b5cdf (MethodDesc 0x68b03720 +0x2f System.Web.StaticSiteMapProvider.GetChildNodes(System.Web.SiteMapNode))<br>02163154 686b1fc4 (MethodDesc 0x68aeff30 +0x18 System.Web.SiteMapNode.get_ChildNodes())<br>0216315c 0f765641 (MethodDesc 0xfa42328 +0x59 ViewSiteMapProvider.BuildSiteMap())<br>...</span><br><br>好了，这看起来问题出自ChildNodes属性。使用该属性时，会调用GetChildNodes 函数，这个函数会再次调用BuildSiteMap 函数，从而它又调用了ChildNodes 属性，如此一直下去，导致了堆栈溢出。</div>
<div class=postviewhead><br><br><strong>结论 <br></strong></div>
<div class=postviewhead><br>&nbsp;在关于<a href="http://msdn2.microsoft.com/en-us/library/system.web.staticsitemapprovider.buildsitemap.aspx"><font color=#002c99>BuildSitemap</font></a>的文档中，你能找到如下段落：<br>&nbsp;</div>
<div class=postviewhead><strong>BuildSiteMap</strong> 方法由 <strong>FindSiteMapNode</strong>、<a href="http://msdn2.microsoft.com/system.web.staticsitemapprovider.getchildnodes.aspx"><em><font color=#002c99>GetChildNodes</font></em></a>和<a href="http://msdn2.microsoft.com/system.web.staticsitemapprovider.getparentnode.aspx"><em><font color=#002c99>GetParentNode</font></em></a>方法的默认实现调用。如果在派生类中重写 BuildSiteMap 方法，请确保它仅加载一次站点地图数据，并在后续调用中返回。 </div>
<div class=postviewhead>为了避免出现递归和堆栈溢出，最好避免调用该方法，像在<strong>BuildSiteMap</strong>例子里，我们可以用AddNode方法来添加子节点。 </div>
<div class=postviewhead>这在归档在<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ASPNETProvModVB_Prt3.asp"><font color=#002c99>Site Map Providers</font></a>这篇文章中，该文同样值得一读。 </div>
<div class=postviewhead><em>BuildSiteMap 一般不应当调用其他的site map提供的方法或属性，因为许多方法和属性默认会实现BuildSiteMap调用。 例如，BuildSiteMap中的RootNode会引起递归，从而使之以堆栈溢出而终止。</em>&nbsp; </div>
<div class=postviewhead><br>&nbsp;</div>
</div>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/443280.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47930/" target="_blank">Bing首页将显示各国美景 顺推Silverlight</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>何时.NET中AppDomain会回收?</title><link>http://www.cnblogs.com/Ring1981/archive/2006/10/03/416765.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 03 Oct 2006 04:11:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/10/03/416765.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/416765.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/10/03/416765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/416765.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/416765.html</trackback:ping><description><![CDATA[<p><font size=2><strong>AppDomain回收会导致应用程序在线保存的数据丢失，那么在什么情况下会引起AppDomain回收呢？</strong><br><br>1.&nbsp; 修改配置文件，如Machine.Config, Web.Config,Global.asax</font><br>2. 修改了bin目录以及里面的内容<br>3. 重编译数超过在machine.config或web.config中<font face=Tahoma>&lt;compilation numRecompilesBeforeAppRestart=/&gt; 设置的值<br>4. 修改应用程序虚拟目录的物理路径<br>5. 修改CAS策略<br>6. 重启web 服务<br>7. 删除应用程序的子目录（仅.net 2.0)<br><br>有关AppDomain的回收，可参阅Tess的这篇博客贴子：<a href="http://blogs.msdn.com/tess/archive/2006/08/02/686373.aspx">http://blogs.msdn.com/tess/archive/2006/08/02/686373.aspx</a></font></p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/416765.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47929/" target="_blank">Gmail 的标签马上就会支持拖拽操作了</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Scottgu博客帖子</title><link>http://www.cnblogs.com/Ring1981/archive/2006/09/24/503171.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Sun, 24 Sep 2006 14:18:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/09/24/503171.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/503171.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/09/24/503171.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/503171.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/503171.html</trackback:ping><description><![CDATA[<a id=ArchiveMonth.ascx_Days_Entries__ctl0_TitleUrl href="http://blog.joycode.com/scottgu/archive/2006/09/22/84067.aspx">技巧和诀窍：UpdateProgress控件和AJAX活动图像动画</a>&nbsp;&nbsp;<br><br><a id=viewpost.ascx_TitleUrl href="http://blog.joycode.com/scottgu/articles/83861.aspx">编程定制SharePoint 2007的Web Parts</a>&nbsp;<br><br><a href="http://blog.joycode.com/scottgu/articles/83545.aspx">8月9日asp.net文章链接列表</a>&nbsp;<br>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/503171.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47928/" target="_blank">Windows 7 触摸功能是摆设 无厂商支持价值不大</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>.NET如何使用内存---餐馆案例分析</title><link>http://www.cnblogs.com/Ring1981/archive/2006/09/21/491713.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Thu, 21 Sep 2006 09:11:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/09/21/491713.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/491713.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/09/21/491713.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/491713.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/491713.html</trackback:ping><description><![CDATA[<p>原文地址：<a id=bp___v___r___postlist___EntryItems__ctl2_PostTitle href="http://blogs.msdn.com/tess/archive/2006/09/06/742568.aspx">.NET Memory usage - A restaurant analogy</a><br>发布时间：<a id=bp___v___r___postlist___EntryItems__ctl2_PermaLink href="http://blogs.msdn.com/tess/archive/2006/09/06/742568.aspx"><font color=#002c99>Wednesday, September 06, 2006 1:06 PM</font></a>&nbsp;<br>作　　者： <a id=bp___v___r___postlist___EntryItems__ctl2_AuthorLink href="http://blogs.msdn.com/user/Profile.aspx?UserID=14373"><font color=#002c99>Tess</font></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我喜爱的作者<a href="http://www.simonsingh.net/">Simon Singh</a>真是个善于分析的天才。从他的书中可以得知，他善于出神绘色地分析概念，不仅通俗易懂，而且让人难以忘记。因为经过他的分析，会在你脑海中呈现一个概念的景象。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前几天工作中，我听到我的一个同事正给一位客户解释有关内存的使用和为什么会出现内存异常的问题。虽然我在早期的一篇文章中谈到了内存溢出和内存管理，但我觉得他的分析实在太有趣了，因此我想将此也分享给大家。&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">声明:</span> 为了避免冗长，我简化许多东西。譬如，我是这么说的，垃圾回收器分配64MB区段空间。尽管在不同的framework版本下分配的区段空间大小是不同的。并且跟最初给各个对象分配的空间有关，譬如，读取大对象堆。另外的一些有关内存分配细节依赖于配置，我在这也不考虑这些细节了。&nbsp;</p>
<p><strong>第一部分 -通常的内存使用</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若你读过我先前的贴子，就会知道：32位系统进程典型寻址空间为2GB的虚拟地址空间。这是供给工作的内存空间，它独立于同时占有多少RAM空间。占有更多的RAM有益于提升性能，但它并不会帮助扩展到2GB之外的地址空间。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此时，你将这2GB的地址空间想象成餐馆的所有占地空间。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你为对象(不管受否是.net对象）分配空间时，通常两步走：先预定空间，然后将对象置于预定的空间内。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内存预定工作如同在餐馆中预定餐桌。正如餐馆一样，内存预定依赖其内存管理器（memory manager），他会帮你预定到一块连续的内存(memory in chunks)。譬如，你有一个3人的聚会，餐馆里很可能没有3人餐桌，但你可能会预定一个4人餐桌，你就会使用其中的3个座位，浪费一个座位。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;相对于内存空间，你预定餐桌好比预定内存（这块内存现占用虚拟字节），实际占用的座位(3个座位）好比实际占用内存（实际占用的内存占用私有字节）。没有预定的地板空间就是剩余可用内存。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个美好的晚上，餐馆的情景可能这样：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: #0000ff">蓝色区域表示已经预订的空间</span>，<span style="COLOR: #ff0000">红色区域表示实际使用的空间</span>，白色区域表示剩余的可用空间。如下图所示：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/tess1.jpg" border=0><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在假如某人某人电话预订一个3人餐桌，他将被告之餐馆已无可用餐桌。因为3个人坐在一起需要一个4人餐桌。尽管可以分在两个2人餐桌上坐下，但这似乎并不是一个好主意，因为你们想坐在一起。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;相似地，内存预定也不可能将内存分成小块，分散在各个不同的地方。要不就是什么也不分配，要不就是在一块连续的区域内分配。因此内存预定也如上面的预定3人餐桌情景,那么将会&#8220;内存溢出&#8221;，尽管还有足够的小块剩余空间可用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;细心的观众也许会说，不是可以将各个餐桌靠陇，使他们一个连着一个，这不是腾出一个4人餐桌出来了吗？但是已经用餐的客户愿意此时移动餐桌吗？预定内存正如这样。<br></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们谈论了内存碎片，也谈了剩余但不可用的内存块（因为他们太小了，不足以容纳一个新的餐桌），并且我们也谈谈有多少已经预订了但尚未使用的内存（这不同于占用虚拟字节和私有字节的内存）。<br>&nbsp;<br><strong>第二部分 -.NET的垃圾回收</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;绝大多数情况下，你依靠某种内存管理器(memery manager)（譬如，NT Heap, C++ Heap，GC等等）在应用程序中创建对象。在餐馆案例情景下，你将内存管理器比作女服务员，她会为你预定座位并会带你到相应的座位上。例如，调用了malloc方法，就不需要提供欲分配到的地址，而只需告之需要的内存区块大小，malloc会返回内存预定的地址。ok,在&#8220;C++ heap"区的table 1就是安置给你的地址。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.NET的垃圾回收机制(GC) 则要更进一步。进程中，若要想使用.net对象，它会预先保留一张大&#8220;桌子&#8221;（64座的桌子）。当某人创建了.net对象，GC会接待他们到桌子的下一个可用座位。有时接待员也会在餐桌旁来回走动，检查是否有人已经用餐完毕并邀请他们离开，此时其他的客人会就坐该餐桌。一些人可能需要等待其他人用餐完毕才能离开（比如引用对象），因此他们必须呆着等待。也有一些"大爷"人物(钉扣对象[pinned objects])，占据着靠窗的座位，很生气地说，&#8220;我不走了&#8221;。这就意味着，他不能腾出位置来，其他人也过不来。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客人和客人间留着的空位好比.NET内存碎片。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一旦64座的桌子坐满了，如需接待新来客人，GC需要预定一个新的64座的桌子。如果预定失败，就会抛出一个内存溢出异常。<br><strong><br>但是，它的真正面目怎样？ </strong></p>
<p>好了，&nbsp;分析得足够透了，在这儿你将看到真正的asp.net应用程序内存情况。<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/tess2.jpg" border=0></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;再次说明一下，<span style="COLOR: red">红色部分表示已使用内存，</span><span style="COLOR: #0000ff">篮色部分表示预定但尚未使用的内存</span>，白色部分表示剩余可用内存。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在内存空间的末端，你看到的一些小点很可能是一些动态链接库。如同餐馆情形下，尽管还有很多的白色空间，很可能在两个红点间的空隙不足以容纳一个64&nbsp;M的区块，在下一次GC申请一块新的内存时，就会产生一个内存溢出异常。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这些小红点（动态链接库）像这样布满整个空间的原因是由于这些特殊的动态链接库会装载在更适合的基地址上。你不能对那类动态链接库预先分配地址，因为很难预测他们将分配的更适合的地址在哪，对此你仅能做的是，找出实际使用的内存到底去哪了。<br></p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/491713.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47927/" target="_blank">虚拟货币上了"紧箍咒" 新规将限制Q币发行</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Vista尝鲜</title><link>http://www.cnblogs.com/Ring1981/archive/2006/09/19/505482.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 19 Sep 2006 13:32:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/09/19/505482.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/505482.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/09/19/505482.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/505482.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/505482.html</trackback:ping><description><![CDATA[<p><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/vista_desktop.jpg" border=0><br>安装完Vista后,默认的桌面,很华丽吧!<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/vista_IE.jpg" border=0><br>内置了IE7浏览器, live.com设置成了浏览器的默认网址。<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/vista_mycomputer.jpg" border=0><br>打开了我的电脑，和XP下的很不一样吧！地址栏风格都变了！</p>
<p><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/vista_menu.jpg" border=0><br>这是开始菜单，还内置了微软的Messenger产品下载，用起来也挺方便的吧！</p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/505482.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47926/" target="_blank">魔兽世界审批期限有新说 - 80天才是正解</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>敏捷软件开发模型--SCRUM</title><link>http://www.cnblogs.com/Ring1981/archive/2006/09/07/496591.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Thu, 07 Sep 2006 02:34:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/09/07/496591.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/496591.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/09/07/496591.html#Feedback</comments><slash:comments>26</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/496591.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/496591.html</trackback:ping><description><![CDATA[<p><strong>一 什么是Scrum?<br /></strong><br />Scrum (英式橄榄球争球队), 软件开发模型是敏捷开发的一种，在最近的一两年内逐渐流行起来。<br /><br />Scrum的基本假设是：<br /><br />开发软件就像开发新产品，无法一开始就能定义软件产品最终的规程，过程中需要研发、创意、尝试错误，所以没有一种固定的流程可以保证专案成功。Scrum 将软件开发团队比拟成橄榄球队，有明确的最高目标，熟悉开发流程中所需具备的最佳典范与技术，具有高度自主权，紧密地沟通合作，以高度弹性解决各种挑战，确保每天、每个阶段都朝向目标有明确的推进。</p>
<p>Scrum 开发流程通常以 30 天(或者更短的一段时间)为一个阶段，由客户提供新产品的需求规格开始，开发团队与客户于每一个阶段开始时挑选该完成的规格部分，开发团队必须尽力于 30 天后交付成果，团队每天用 15 分钟开会检查每个成员的进度与计划，了解所遭遇的困难并设法排除。<br /><br /><br /></p>
<p><strong>二 Scrum较传统开发模型的优点<br /></strong><br />Scrum模型的一个显著特点就是响应变化，它能够尽快地响应变化。下面的图片使用传统的软件开发模型(瀑布模型、螺旋模型或迭代模型)。随着系统因素（内部和外部因素）的复杂度增加，项目成功的可能性就迅速降低。<br /><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/scrum4.gif" border=0  alt="" /><br /><br />下图是Scrum模型和传统模型的对比：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/scrum5.gif" border=0  alt="" /><br /></p>
<p><strong>三 Scrum模型<br /><br />一)&nbsp; 有关Scrum的几个名词<br /><br /></strong></p>
<p class=table-para>backlog: 可以预知的所有任务， 包括功能性的和非功能性的所有任务。<br /><br />sprint:一次跌代开发的时间周期，一般最多以30天为一个周期.在这段时间内，开发团队需要完成一个制定的backlog,并且最终成果是一个增量的，可以交付的产品。<br /><br />sprint backlog:一个sprint周期内所需要完成的任务。<br /><br />scrumMaster: 负责监督整个Scrum进程，修订计划的一个团队成员。<br /><br />time-box: 一个用于开会时间段。比如每个daily scrum meeting的time-box为15分钟。<br /><br />sprint planning meeting: 在启动每个sprint前召开。一般为一天时间（8小时）。该会议需要制定的任务是：产品Owner和团队成员将backlog分解成小的功能模块,&nbsp; 决定在即将进行的sprint里需要完成多少小功能模块，确定好这个Product Backlog的任务优先级。另外，该会议还需详细地讨论如何能够按照需求完成这些小功能模块。制定的这些模块的工作量以小时计算。<br /><br /></p>
<p class=table-para>Daily Scrum meeting：开发团队成员召开，一般为15分钟。每个开发成员需要向ScrumMaster汇报三个项目：今天完成了什么？　是否遇到了障碍？　即将要做什么？通过该会议，团队成员可以相互了解项目进度。<br /></p>
<p class=table-para>Sprint review meeting：在每个Sprint结束后，这个Team将这个Sprint的工作成果演示给Product Owner和其他相关的人员。一般该会议为４小时。</p>
<p class=table-para>Sprint retrospective meeting：对刚结束的Sprint进行总结。会议的参与人员为团队开发的内部人员。一般该会议为３小时。</p>
<p class=table-para><br /><br /><strong>二）实施Scrum的过程简单介绍<br /><br /></strong>1) 将整个产品的backlog分解成Sprint Backlog,这个Sprint Backlog是按照目前的人力物力条件可以完成的。<br />2) 召开sprint planning meeting，划分，确定这个Sprint内需要完成的任务，标注任务的优先级并分配给每个成员。注意这里的任务是以小时计算的，并不是按人天计算。<br />3) 进入sprint开发周期，在这个周期内，每天需要召开Daily Scrum meeting。<br />4) 整个sprint周期结束，召开Sprint review meeting，将成果演示给Product Owner.<br />5) 团队成员最后召开Sprint retrospective meeting，总结问题和经验。<br />6) 这样周而复始，按照同样的步骤进行下一次Sprint.<br /><br />整个过程如下图所示：<br /><br /><strong><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/scrum_12.GIF" border=0  alt="" /><br /></strong><br /><br />The diagrams in this article are&nbsp;all from web site:&nbsp;<a href="http://www.controlchaos.com/">http://www.controlchaos.com</a>.&nbsp; Thanks very much!<br /><br />参考：<br /><a href="http://www.controlchaos.com/about/">http://www.controlchaos.com/about/</a><br /><a href="http://www.microsoft.com/Taiwan/msdn/columns/200311softdev.htm">http://www.microsoft.com/Taiwan/msdn/columns/200311softdev.htm<br /></a></p>
 <img src ="http://www.cnblogs.com/Ring1981/aggbug/496591.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47925/" target="_blank">“必应”出生满月 抢夺谷歌蛋糕</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>配置开源项目BugFree来进行bug管理</title><link>http://www.cnblogs.com/Ring1981/archive/2006/09/02/433701.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Sat, 02 Sep 2006 09:33:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/09/02/433701.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/433701.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/09/02/433701.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/433701.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/433701.html</trackback:ping><description><![CDATA[<p>本文适合尚未接触过apache+php+mysql的.NET开发人员参看. 如果您对apache+php+mysql非常熟悉,那么配置BugFree项目肯定是件非常轻松的事情.<br><br>一. BugFree简介<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BugFree是借鉴微软的研发流程和Bug管理理念，使用PHP+MySQL独立写出的一个Bug管理 系统。简单实用、免费并且开放源代码(遵循GNU GPL)。<br><br>二. Windows环境下配置BugFree<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BugFree提供一个傻瓜式的安装配置---GreenAMP，如果你不想对配置细节有所了解，那么直接到bugfree的官方网站上下载改包，按照说明直接配置就好了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>但是假如你想了解配置的细节，那么就一步一步地往下走吧.<br><br>1. mysql&nbsp;数据库的配置<br><br>&nbsp;&nbsp; mysql&nbsp;是一个免费的数据库，mysql的配置有点象Oracle, 为了能够图形化操作数据库，需要同时安装服务器端和客户端工具。<br><br>配置步骤：<br>1）到<a href="http://www.mysql.com/">www.mysql.com</a>官方网站上下载Database Server 和GUI tool安装文件。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;目前最新版本5.0.<br>2）安装服务器端软件－ mysql-4.1.18-win32（我这里用的是4.1版本的）<br>3）安装客户端软件－mysql-gui-tools-5.0-r2-win32.msi<br><br>安装完毕后，就会出现MySQL Adminstrator和MySQL Query Browser两个组件．通过这两个组件，就可以通过图形界面操作mysql数据库了。<br><br><br>2. 安装php5支持<br><br>配置步骤：<br>1）到<a href="http://www.php.net/downloads.php" target=_blank><font color=#000000>http://www.php.net/downloads.php</font></a>下载两个包：php-5.1.6-Win32.zip和pecl-5.1.6-Win32.zip。<br>2）将php-5.1.6-Win32.zip解压到C:\php5<br>3)&nbsp;&nbsp;&nbsp;将pecl-5.1.6-Win32.zip解压后的所有文件放到C:\php5\ext目录下<br>4）复制C:\PHP5\ 目录下的php5ts.dll 文件到C:\windows目录下。<br>5）复制 C:\PHP5\ 目录下的下列文件到C:\windows\system32\ 目录下：<br>　　fdftk.dll <br>　　fribidi.dll <br>　　gds32.dll <br>　　libeay32.dll <br>　　libintl-1.dll <br>　　libmhash.dll <br>　　libmysql.dll <br>　　ntwdblib.dll<br>　　yaz.dll <br>6)　复制 C:\PHP5\ 目录下的 php.ini-dist 文件到 C:\windows\ 目录下，并改名为php.ini.<br>7)&nbsp;&nbsp;&nbsp; 打开php.ini文件<br>　　定位到下面两行：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Directory in which the loadable extensions (modules) reside.&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension_dir = "./" &#247;<br>　　修改下面一行使它指向 C:\PHP5\ext\ 目录，修改后如下：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Directory in which the loadable extensions (modules) reside.&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension_dir = "C:\PHP5\ext\" </p>
<p>　　定位到下面两行：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;Windows Extensions&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;Note that ODBC support is built in, so no dll is needed for it. </p>
<p>　　可以看到下面列出了所有可支持扩展，我们可以去掉前面的分号来使 PHP 支持相应的扩展。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension=php_bz2.dll&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension=php_cpdf.dll&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension=php_curl.dll&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension=php_dba.dll&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension=php_dbase.dll <br>... ...<br>... ...<br>... ...&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension=php_yaz.dll&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension=php_zip.dll <br><br><br>3. 配置apache服务器<br><br>配置步骤：<br>1)&nbsp;到<a href="http://httpd.apache.org/download.cgi" target=_blank><font color=#000000>http://httpd.apache.org/download.cgi</font></a>&nbsp;下载apache http server.<br>2)&nbsp;安装apache http server(可以一路点next进行默认安装）<br>3)&nbsp;修改配置文件C:\Program Files\Apache Group\Apache2\conf\httpd.conf<br>4) 打开httpd.conf 文件，<br>定位到下面这行：<br>DirectoryIndex index.html index.html.var<br>在其后面添加一个 PHP 默认页，通常是 index.php ，如下：<br>DirectoryIndex index.html index.html.var index.php</p>
<p>为了使 Apache 识别 PHP 的相关扩展名，搜索并定位到下面这个部分：<br>&lt;Directory "C:/Program Files/Apache Group/Apache2/cgi-bin"&gt;&nbsp;<br>&nbsp;&nbsp; AllowOverride None&nbsp;<br>&nbsp;&nbsp; Options None&nbsp;<br>&nbsp;&nbsp; Order allow,deny&nbsp;<br>&nbsp;&nbsp; Allow from all <br>&lt;/Directory&gt;</p>
<p>&nbsp;在后面添加如下两行：<br><br>AddType application/x-httpd-php .php .phtml .php3 .php4<br>AddType application/x-httpd-php-source .phps</p>
<p>指定 php 模块，找到并定位到如下这行：<br>#LoadModule ssl_module modules/mod_ssl.so<br>在下面添加一行：<br>LoadModule php5_module c:\php5\php5apache2.dll</p>
<p>使它指向 PHP5 目录下的 php5apache2.dll 文件，路径一定要正确。<br>为了指定 Apache 识别中文，我们指定UTF-8为默认编码。应该找到并定位到下面这行<br>AddDefaultCharset ISO-8859-1<br>将其修改为：<br>AddDefaultCharset UTF-8<br></p>
<p>找到并定位到如下这行：<br>DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"<br>将此行该成存放freebug的位置，如<br>DocumentRoot "C:/Program Files/Apache Group/Apache2/BugFree"<br><br>找到并定位到如下这行：<br>Directory "C:/Program Files/Apache Group/Apache2/htdocs"<br>同样将此行该成存放freebug的位置，如<br>Directory "C:/Program Files/Apache Group/Apache2/BugFree"<br><br>到此apache安装完毕！如果在地址栏里输入<a href="http://localhost/login.php">http://localhost/login.php</a>,如果出现bugfree项目的登陆页面，说明前面的这些配置已经成功！<br></p>
<p>4. 配置bugFree<br><br>接下去我们就到了配置的最后一项，配置bugfree项目。在bugfree官方网站上，已经将如何配置此项目说得很清楚。将数据导入mysql数据库中后，我们只要登陆<a href="http://localhost/install.php">http://localhost/install.php</a>,按照文档说明，填写好相关的参数，确定就可以了。<br><br>另外还要提示一下，bugfree项目有个原始的管理员admin,密码123456。该密码是加密后存在数据库中的。</p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/433701.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47924/" target="_blank">Firefox 3.5正式版全球下载量突破500万次</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ADO.NET Entity Framework简介</title><link>http://www.cnblogs.com/Ring1981/archive/2006/08/21/420550.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Mon, 21 Aug 2006 10:01:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/08/21/420550.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/420550.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/08/21/420550.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/420550.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/420550.html</trackback:ping><description><![CDATA[<p>下一代的ADO.NET的目标是要解决关系数据模型和实际应用程序需要模型之间的鸿沟，那么它是怎么做到的呢？<br><br>我们都知道，建立在关系数据库基础之上的应用程序经常需要在不同的表之间做复杂的join操作来取得相关的数据。<br><br>比如下面的例子：<br><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/enfrm01.gif" border=0><br>　　　　　　　　　　　［图１］　<br><br>这是一个普通的关系型数据库。这个结构主要描述了雇员的基本信息和雇员的销售情况。<br><br>假如我们想取得所有在2006年１月１日招聘过来的全职员工的姓名和职务信息，那么就需要写如下的sql查询语句：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">SELECT</span><span style="COLOR: #000000">&nbsp;c.FirstName,&nbsp;e.Title<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">FROM</span><span style="COLOR: #000000">&nbsp;Employee&nbsp;e<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">INNER</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">JOIN</span><span style="COLOR: #000000">&nbsp;Contact&nbsp;c&nbsp;</span><span style="COLOR: #0000ff">ON</span><span style="COLOR: #000000">&nbsp;e.EmployeeID&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;c.ContactID<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">WHERE</span><span style="COLOR: #000000">&nbsp;e.SalariedFlag&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #808080">AND</span><span style="COLOR: #000000">&nbsp;e.HireDate&nbsp;</span><span style="COLOR: #808080">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">2006-01-01</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>我们分析一下这个复杂的sql语句，就会发现它存在如下缺点：</p>
<p>1. 如果某个应用程序只处理Employees的信息，但我们必须将逻辑数据关系标准化。这样我们就不得不去关注数据库表与表之间的关系（比如雇员的联系信息和姓名在不同的表中），我们需要人为地在两个表中做内联交叉查询以得到正确的数据。<br>2. 这里该应用程序仅仅是处理全职雇员（SalariedFlag=1），理想的情况是，我们不应看到其他类型的雇员信息。然而实际上所有的雇员信息都在一个数据库表中，他们是用一个"SalariedFlag"字段来区分的。这就意味着我们需要关注如何将不同类型的雇员加以区分。理想的情况是这样的：假如我们只需要处理某个数据子集，系统只需要呈现这部分子集的数据。开发人员应当能够通过声明来指定哪个是需要的数据子集。</p>
<p>综合地说，首先，关系数据模型不能直接匹配应用程序实际的数据模型。其次，关系数据模型不能满足应用程序的实际需要，比如应用程序还需要一些非功能性的需求，这些需求包括操作，数据拥有关系，性能和安全。</p>
<p>为了解决如上问题，ADO.NET引入了Entity Framework,它包含了数据模型以及一些设计时和运行时的服务。通过Entity Framework提供的更高抽象层，应用程序的数据模型就可以直接和数据库的关系数据模型交互。<br><br><br><strong>Entity Data Model</strong><br><br>Entity Data Model—简称EDM—是一个实体关系数据模型(Entity-Relationship data model). EDM的一个关键的概念如下：<br><br><strong>Entity:</strong> Entity是实体类型的实例(例如:Employee, SalesOrder)。它由一个关键字来组织数据记录。多个Entity可以组成Entity-Sets．<br><br><strong>RelationShip</strong>:RelationShip是关系类型的实例，它关联相关的实体．多个Relationships 可以组成 Relationship-Sets. <br><br>除了上面两个核心概念外，EDM模型还支持多种类型的扩展．<br><br><strong>继承:</strong>实体类型可以继承于其他的类型．这种类型的继承只继承结构，不提供向面向对象语言的＂行为＂继承．<br><br><strong>复合类型:</strong>定义一个复合类型Address,它可以由StreetAddress, City 和State这些属性复合而成．<br><br><br>我们按照EDM的概念重新定义［图１］：<br><img src="http://www.cnblogs.com/images/cnblogs_com/ring1981/enfrm02.gif" border=0><br>　　　　　　　　　　　　　［图２］<br>这里描述了如下元素：<br>三个实体类型，分别是SalesPerson,SalesOrder和StoreSalesOrder。其中StoreSalesOrder继承自SalesOrder。<br>一个关系： SalesOrder 和 SalesPerson 之间的关系。<br>两个实体集（entity-sets）：SalesOrders&nbsp;和 SalesPeople。 实体集SalesOrders 拥有SalesOrder和StoreSalesOrder两个实体类型。<br><br>看看上面的模型视图已经更接近应用程序需求了。其中SalesPerson的信息已经不再分布在不同的数据表中了，同时也没有了主从键了。<br><br>比如以前这样的查询：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">SELECT</span><span style="COLOR: #000000">&nbsp;sp.FirstName,&nbsp;sp.LastName,&nbsp;sp.HireDate<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">FROM</span><span style="COLOR: #000000">&nbsp;SalesPerson&nbsp;sp<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">INNER</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">JOIN</span><span style="COLOR: #000000">&nbsp;Employee&nbsp;e&nbsp;</span><span style="COLOR: #0000ff">ON</span><span style="COLOR: #000000">&nbsp;sp.SalesPersonID&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;e.EmployeeID<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">INNER</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">JOIN</span><span style="COLOR: #000000">&nbsp;Contact&nbsp;c&nbsp;</span><span style="COLOR: #0000ff">ON</span><span style="COLOR: #000000">&nbsp;e.EmployeeID&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;c.ContactID<br></span><span style="COLOR: #008080">5</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">WHERE</span><span style="COLOR: #000000">&nbsp;e.SalariedFlag&nbsp;</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #808080">AND</span><span style="COLOR: #000000">&nbsp;e.HireDate&nbsp;</span><span style="COLOR: #808080">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">2006-01-01</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">6</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span></div>
<p>现在只需写成：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">SELECT</span><span style="COLOR: #000000">&nbsp;sp.FirstName,&nbsp;sp.LastName,&nbsp;sp.HireDate<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">FROM</span><span style="COLOR: #000000">&nbsp;SalesPeople&nbsp;</span><span style="COLOR: #0000ff">AS</span><span style="COLOR: #000000">&nbsp;sp<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">WHERE</span><span style="COLOR: #000000">&nbsp;sp.HireDate&nbsp;</span><span style="COLOR: #808080">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">2006-01-01</span><span style="COLOR: #ff0000">'</span></div>
<p><br><br>更多关于ADO.NET Entity Framework相关的介绍, 英文好的朋友可以参阅:<br><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/ADONET_EDM.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/ADONET_EDM.asp</a><br>以及<br><a href="http://msdn.microsoft.com/data/default.aspx?pull=/library/en-us/dnvs05/html/ADONETEnFrmOvw.asp">http://msdn.microsoft.com/data/default.aspx?pull=/library/en-us/dnvs05/html/ADONETEnFrmOvw.asp</a></p>
<img src ="http://www.cnblogs.com/Ring1981/aggbug/420550.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47923/" target="_blank">网易今日凌晨开放战网及魔兽官网</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>软件设计的若干原则</title><link>http://www.cnblogs.com/Ring1981/archive/2006/08/15/424189.html</link><dc:creator>Ring</dc:creator><author>Ring</author><pubDate>Tue, 15 Aug 2006 15:03:00 GMT</pubDate><guid>http://www.cnblogs.com/Ring1981/archive/2006/08/15/424189.html</guid><wfw:comment>http://www.cnblogs.com/Ring1981/comments/424189.html</wfw:comment><comments>http://www.cnblogs.com/Ring1981/archive/2006/08/15/424189.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/Ring1981/comments/commentRss/424189.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Ring1981/services/trackbacks/424189.html</trackback:ping><description><![CDATA[什么是腐化的系统, 什么是不良的软件设计? 不良的软件设计包含以下的一种或几种特征:<br><br>1)&nbsp;僵化<br>2) 脆弱<br>3) 牢固<br>4) 黏性<br>5)&nbsp;晦涩<br><br><br>良好的系统应该遵循怎样的设计原则?<br><br>1) 开放-封闭原则(OCP)<br>2) 单一职责原则(SRP)<br>3)&nbsp;&nbsp;Liskov替换原则(LSP)<br>4)&nbsp;依赖倒置原则(DIP)<br>5)&nbsp;接口隔离原则(ISP)<br>6)&nbsp; 重用发布等价原则(REP)<br>7)&nbsp;&nbsp;共同封闭原则(CCP)<br>8)&nbsp;&nbsp;共同重用原则(CRP)<br>9)&nbsp;&nbsp;无环依赖原则(ADP)<br>10)&nbsp;稳定依赖原则(SDP)<br>11)&nbsp;稳定抽象原则(SAP) 
<img src ="http://www.cnblogs.com/Ring1981/aggbug/424189.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47919/" target="_blank">微软公布部分Windows 7中文版本零售价</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>