<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Ants'  Blog</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/35955/rss</id><updated>2012-05-29T02:20:43Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/35955/rss"/><entry><id>http://www.cnblogs.com/leleroyn/archive/2012/05/25/2518266.html</id><title type="text">C# 调用并执行SQL脚本文件</title><summary type="text">原文连接：http://www.cnblogs.com/long-gengyun/archive/2012/05/25/2517954.html 突然接到leader的任务,为运维写个小工具,给一个参数然后调用一个sql脚本文件并替换器内部某个参数,然后执行. 于是工作开始了... 首先想到的是能让C#程序直接执行sql脚本文件,类似SSMS直接打开sql文件并执行一样,搜索了一下结果还真有,...</summary><published>2012-05-25T08:30:00Z</published><updated>2012-05-25T08:30:00Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/leleroyn/archive/2012/05/25/2518266.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/archive/2012/05/25/2518266.html"/><content type="html">&lt;p&gt;原文连接：&lt;a title="http://www.cnblogs.com/long-gengyun/archive/2012/05/25/2517954.html" href="http://www.cnblogs.com/long-gengyun/archive/2012/05/25/2517954.html"&gt;http://www.cnblogs.com/long-gengyun/archive/2012/05/25/2517954.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;突然接到leader的任务,为运维写个小工具,给一个参数然后调用一个sql脚本文件并替换器内部某个参数,然后执行. &lt;/p&gt; &lt;p&gt;于是工作开始了...  &lt;p&gt;首先想到的是能让C#程序直接执行sql脚本文件,类似SSMS直接打开sql文件并执行一样,搜索了一下结果还真有,不过需要借用mssql的几个类库及命名空间:  &lt;p&gt;Microsoft.SqlServer.ConnectionInfo.dll  &lt;p&gt;Microsoft.SqlServer.Smo.dll  &lt;p&gt;--------------------------------------------  &lt;p&gt;using Microsoft.SqlServer.Management.Common;  &lt;p&gt;using Microsoft.SqlServer.Management.Smo;  &lt;p&gt;这里有一个小插叙,对于vs2008里可以直接引用这个这两个类库,但在vs2010里的引用就无法找到这两个类库了(不知道微软是怎么考虑的)  &lt;p&gt;还好我电脑vs2008和vs2010都安装了  &lt;p&gt;不过我还是避易就难的讲一下,vs2010在引用里无法找到这两个类库,那我们就想办法找到它,首先我电脑安装了mssqlserver2008 ,  &lt;p&gt;我去X:\Program Files\Microsoft SQL Server\100\SDK\Assemblies 找到  &lt;p&gt;Microsoft.SqlServer.ConnectionInfo.dll  &lt;p&gt;Microsoft.SqlServer.Smo.dll  &lt;p&gt;Microsoft.SqlServer.Management.Sdk.Sfc.dll(这个一定要考到你的程序目录,但你可以不引用)  &lt;p&gt;然后手动添加应用,第三个dll一定要引用,不然会报错  &lt;p&gt;下面看代码:  &lt;div class="csharpcode"&gt;&lt;span class="rem"&gt;//补卡操作&lt;/span&gt;         &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; PatchCard()         {             &lt;span class="kwrd"&gt;string&lt;/span&gt; path = System.Environment.CurrentDirectory;             &lt;span class="kwrd"&gt;string&lt;/span&gt; CardNo = txtCardNo.Text.Trim();             &lt;span class="kwrd"&gt;string&lt;/span&gt; connectonstring=ConfigurationManager.AppSettings[&lt;span class="str"&gt;"connectionString"&lt;/span&gt;].ToString();             &lt;span class="kwrd"&gt;if&lt;/span&gt;(CardNo==&lt;span class="kwrd"&gt;null&lt;/span&gt;||CardNo==&lt;span class="str"&gt;""&lt;/span&gt;)             {                 MessageBox.Show(&lt;span class="str"&gt;"卡号不能为空!"&lt;/span&gt;);                 &lt;span class="kwrd"&gt;return&lt;/span&gt;;             }             &lt;span class="kwrd"&gt;if&lt;/span&gt;(!path.EndsWith(&lt;span class="str"&gt;@"\"))             {                 path += @"&lt;/span&gt;\&lt;span class="str"&gt;";             }             path+="&lt;/span&gt;补蓝鲸卡.sql&lt;span class="str"&gt;";    //获取脚本位置             if (File.Exists(path))             {                 FileInfo file = new FileInfo(path);                 string script = file.OpenText().ReadToEnd();                 script=script.Replace("&lt;/span&gt;H00001&lt;span class="str"&gt;", CardNo);  //替换脚本里的参数                 try                 {                       //执行脚本                    SqlConnection conn = new SqlConnection(connectonstring);                    Microsoft.SqlServer.Management.Smo.Server server = new Server(new ServerConnection(conn));                    int i= server.ConnectionContext.ExecuteNonQuery(script);                    if (i == 1)                    {                        MessageBox.Show("&lt;/span&gt;恭喜!\n&lt;span class="str"&gt;"+CardNo+"&lt;/span&gt; 补卡成功!&lt;span class="str"&gt;","&lt;/span&gt;成功&lt;span class="str"&gt;");                        txtCardNo.Text = "&lt;/span&gt;&lt;span class="str"&gt;";                        CreateLog(CardNo, true);                    }                    else                    {                        MessageBox.Show("&lt;/span&gt;@_@ 再试一次吧!&lt;span class="str"&gt;","&lt;/span&gt;失败&lt;span class="str"&gt;");                    }                                      }                 catch (Exception es)                 {                     MessageBox.Show(es.Message);                     CreateLog(CardNo + "&lt;/span&gt;  &lt;span class="str"&gt;" + es.Message, false);                 }             }             else             {                 MessageBox.Show("&lt;/span&gt;脚本不存在!");                 &lt;span class="kwrd"&gt;return&lt;/span&gt;;             }         }&lt;/div&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;p&gt;OK,搞定了,看是很简单吧~~ &lt;p&gt;着意耕耘,自有收获&lt;/p&gt;&lt;img src="http://www.cnblogs.com/leleroyn/aggbug/2518266.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/leleroyn/archive/2012/05/25/2518266.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424781.html</id><title type="text">IIS负载均衡-Application Request Route详解第三篇：使用ARR进行Http请求的负载均衡</title><summary type="text">在前两篇文章中，我们已经讲述如何配置与安装ARR，从本篇文章开始，我们将重点的来讲述如何在使用ARR进行负载均衡。 本篇文章的目的主要是一步步的带领大家如何配置和使用ARR来进行Http请求的负载均衡，从而实现高可用与高扩展性。同时，本篇文章还会着重的讲述ARR是如何监视服务器的健康状况，同时也会讲述如何设置客户端的亲缘性。 为了演示，我这里做了如下的准备工作： 配置了三台服务器（名称定为A...</summary><published>2012-03-30T02:31:00Z</published><updated>2012-03-30T02:31:00Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424781.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424781.html"/><content type="html">&lt;p&gt;在前两篇文章中，我们已经讲述如何配置与安装ARR，从本篇文章开始，我们将重点的来讲述如何在使用ARR进行负载均衡。 &lt;p&gt;本篇文章的目的主要是一步步的带领大家如何配置和使用ARR来进行Http请求的负载均衡，从而实现高可用与高扩展性。同时，本篇文章还会着重的讲述ARR是如何监视服务器的健康状况，同时也会讲述如何设置客户端的亲缘性。 &lt;p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;为了演示，我这里做了如下的准备工作： &lt;ol&gt; &lt;ol&gt; &lt;li&gt;配置了三台服务器（名称定为A,B,C），并且安装的是Win Server 2008，IIS与.NET Framework也安装了。 &lt;li&gt;在服务器A上面安装了ARR模块。服务器A起到一个请求转发的作用！ &lt;li&gt;创建了一个Server Farm，并且将服务器B，C加入到了Farm中。&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;另外对于服务器B，我们就部署了一个默认的站点，如下： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=148"&gt;&lt;img border="0" alt="20120329224444.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=148" width="795" height="590"&gt;&lt;/a&gt; &lt;p&gt;可以看出，配置的站点相当的简单！大家可以自己去配置不同的站点，然后在ARR添加服务器的时候，指向服务器的其他端口！ &lt;p&gt;下面，我们看看，站点中有哪些内容： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=149"&gt;&lt;img border="0" alt="20120329224632.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=149" width="720" height="514"&gt;&lt;/a&gt; &lt;p&gt;在这里，我简单的放置了一个网页Default.html，这个页面的内容也非常的简单，其中的205是服务器的编号，这样写主要是为了我们后面便于辨别到底是哪一个服务器处理了我们的请求！ &lt;p&gt;另外需要注意的是，我们在站点中，放置了一个health.txt文件，内容如下： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=150"&gt;&lt;img border="0" alt="20120329224842.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=150" width="736" height="529"&gt;&lt;/a&gt; &lt;p&gt;这个文件主要是给ARR进行健康检查用的，在后面的配置中，我们就可以看到它的作用了！ &lt;p&gt;服务器C的配置和服务器B类似，只是页面文件的内容改为了“Response come from &lt;strong&gt;216&lt;/strong&gt;”。 &lt;p&gt;整个服务器的结构如下： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=151"&gt;&lt;img border="0" alt="20120329225007.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=151" width="550"&gt;&lt;/a&gt; &lt;p&gt;配置之后的结果如图所示： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=152"&gt;&lt;img border="0" alt="20120329225113.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=152" width="550"&gt;&lt;/a&gt; &lt;p&gt;下面开始确认相关的配置信息。 &lt;p&gt;&lt;strong&gt;确认Url Rewrite的规则&lt;/strong&gt; &lt;p&gt;1.启动IIS &lt;p&gt;2.选择建立的AppServerFarm &lt;p&gt;3.看到如下的界面： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=153"&gt;&lt;img border="0" alt="20120329225324.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=153" width="682" height="335"&gt;&lt;/a&gt; &lt;p&gt;4. 双击“Routing Rules”图标，确认“&lt;strong&gt;Use URL Rewrite to inspect incoming requests&lt;/strong&gt;&lt;strong&gt;”&lt;/strong&gt;被选中，如图： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=154"&gt;&lt;img border="0" alt="20120329225412.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=154" width="754" height="574"&gt;&lt;/a&gt; &lt;p&gt;5.启动浏览器，输入: &lt;a href="http://localhost/"&gt;http://localhost/&lt;/a&gt;，得到了如下的页面结果： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=155"&gt;&lt;img border="0" alt="20120329225528.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=155" width="550"&gt;&lt;/a&gt; &lt;p&gt;很显然，ARR的请求转发起作用了，确认这是205服务器在处理请求！下面，为了确认，我们来查看一下。 &lt;p&gt;&lt;strong&gt;请求监控配置&lt;/strong&gt; &lt;p&gt;1. 选择AppServerFarm，然后选中“&lt;strong&gt;Monitoring and Management&lt;/strong&gt;” &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=156"&gt;&lt;img border="0" alt="20120330085444.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=156" width="550"&gt;&lt;/a&gt; &lt;p&gt;2. 双击之后，显示如下： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=165"&gt;&lt;img border="0" alt="20120330090455.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=165" width="690" height="397"&gt;&lt;/a&gt; &lt;p&gt;发现：果然是205服务器在处理请求！ &lt;p&gt;&lt;strong&gt;配置ARR健康检查机制&lt;/strong&gt; &lt;p&gt;1.选择AppServerFarm，然后选中右边的“Health Test”图标。 &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=158"&gt;&lt;img border="0" alt="20120330085622.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=158" width="603" height="321"&gt;&lt;/a&gt; &lt;p&gt;2.双击图标，得到如下界面： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=159"&gt;&lt;img border="0" alt="20120330085646.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=159" width="690" height="452"&gt;&lt;/a&gt; &lt;p&gt;大家还记得我们之前在每个站点放置的health.txt文件吗，之前说过，这个文件是用来做健康检查的：ARR定时的去通过GET请求获取文件的内容，然后和配置中的“Response match”内容进行对比，如果二者一样，说明Server Farm中的服务器正常。这和我们常常用ping命令测试网络是否连通一个道理。 &lt;p&gt;&lt;strong&gt;注意：这里在URL&lt;/strong&gt;&lt;strong&gt;中放置的:http://localhost/health.txt&lt;/strong&gt;&lt;strong&gt;。为什么&lt;/strong&gt;？ &lt;p&gt;我们知道，Farm中服务器很多，这里不可能设置很多的值,例如16.187.153.205/health.txt，16.187.153.216/health.txt。 ARR不允许我们这样设置。这里之所以让URL为&lt;strong&gt;localhost&lt;/strong&gt;，ARR在健康检查的时候，是让各自的站点各自的去请求自己的health.txt，而每一个站点对于各自的health.txt而言，都是local的。这里的内幕，大家不需要太清楚，只要懂得配置就OK了。 &lt;p&gt;另外，还可以设置健康检查的周期，和过期的时间！ &lt;p&gt;&lt;strong&gt;配置客户端亲缘性&lt;/strong&gt; &lt;p&gt;1.选择AppServerFarm，然后选中右边的“Server Affnity”图标。 &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=160"&gt;&lt;img border="0" alt="20120330085758.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=160" width="601" height="230"&gt;&lt;/a&gt; &lt;p&gt;2.双击，然后看到如下界面： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=161"&gt;&lt;img border="0" alt="20120330085824.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=161" width="824" height="577"&gt;&lt;/a&gt; &lt;p&gt;客户端的亲缘性是通过cookie来实现的。基本的流程与原理是这样的： &lt;ol&gt; &lt;ol&gt; &lt;li&gt;请求发送给ARR，假如此时ARR请求转发给服务器B。 &lt;li&gt;服务器B处理请求，然后将响应发送给ARR所在的服务器。 &lt;li&gt;此时ARR在响应中加入一个cookie，并且记录请求处理的服务器为B。 &lt;li&gt;下一次，ARR检查发来的请求，如果发现包含了之前设置的cookie，并且检查cookie里面的服务器信息，然后将请求转发给对应的服务器。&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;拒绝新的请求连接&lt;/strong&gt; &lt;p&gt;在使用Server Farm的时候，我们可以让Farm中的一些服务器不在接受新的请求连接，处于一种离线的状态。从而，使得我们可以之后将这些离线的服务器拿去维护等。 &lt;p&gt;大家可以这里就有一个疑问了：如果客户端设置了服务器的亲缘性，而这个服务器又离线了，之前建立的session和相关的信息怎么办？ &lt;p&gt;其实这里所说的离线，并不是真的离线，断网！而是说，这些服务器不在接受新的请求，之前已经接受的请求，还是会处理完的！ &lt;p&gt;操作的步骤如下： &lt;ol&gt; &lt;ol&gt; &lt;li&gt;选中“appServerFarm“ &lt;li&gt;展开“Servers“节点 &lt;li&gt;在右边列出的服务器中，点击“右键“，使其离线，如图：&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=162"&gt;&lt;img border="0" alt="20120330090012.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=162"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;这里给大家留一个小作业：把Farm中的一台服务器下线，然后发送请求到ARR部署的那个服务器，看看效果！&lt;/strong&gt; &lt;p&gt;到这里，大家就可以开始配置和使用ARR进行负载均衡了！ &lt;p&gt;之后的文章，我们讲述的深入一些！ &lt;p&gt;原文链接：&lt;a title="http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-204" href="http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-204"&gt;http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-204&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/leleroyn/aggbug/2424781.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424781.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424771.html</id><title type="text">IIS负载均衡-Application Request Route详解第二篇：创建与配置Server Farm</title><summary type="text">自从本系列发布之后，收到了很多的朋友的回复！非常感谢，同时很多朋友问到了一些问题，有些问题是一些比较基本的问题，由于时间的缘故，不会一一的为大家回复，如果有不明白的，希望大家勤自学！本系列虽然不难，但是很多的一些知识都是默认需要掌握的，例如：负载均衡的概念，原理，Web Farm等。 本篇议题如下： 创建Server Farm 配置Server Farm Application Request...</summary><published>2012-03-30T02:28:00Z</published><updated>2012-03-30T02:28:00Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424771.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424771.html"/><content type="html">&lt;p&gt;自从本系列发布之后，收到了很多的朋友的回复！非常感谢，同时很多朋友问到了一些问题，有些问题是一些比较基本的问题，由于时间的缘故，不会一一的为大家回复，如果有不明白的，希望大家勤自学！本系列虽然不难，但是很多的一些知识都是默认需要掌握的，例如：负载均衡的概念，原理，Web Farm等。 &lt;p&gt;本篇议题如下： &lt;p&gt;&lt;strong&gt;创建Server Farm&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;配置Server Farm&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;p&gt;Application Request Route模块的使用是和Server Farm模块结合在一起的，只有先创建了Server Farm，才能开始使用Application Request Route进行HTTP请求路由。Server Farm简而言之就是：对一个或者多个服务器的逻辑分组，便于管理，HTTP请求路由等。 &lt;p&gt;在上一篇文章中，我们已经介绍了如何安装了和配置ARR。下面，我们就开始创建于配置Server Farm。 &lt;p&gt;&lt;strong&gt;创建Server Farm&lt;/strong&gt; &lt;ol&gt; &lt;li&gt;启动IIS 7的控制面板，看到如下的界面（以Win Server 2008为例子）：&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=113"&gt;&lt;img border="0" alt="20120326231339.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=113" width="641" height="231"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;2&lt;/strong&gt;. 选中“Server Farms”，点击右键，选择“Create Server Farm”。 &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=114"&gt;&lt;img border="0" alt="20120326231437.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=114"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;3&lt;/strong&gt;.为新建的Server Farm取名。 &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=115"&gt;&lt;img border="0" alt="20120326231529.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=115" width="649" height="438"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;4&lt;/strong&gt;.为新建的Server Farm添加服务器，输入服务器的地址。 &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=116"&gt;&lt;img border="0" alt="20120326231614.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=116" width="633" height="430"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;5&lt;/strong&gt;. 输入了要加入Server Farm的服务器地址之后，就可以点击“Add”，将其添加。另外，还可以点击“Advanced Settings”来进行高级的设置，如下所示。 &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=117"&gt;&lt;img border="0" alt="20120326231710.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=117" width="584" height="417"&gt;&lt;/a&gt; &lt;p&gt;在“Advanced Settings”中可以设置新添加的服务器的端口，例如，我们在添加的服务器192.168.0.1中，我们将站点没有放在80端口，而是放在其他的端口，这时，我们就可以在这里设置，告诉ARR，以后将请求转发到192.168.0.1的其他端口，而不是80. &lt;p&gt;另外，还可以设置服务器的权重值（weight），以后之后，我们可以为在ARR中选择基于权重的负载均衡算法。 &lt;p&gt;&lt;strong&gt;6&lt;/strong&gt;. 添加之后，可以看到结果，如下所示 &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=118"&gt;&lt;img border="0" alt="20120326231853.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=118" width="596" height="220"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;7.&lt;/strong&gt; 如果需要，我们可以添加更多的服务器到新建的myNewServerFarm中，只要在“myNewServerFarm”或者“Servers”上面点击右键就可以。 &lt;p&gt;&lt;strong&gt;配置Server Farm&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; 选择“myNewServerFarm”，在右边显示如下界面： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=119"&gt;&lt;img border="0" alt="20120326232224.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=119" width="587" height="195"&gt;&lt;/a&gt; &lt;p&gt;通过这个界面，我们可以对ARR进行可视化的配置与监视。 &lt;p&gt;&lt;strong&gt;2. 负载均衡算法选择：&lt;/strong&gt;双击“Load Balance”图标，我们选择ARR的负载均衡的算法，界面如下： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=120"&gt;&lt;img border="0" alt="20120326232331.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=120" width="580" height="293"&gt;&lt;/a&gt; &lt;p&gt;这里提供了7中不同的负载均衡的路由算法，通过方法名，我们很好理解每一种算法。有关算法的细节，大家可以参考这篇文章：&lt;a href="http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-198"&gt;负载均衡常用算法&lt;/a&gt;。算法这里提供的算法种类和个数不一样，但是原理都是一样的：&lt;strong&gt;分压&lt;/strong&gt;！ &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;3. 服务器健康监控&lt;/strong&gt;：ARR可以配置通过发送GET请求来检测Server Farm中的服务器是状态良好的。这个原理和我们时不时的ping一个电脑，来判断其是否还可以连接一样。 &lt;p&gt;我们可以在在每个站点中放置一个文件（任意IIS允许请求的文件，例如txt，html，aspx页面等，不能是.config等文件，这个道理大家应该都清楚），例如：&lt;a href="http://localhost/myapp/test.html"&gt;http://localhost/myapp/test.html&lt;/a&gt;，在这个页面中放一段文本：good。之后开始配置，如下图所示： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=121"&gt;&lt;img border="0" alt="20120326232507.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=121" width="550"&gt;&lt;/a&gt; &lt;p&gt;ARR会每隔30秒就去请求一次，然后比较请求的响应是否是“good”，从而判断服务器是否状态良好。当然，我们可以通过写更复杂的判断服务器状态良好的代码，因为Health Test的实现了Provider模式，可以让我们替换算法，这个高级特性，我们以后讲述。  &lt;p&gt;本篇就讲到这里！下一篇，我们就真正的开始使用ARR进行请求的转发。 &lt;p&gt;原文链接：&lt;a title="http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-199" href="http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-199"&gt;http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-199&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/leleroyn/aggbug/2424771.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424771.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424762.html</id><title type="text">IIS负载均衡-Application Request Route详解第一篇： ARR介绍</title><summary type="text">IIS负载均衡-Application Request Route详解第一篇： ARR介绍 说到负载均衡，相信大家已经不再陌生了，本系列主要介绍在IIS中可以采用的负载均衡的软件：微软的Application Request Route模块。 其实Application Request Route已经有很多文章介绍过了，但是有很多的文档都是英文的，笔者在项目中，曾经为了使用和测试Applicati...</summary><published>2012-03-30T02:25:00Z</published><updated>2012-03-30T02:25:00Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424762.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424762.html"/><content type="html">&lt;p&gt;IIS负载均衡-Application Request Route详解第一篇： ARR介绍 &lt;p&gt;说到负载均衡，相信大家已经不再陌生了，本系列主要介绍在IIS中可以采用的负载均衡的软件：微软的Application Request Route模块。 &lt;p&gt;其实Application Request Route已经有很多文章介绍过了，但是有很多的文档都是英文的，笔者在项目中，曾经为了使用和测试Application Request Route，将有关的文档已经转为中文，在组员之间传阅，本系列在这些文档的中，再加入一些使用的心得。 &lt;p&gt;本篇议题如下： &lt;p&gt;&lt;strong&gt;Application Request Route&lt;/strong&gt;&lt;strong&gt;介绍&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Application Request Route&lt;/strong&gt;&lt;strong&gt;安装&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Application Request Route&lt;/strong&gt;&lt;strong&gt;介绍&lt;/strong&gt; &lt;p&gt;Application Request Route（后面简称为ARR）是一个寄宿于IIS7（及以后的IIS版本）的一个基于代理的模块，它可以通过判断Http Headers，Server Variables以及负载均衡算法将HTTP的请求转发到不同的处理服务器之上。ARR的用处如下： &lt;ol&gt; &lt;ol&gt; &lt;ol&gt; &lt;li&gt;增强应用的可用性与扩展性 &lt;li&gt;更好的利用服务器资源 &lt;li&gt;使得应用程序的部署更加方便，并且支持卫星部署管理与热替换 &lt;li&gt;更低的管理成本，使得共享宿主的部署成为可能&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;ARR是基于URL Rewrite Module的，它通过检测客户端发来的HTTP请求来做出请求路由的决定。 &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=105"&gt;&lt;img border="0" alt="20120326103946.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=105"&gt;&lt;/a&gt; &lt;p&gt;下面，我们就进一步的看看ARR的一些特征： &lt;p&gt;&lt;strong&gt;1.基于HTTP请求，做出的请求路由的决定&lt;/strong&gt; &lt;p&gt;与硬件的负载均衡不同（在OSI模型的IP层来决定请求的路由方式），ARR是基于应用层来进行负载均衡的，因为在应用层可用的信息更多（其实谈到这里，是很有必要把负载均衡的原理讲清楚的，但是，因为本系列主要是讲述ARR，所以，对已一些底层原理性的概念，不会做过多的涉及，以后计划为朋友们系统的讲述负载均衡的原理及其实现,可以参看：&lt;strong&gt;&lt;a href="http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-197"&gt;负载均衡第一篇-介绍篇&lt;/a&gt;&lt;/strong&gt;）。通过在ARR中使用URL Rewrite Module，我们就可以实基于Http Headers与Server Variables来实现个更强大的路由规则。 &lt;p&gt;&lt;strong&gt;2.提供多种负载均衡算法&lt;/strong&gt; &lt;p&gt;我们可以自己决定使用哪一种负载均衡算法来进行请求的路由，ARR提供了以下6种算法。 &lt;p&gt;&lt;strong&gt;3.健康检查&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;我们可以使用“实时通信“和”特定Url测试“来检查服务器的健康状况。并且，我们还可以通过使用很多的参数来决定到底什么样的状况才是健康的正常的服务器，例如，有人认为只要服务器是开启的，就是健康的；也有人认为，服务器开启，并且处理的请求没有超载是健康的，等等。另外，我们还可以通过使用自己的提供Health Monitoring Provider来实现自己的健康检查可能。 &lt;p&gt;&lt;strong&gt;4.客户端亲缘性&lt;/strong&gt; &lt;p&gt;关于亲缘性，相信大家不再陌生，我这里稍微的提一下：就是更加倾向于，或者喜欢那个。例如，在SQL Server中可以设置CPU的亲缘性，，假设现在有四个CPU，编号分别是A,B,C,D,现在我们SQL Server的CPU亲缘性设置到A上，就是说: SQL Server在处理请求的时候，更加喜欢把请求发送给编号为A的CPU来处理，当然也会将请求发送给其他的CPU，但是A的CPU处理请求的机会更多。 &lt;p&gt;同理，在ARR中，可以通过设置客户端的亲缘性，ARR主要是通过使用Cookie来实现的。至于如何实现的，其实也很简单，这里暂且不说。 &lt;p&gt;这里就来说说客户亲缘性的一些需要考虑的点： &lt;ol&gt; &lt;ol&gt; &lt;li&gt;如果使用了客户端亲缘性，就可以在应用中使用传统的Session和Cache，而没有必要使用分布式的Session和Cache。这里，以Session为例子，因为很多的时候，我们都需要将一个站点应用部署到多个服务器上，如果在某些地方使用了Session，特别保存用户的一些数据的时候，就需要使用分布式的Session，用户登录就是一个最明显的例子（避免用户从服务器A上登录，当下一次请求在B服务器处理的时候，还需要再次登录）。使用客户端亲缘性，ARR就可以将同一个用户的请求再次转发到用户第一次请求的服务器上。 &lt;li&gt;使用客户端亲缘性，就在一定程度上面失去了负载均衡的意义。因为设置了客户端亲缘性，即使用户初次请求的服务器现在压力很大，那么ARR还是会将用户的请求转发过去。 &lt;li&gt;客户端亲缘性，失去了高可用性。因为很有可能现在处理用户请求的服务器已经宕机了，虽然ARR有健康检查机制，但是ARR还是可以将请求发给宕机的服务器，导致请求无法处理。&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;5.宿主名亲缘性&lt;/strong&gt; &lt;p&gt;理解了上面的“客户端亲缘性“，这里就更加容易理解了。“ 宿主名亲缘性”主要使用在共享服务器中的（很多人使用一台服务器，就是站点部署的时候，购买的是“虚拟地址空间”）。我们后面在提到的时候，会详细讲解。 &lt;p&gt;&lt;strong&gt;6.服务器分组&lt;/strong&gt; &lt;p&gt;ARR可以管理很多的服务器组，其中每一组又包含多台服务器服。 &lt;p&gt;&lt;strong&gt;7.基于图形化界面的管理与健康&lt;/strong&gt; &lt;p&gt;ARR与IIS集成，并且，通过了可视化的，便于操作的可视化操作界面。 &lt;p&gt;&lt;strong&gt;8.制定请求失败的跟踪规则&lt;/strong&gt; &lt;p&gt;在ARR中，可以定义特定的跟踪规则，当请求处理失败之后查看跟踪信息，便于诊断。 &lt;p&gt;&lt;strong&gt;Application Request Route&lt;/strong&gt;&lt;strong&gt;安装&lt;/strong&gt; &lt;p&gt;下面，我们就介绍ARR的安装，便于大家快速上手与学习： &lt;p&gt;ARR依赖于以下组件： &lt;ol&gt; &lt;ol&gt; &lt;li&gt;Microsoft URL Rewrite Module for IIS 7.0. &lt;li&gt;Microsoft Web Farm Management Version 1 for IIS 7.0. &lt;li&gt;Microsoft Application Request Routing Version 1 for IIS 7.0. &lt;li&gt;Microsoft External Cache Version 1 for IIS 7.0.&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;ARR的安装，需要相关的环境，如下： &lt;ol&gt; &lt;ol&gt; &lt;li&gt;IIS 7.0 以及以后的版本（笔者在Win 7和Server2008中都安装过，是可以的）&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;下面开始进入安装： &lt;p&gt;&lt;strong&gt;1. 下载ARR：&lt;/strong&gt; &lt;p&gt;现在ARR已经发展了2.5的版本，可以说已经很稳定了，笔者也在一些大型项目中已经采用，效果还不错。 &lt;p&gt;现在地址：&lt;a href="http://www.iis.net/download/ApplicationRequestRouting"&gt;http://www.iis.net/download/ApplicationRequestRouting&lt;/a&gt; &lt;p&gt;&lt;strong&gt;2. 现在ARR集成在Web 安装平台中&lt;/strong&gt;，如下： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=106"&gt;&lt;img border="0" alt="20120326104119.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=106" width="550"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;3.点击“Install”，开始安装&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt;安装之后，打开IIS的控制窗口，如下（Win7系统的界面）： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=107"&gt;&lt;img border="0" alt="20120326102150.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=107"&gt;&lt;/a&gt; &lt;p&gt;如果看到有“Server Farms”，就说明安装OK了。 &lt;p&gt;&lt;strong&gt;5.配置应用程序池&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;所有的HTTP请求都需要经过ARR。所以，我们希望在安装了ARR的服务器上的IIS要必须不停的运行，不停把请求转发到其他的服务器上面，也就是说：这台安装了ARR的服务器基本的功能就是请求转发。 &lt;p&gt;假设现在我们手里有3台服务器（编号分别为A,B,C）来部署agilesharp的站点，安排如下： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=108"&gt;&lt;img border="0" alt="20120326104255.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=108" width="544" height="94"&gt;&lt;/a&gt; &lt;p&gt;现在服务器A向外面暴露的地址假设为:159.12.2.15，那么我们在A服务器上建立一个agilesharp的站点，如下： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=109"&gt;&lt;img border="0" alt="20120326104335.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=109"&gt;&lt;/a&gt; &lt;p&gt;并且，我们设置agilesharp站点的应用程序池为IIS的集成模式。这个时候，因为这个站点其实只是暴露给外面，真正的请求处理在B和C服务器。所以，我们要设置这个agilesharp的站点的应用程序池，从而它源源不断的接受HTTP请求（应用程序池默认是不会不断的介绍请求的，它有一个时间的延时，这个延时的时间往往就是默认的请求处理时间），然后由ARR转发。 &lt;p&gt;设置如下： &lt;p&gt;&lt;a href="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=110"&gt;&lt;img border="0" alt="20120326104412.png" src="http://www.agilesharp.com/Services/BlogAttachment.ashx?AttachmentID=110"&gt;&lt;/a&gt; &lt;p&gt;将&lt;strong&gt;Idle Time-out (minutes)&lt;/strong&gt;设置为0,然后保存就OK了。 &lt;p&gt;OK，介绍就到这里，下一篇，我们就来看看一些具体的应用！ &lt;p&gt;原文地址：&lt;a title="http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-196" href="http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-196"&gt;http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-196&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/leleroyn/aggbug/2424762.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/leleroyn/archive/2012/03/30/2424762.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/leleroyn/archive/2012/03/29/2423125.html</id><title type="text">充分利用缓存来提高网站性能</title><summary type="text">[原文作者]：Omar [原文链接]：Making best use of cache for high performance website使用URLs时要确保一致性 浏览器基于URL来缓存资源。当URL改变后，浏览器从源服务器获该资源的新的版本。查询字符串参数的改变也被视为URL的改变。例如，"/default.aspx" 被缓存到浏览器，如果你请求了"/default.aspx?123"，浏览器将从服务器获取新的版本。对于这个新URL的响应，如果你返回的是正确的缓存报头，它仍然会被缓存。这样的话，再把查询字符串改成类似于"/defaul</summary><published>2012-03-29T04:23:00Z</published><updated>2012-03-29T04:23:00Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/leleroyn/archive/2012/03/29/2423125.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/archive/2012/03/29/2423125.html"/><content type="html"> &lt;p&gt;[原文作者]：&lt;a href="http://msmvps.com/blogs/omar/default.aspx" target="_blank"&gt;&lt;font color="#0069d6"&gt;Omar&lt;/font&gt;&lt;/a&gt; [原文链接]：&lt;a href="http://msmvps.com/blogs/omar/archive/2007/11/29/making-best-use-of-cache-for-high-performance-website.aspx" target="_blank"&gt;&lt;font color="#0069d6"&gt;Making best use of cache for high performance website&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;使用URLs时要确保一致性 &lt;/strong&gt;浏览器基于URL来缓存资源。当URL改变后，浏览器从源服务器获该资源的新的版本。查询字符串参数的改变也被视为URL的改变。例如，"/default.aspx" 被缓存到浏览器，如果你请求了"/default.aspx?123"，浏览器将从服务器获取新的版本。对于这个新URL的响应，如果你返回的是正确的缓存报头，它仍然会被缓存。这样的话，再把查询字符串改成类似于"/default.aspx?456&amp;#8221;，那么服务器将又返回一个新的版本。因此，当你想响应得到缓存时，就要确保你在各处使用了一致性的URL。在主页里，如果你请求了一个URL为"/welcome.gif"的文件，那么确保在其他页面里在请求该文件时也使用相同的URL。常见的一个错误是，有时会从URL中省略"www"子域。&lt;a href="http://www.pageflakes.com/default.aspx"&gt;&lt;font color="#0069d6"&gt;www.pageflakes.com/default.aspx&lt;/font&gt;&lt;/a&gt;与pageflakes.com/default.aspx是不同的，两者会被分别的缓存。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;静态内容会被缓存得更久 &lt;/strong&gt;静态内容可以被缓存得更久，例如一个月。&amp;nbsp; 如果你正考虑应该只缓存几天，以便当你修改文件后，用户可以很快获取到新的版本，那么你错了。如果一个文件是通过设置过期报头（expires header）来缓存的，当你更新它时，新的用户可以立即获取到最新的版本，而老的用户只能看到旧的内容直到它在浏览器端过期。因此，只要你正在使用过期报头来缓存静态文件，把值设的越大越好。 例如，你已经通过设置过期报头值为3天来缓存一个文件，一个用户将在今天获取到该文件，并且保存在缓存区里直到三天过后；另一个用户将在明天获取到该文件，并缓存起来直到明天之后的三天。如果你后天改变该文件，第一个用户将在第四天看到它，第二个用户将在第五天看到它。因此，不同的用户将看到该文件的不同版本。结果是，设置一个低值对于保证所有用户在最短时间内得到最新的版本是没有帮助的。你将不得不通过修改文件的URL来确保所有人立即获得完全相同的一个文件。 你可以使用IIS管理器来为静态文件设置过期报头，后面的内容将会介绍如何设置。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;使用缓存友好的文件夹结构 &lt;/strong&gt;把要缓存的内容存储在一个共同的文件夹内。例如，把你网站的所有图片存储在"/static"文件夹内，而不是把图片分别地存储在不同的子文件夹下。这将有助于你在整个网站范围内使用一致性的URL，因为从任何地方你都可以使用"/static/images/ somefile.gif"。稍后，我们将学到，当把静态缓存文件放在一个共同的根文件夹内后，转移到一个内容传送网络将很容易。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;重用相同的图形文件 &lt;/strong&gt;有时我们把相同的图形文件存储于几个不同的虚拟目录下，以便可以书写很短的路径。例如，你有一个indicator.gif文件在根目录，一些子目录和CSS目录里。这样做是因为你不必担心从不同地方访问的路径问题，你只需要使用文件名作为相对URL。这却对缓存没有帮助。文件的每个拷贝都分别地缓存在浏览器端。因此，你应该把工程中所有的图像文件汇集到根目录下的"static"文件夹下，除去重复的，在所有页面和CSS文件里使用相同的URL。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;改变文件名来使缓存过期&lt;/strong&gt; 当你更改一个静态文件的时候，不要仅仅只是更新文件本身，因为它已经在客户端的浏览器缓存了。你需要更改文件名，并且更新所有各处的引用，这样浏览器才会获取到新的版本。你也可以把文件名存储在数据库或者配置文件中，通过数据绑定来动态的生成URL。以这种方式，你可以在一处来改变URL，而使整个站点立即得到更新。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;使用版本号来访问静态文件 &lt;/strong&gt;如果你不想因为要保存同样的文件的不同拷贝而使静态文件夹变得混乱，你可以使用查询字符串来区分同一文件的各个版本。例如，一个GIF文件可以和一个虚拟的查询字符串组合来访问，如"/static/images/indicator.gif?v=1"。当你更改了indicator.gif，你可以覆盖掉原来的文件，然后把所有到这个文件的引用更新为"/static/images/indicator.gif?v=2"。这样你可以重复修改同一文件，然后用新的版本号来更新所有到这个文件的引用。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;把可缓存的文件存储在不同的域中&lt;/strong&gt; 把静态内容存储在不同的域中，总是不失为一个好的办法。首先浏览器可以打开另外的并发连接来下载静态文件。另一个好处是你不需要发送cookies到静态文件。如果你把静态文件和你的web应用放在同一域中，浏览器会发送你的web应用产生的所有ASP.NET cookies和所有的其他cookies。这使得请求报头不必要的变大，浪费带宽。访问静态文件时你并不需要发送这些cookies。因此，如果你把静态文件放在不同的域中，那些cookies将不会被发送。例如，把静态文件放在&lt;a href="http://www.staticcontent.com/"&gt;&lt;font color="#0069d6"&gt;www.staticcontent.com&lt;/font&gt;&lt;/a&gt;域，而在&lt;a href="http://www.dropthings.com/"&gt;&lt;font color="#0069d6"&gt;www.dropthings.com&lt;/font&gt;&lt;/a&gt;域运行你的网站。不同的域并意味着必须是完全不同的网站。它可能仅仅是个别名，而物理上和web应用共享同一路径。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安全套接字(SSL)不会缓存，尽量少用&lt;/strong&gt; 任何经过SSL处理的内容都不会被缓存。因此，你需要把静态内容置于SSL之外。此外，你应该尽量将SSL应用于一些安全页面，如登录页面或者支付页面。其余的应该使用常规的HTTP而不是SSL。SSL加密请求和响应，因而增加了服务器的额外负担。加密后的内容也比原始内容要大，因而占据更多带宽。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;HTTP POST请求从不被缓存&lt;/strong&gt; 缓存只相对于HTTP GET请求。HTTP POST请求从来不被缓存。因此，任何形式的AJAX调用，如果想被缓存，需要以HTTP GET的形式调用。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;生成内容长度响应报头（content-length reponse header） &lt;/strong&gt;当你通过web services调用或者HTTP handlers动态地提供内容时，请确保生成了Content-Length报头。浏览器通过查看响应的Content-Lenght报头会知道有多少内容要被下载，这样它会有多种优化方案来提高下载速度。如果有这个报头信息，浏览器会更有效的利用持续连接。这将避免浏览器为每个请求新开一个连接。在没有Content-Lenght报头信息的状况下，浏览器不知道要从服务器接收多少内容，因而只要它从服务器端获取到字节流，就会保持连接为打开状态直到连接关闭。因此，你失去了持续连接带来的好处，它可以极大的缩短一些小文件的下载时间，，如css、javascripts、以及图片文件。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;如何在IIS中配置静态内容的缓存&lt;/strong&gt; 在IIS管理器中，网站属性对话框有个&amp;#8220;HTTP Headers&amp;#8220;页，在那里你可以对所有IIS处理的请求定义过期报头。在那你可以定义内容立即过期，或是几天后过期，或者在某个特定日期过期。第二个选项（Expires after）使用的是相对过期，不是绝对过期。这个非常有用，因为它对每个请求都起作用。无论谁请求了一个静态文件，IIS会基于Expire after选项天/月的数字来计算过期日期。 &lt;a href="http://omar.mvps.org/images/Makingbestuseofcacheforbestsiteperforman_15143/clip_image001_thumb.gif" target="_blank"&gt;&lt;img id="DOWNLOADFAILAAAAAAAAAAAAAAAAAAAA" alt="" src="http://omar.mvps.org/images/Makingbestuseofcacheforbestsiteperforman_15143/clip_image001_thumb.gif" width="472" height="458" /&gt;&lt;/a&gt;&amp;nbsp; &lt;br /&gt;对于由ASP.NET来处理的动态页面，一个handler可以修改过期报头的值来覆盖IIS的默认设置。&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/leleroyn/aggbug/2423125.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/leleroyn/archive/2012/03/29/2423125.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/leleroyn/archive/2012/03/13/2393438.html</id><title type="text">asp.net通过cookie简单实现购物车功能</title><summary type="text">1，首先建立购物车模型类： using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace Ants.WebPart.Models{ public class ShopCarModel { public int Id { get; set; } ...</summary><published>2012-03-13T03:09:00Z</published><updated>2012-03-13T03:09:00Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/leleroyn/archive/2012/03/13/2393438.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/archive/2012/03/13/2393438.html"/><content type="html">&lt;p&gt;1，首先建立购物车模型类：&lt;/p&gt;  using System;&lt;br/&gt;using System.Collections.Generic;&lt;br/&gt;using System.Linq;&lt;br/&gt;using System.Web;&lt;br/&gt;&lt;br/&gt;namespace Ants.WebPart.Models&lt;br/&gt;{&lt;br/&gt;    public class ShopCarModel&lt;br/&gt;    {&lt;br/&gt;        public int Id { get; set; }&lt;br/&gt;        public string Title { get; set; }&lt;br/&gt;        public string Other { get; set; }&lt;br/&gt;    }&lt;br/&gt;}&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;2.实现购物车功能的两个方法：  using System;&lt;br/&gt;using System.Collections.Generic;&lt;br/&gt;using System.Linq;&lt;br/&gt;using System.Web;&lt;br/&gt;using Ants.WebPart.Models;&lt;br/&gt;using Ants.Common;&lt;br/&gt;&lt;br/&gt;namespace Ants.WebPart&lt;br/&gt;{&lt;br/&gt;    public class ShopCarTask&lt;br/&gt;    {&lt;br/&gt;        private static string _cookieName =TextUtils.ConvertToBasic64(&amp;quot;MyshopcarPowerByAnts&amp;quot;);&lt;br/&gt;        Ants.Provider.ISerializerProvider serializer = new Ants.Provider.JsonSerializerProvider();&lt;br/&gt;        public void SetShopCar(IList&amp;lt;ShopCarModel&amp;gt; goods)&lt;br/&gt;        {&lt;br/&gt;           CookieUtils.Write(_cookieName,TextUtils.ConvertToBasic64(serializer.ToString(goods)));&lt;br/&gt;        }&lt;br/&gt;        public void SetShopCar(IList&amp;lt;ShopCarModel&amp;gt; goods, int expires)&lt;br/&gt;        {&lt;br/&gt;            CookieUtils.Write(_cookieName, TextUtils.ConvertToBasic64(serializer.ToString(goods)),expires);&lt;br/&gt;        }&lt;br/&gt;        public IList&amp;lt;ShopCarModel&amp;gt; GetShopCar()&lt;br/&gt;        {&lt;br/&gt;           return serializer.parse &amp;lt; IList &amp;lt; ShopCarModel &amp;gt;&amp;gt;(CookieUtils.Read(_cookieName));&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/p&gt;&lt;img src="http://www.cnblogs.com/leleroyn/aggbug/2393438.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/leleroyn/archive/2012/03/13/2393438.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/leleroyn/archive/2012/03/01/2375194.html</id><title type="text">base64加解码方法（解决参数传递时乱码）</title><summary type="text">在gb2312与utf-8混搭的网站里，如果当你用urlencode与urldecode都不能解决乱码问题时，可以考虑用下面的两个方法来处理： using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text;public class TextHelper{ p...</summary><published>2012-03-01T03:07:00Z</published><updated>2012-03-01T03:07:00Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/leleroyn/archive/2012/03/01/2375194.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/archive/2012/03/01/2375194.html"/><content type="html">&lt;p&gt;在gb2312与utf-8混搭的网站里，如果当你用urlencode与urldecode都不能解决乱码问题时，可以考虑用下面的两个方法来处理：&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;using System;&lt;br/&gt;using System.Collections.Generic;&lt;br/&gt;using System.Linq;&lt;br/&gt;using System.Web;&lt;br/&gt;using System.Text;&lt;br/&gt;&lt;br/&gt;public class TextHelper&lt;br/&gt;{&lt;br/&gt;    public static string ConvertToBasic64(string StrValve)&lt;br/&gt;    {&lt;br/&gt;        return StrValve != null?Convert.ToBase64String(Encoding.UTF8.GetBytes(StrValve)):null;&lt;br/&gt;    }&lt;br/&gt;    public static string ConvertFromBasic64(string StrValve)&lt;br/&gt;    {&lt;br/&gt;        return StrValve!=null?Encoding.UTF8.GetString(Convert.FromBase64String(StrValve)):null;&lt;br/&gt;    }&lt;br/&gt;}&lt;p&gt;&lt;a href="http://www.doctor-c.net/2012-03-01/186/" target="_blank"&gt;Doctor-C.net同步发布&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/leleroyn/aggbug/2375194.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/leleroyn/archive/2012/03/01/2375194.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/leleroyn/archive/2012/02/23/2364953.html</id><title type="text">【Apache】在Apache中利用ServerAlias设置虚拟主机接收多个域名和设置域名泛解析</title><summary type="text">ServerAlias：服务器别名，在Apache中可以用于设置虚拟主机接收到个域名，也可以用于接收泛解析的域名。具体的设置方法如下： 一、用于设置虚拟主机接收多个域名 一个虚拟主机常常会接收多个域名解析，比如：一个虚拟主机要同时介绍doctor-c.net, doctor-c.com两个域名，或者是两个二级域名，如：www.doctor-c.net, www1.doctor-c.net，对于这种...</summary><published>2012-02-23T07:16:00Z</published><updated>2012-02-23T07:16:00Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/leleroyn/archive/2012/02/23/2364953.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/archive/2012/02/23/2364953.html"/><content type="html">&lt;p&gt;ServerAlias：服务器别名，在Apache中可以用于设置虚拟主机接收到个域名，也可以用于接收泛解析的域名。具体的设置方法如下：&lt;/p&gt; &lt;p&gt;&lt;strong&gt;一、用于设置虚拟主机接收多个域名&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;一个虚拟主机常常会接收多个域名解析，比如：一个虚拟主机要同时介绍doctor-c.net, doctor-c.com两个域名，或者是两个二级域名，如：&lt;a href="http://www.doctor-c.net"&gt;www.doctor-c.net&lt;/a&gt;, www1.doctor-c.net，对于这种情况，可以在用ServerAlias轻松做到,而且此方法实现的跳转是301永久重定向，打开apache的设置文件：httpd.conf，在该主机的设置代码中：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;&amp;lt;VirtualHost *&amp;gt;&lt;/p&gt; &lt;p&gt;ServerName “doctor-c.net”&amp;nbsp; #默认域名；&lt;/p&gt; &lt;p&gt;ServerAlias doctor-c.com doctor-c.net&amp;nbsp;&amp;nbsp;&amp;nbsp; www1.doctor-c.net&amp;nbsp;&amp;nbsp; #不同域名用空格隔开；&lt;/p&gt; &lt;p&gt;DocumentRoot “D:\wwwroot\doctor-c.net”&lt;/p&gt; &lt;p&gt;&amp;lt;Directory “D:\wwwroot\doctor-c.net”&amp;gt;&lt;/p&gt; &lt;p&gt;Options Indexes FollowSymLinks&lt;/p&gt; &lt;p&gt;AllowOverride all&lt;/p&gt; &lt;p&gt;&amp;lt;/Directory&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;保存httpd.conf文件，重启apche即可生效。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;二、 用于接收泛域名解析&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;一个虚拟主机是可以接收泛域名解析的，也是通过SeverAlias选项设置，通过设置该选项不仅可以接收二级泛域名解析，也可以接收三级、四级泛域名解析，具体设置如下：&lt;/p&gt; &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt; &lt;p&gt;&amp;lt;VirtualHost *&amp;gt;&lt;/p&gt; &lt;p&gt;ServerName “doctor-c.net” #默认域名；&lt;/p&gt; &lt;p&gt;ServerAlias *.doctor-c.net&amp;nbsp; #用*表示泛域名，如果要接收三级泛域名解析，可以写成这样：*.my.doctor-c.net ;&lt;/p&gt; &lt;p&gt;DocumentRoot “D:\wwwroot\doctor-c.net”&lt;/p&gt; &lt;p&gt;&amp;lt;Directory “D:\wwwroot\doctor-c.net”&amp;gt;&lt;/p&gt; &lt;p&gt;Options Indexes FollowSymLinks&lt;/p&gt; &lt;p&gt;AllowOverride all&lt;/p&gt; &lt;p&gt;&amp;lt;/Directory&amp;gt;&lt;/p&gt; &lt;p&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;保存httpd.conf文件，重启apche即可生效。&lt;/p&gt; &lt;p&gt;【doctor-c.net】同步发布地址:&lt;a title="http://www.doctor-c.net/2012-02-23/99/" href="http://www.doctor-c.net/2012-02-23/99/"&gt;http://www.doctor-c.net/2012-02-23/99/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/leleroyn/aggbug/2364953.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/leleroyn/archive/2012/02/23/2364953.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/leleroyn/archive/2012/02/22/2362746.html</id><title type="text">深入解析javascript与asp.net对Cookie操作的异同，以及如何共用（一）。</title><summary type="text">在网站开发过程中，不管是前台用javascript还是在后台用服务器端语言处理cookie，是作为一个web开发者都必须要熟练掌握的技能。 相信大家在开发过程中都经常用到。然而如何让前端和后端同时获取同一份cookie我们还是需要花费上点心思。 下面我将着重介绍下这方面的见容： 1，首先多们用js向网站写入一cookie(单键值的比较容易，我这里只讲述下一个cookie下多键值的处理) 为了简单，这里我们用jquery.cookie.js插件来操作cookie，代码如下：$.cookie('book', 'sn=081245&amp;title=你不能不知道的.net&amp;</summary><published>2012-02-22T02:54:00Z</published><updated>2012-02-22T02:54:00Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/leleroyn/archive/2012/02/22/2362746.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/archive/2012/02/22/2362746.html"/><content type="html">&lt;p&gt;在网站开发过程中，不管是前台用javascript还是在后台用服务器端语言处理cookie，是作为一个web开发者都必须要熟练掌握的技能。&lt;/p&gt; &lt;p&gt;相信大家在开发过程中都经常用到。然而如何让前端和后端同时获取同一份cookie我们还是需要花费上点心思。&lt;/p&gt; &lt;p&gt;下面我将着重介绍下这方面的见容：&lt;/p&gt; &lt;p&gt;1，首先多们用js向网站写入一cookie(单键值的比较容易，我这里只讲述下一个cookie下多键值的处理)&lt;/p&gt; &lt;p&gt;为了简单，这里我们用jquery.cookie.js插件来操作cookie，代码如下：&lt;/p&gt;$.cookie('book', 'sn=081245&amp;amp;title=你不能不知道的.net');&lt;br/&gt;&lt;p&gt;执行后我们得到的结果是：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/leleroyn/201202/201202221054097155.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/leleroyn/201202/201202221054093534.png" width="777" height="85" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2，接下来我们用C#代码在后端来实现同样的功能，代码如下：&lt;/p&gt; HttpCookie bookCookie = new HttpCookie("book");&lt;br/&gt;            bookCookie["sn"] = "081245";&lt;br/&gt;            bookCookie["title"] =  HttpUtility.UrlEncode("你不能不知道的.net");&lt;br/&gt;            Response.AppendCookie(bookCookie);&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/leleroyn/201202/201202221054091549.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/leleroyn/201202/201202221054102072.png" width="718" height="96" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;细心的你一定发现其实里面的cookie其实有点还不一样，对那就是&amp;#8220;=&amp;#8221;在用jquery.cookie.js插件处理时也被编码啦，这样的结果当然不符合我们的目标的。&lt;/p&gt;&lt;p&gt;其实这不难理解，jquery.cookie.js内部把'sn=081245&amp;amp;title=你不能不知道的.net'当作一个字串给编码啦，那好，我们就去jquery.cookie.js修改下代码，把编码的工作交给我们自己来处理。&lt;/p&gt;&lt;p&gt;我们找到相应的代码&lt;/p&gt;document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;修改为&lt;/p&gt;document.cookie = [name, '=', value, expires, path, domain, secure].join('');这样我们上面的js的代码也要做相应的处理啦，修改后为： function writeCookie() {&lt;br/&gt;   $.cookie('book', 'sn=081245'+'&amp;amp;title='+encodeURIComponent('你不能不知道的.net'));&lt;br/&gt; }&lt;p&gt;经过这样的处理我们保证了前端各后端写入的cookie值是一致的，为后面的的读取作基础，下一篇我将继续讲述 cookie在前，后端读取一致，并提供相应源码下载。&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;本章需要注意的几点问题：&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000"&gt;1，对于非英文和数字等一定要编码后再写入。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000000"&gt;2，js和asp.net后台对应的编码函数为encodeURIComponent。&lt;/font&gt;&lt;/p&gt;&lt;p&gt;源码：&lt;font size="6"&gt;&lt;a href="http://www.doctor-c.net/2012-02-22/75/" target="_blank"&gt;猛击下载&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="6"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="6"&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/leleroyn/aggbug/2362746.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/leleroyn/archive/2012/02/22/2362746.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/leleroyn/archive/2011/08/23/2150408.html</id><title type="text">javascript 获取 URL 的 queryString</title><summary type="text">function GetQueryString(name) { var reg = new RegExp("(^|&amp;)" + name + "=([^&amp;]*)(&amp;|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; }</summary><published>2011-08-23T04:18:00Z</published><updated>2011-08-23T04:18:00Z</updated><author><name>Ants</name><uri>http://www.cnblogs.com/leleroyn/</uri></author><link rel="alternate" href="http://www.cnblogs.com/leleroyn/archive/2011/08/23/2150408.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/leleroyn/archive/2011/08/23/2150408.html"/><content type="html">&lt;p&gt;function GetQueryString(name) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var reg = new RegExp("(^|&amp;amp;)" + name + "=([^&amp;amp;]*)(&amp;amp;|$)");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var r = window.location.search.substr(1).match(reg);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (r != null) return unescape(r[2]); return null;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;/p&gt;&lt;img src="http://www.cnblogs.com/leleroyn/aggbug/2150408.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/leleroyn/archive/2011/08/23/2150408.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
