1.<meta http-equiv="X-UA-Compatible" content="IE=5" />像是使用了 Windows Internet Explorer 7 的 Quirks 模式,这与 Windows Internet Explorer 5 显示内容的方式很相似。 2.<meta http-equiv="X-UA-Compatible" content="IE=7" />无论页面是否包含 <!DOCTYPE> 指令,都像是使用了 Windows Internet Explorer 7 的标准模式。 3.<meta http-equiv="X-UA-Compatible" content="IE=8" /> 4.<meta http-equiv="X-UA-Compatible" content="edge" />Edge 模式通知 Windows Internet Explorer 以最高级别的可用模式显示内容,这实际上破坏了“锁定”模式。 5.<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />EmulateIE7 模式通知 Windows Internet Explorer 使用 <!DOCTYPE> 指令确定如何呈现内容。标准模式指令以Windows Internet Explorer 7 标准模式显示,而 Quirks 模式指令以 IE5 模式显示。与 IE7 模式不同,EmulateIE7 模式遵循 <!DOCTYPE> 指令。对于多数网站来说,它是首选的兼容性模式。
View DetailsHttpWebRequest 是 .net 基类库中的一个类,在命名空间 System.Net 下面,用来使用户通过 HTTP 协议和服务器交互。 HttpWebRequest 对 HTTP 协议进行了完整的封装,对 HTTP 协议中的 Header, Content, Cookie 都做了属性和方法的支持,很容易就能编写出一个模拟浏览器自动登录的程序。 程序使用 HTTP 协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成,下面对这两种方式进行一下说明: 1. GET 方式。 GET 方式通过在网络地址附加参数来完成数据的提交,比如在地址 http://www.google.com/webhp?hl=zh-CN 中,前面部分 http://www.google.com/webhp 表示数据提交的网址,后面部分 hl=zh-CN 表示附加的参数,其中 hl 表示一个键(key), zh-CN 表示这个键对应的值(value)。程序代码如下: HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.google.com/webhp?hl=zh-CN" );req.Method = "GET";using (WebResponse wr = req.GetResponse()){ //在这里对接收到的页面内容进行处理} 2. POST 方式。 POST 方式通过在页面内容中填写参数的方法来完成数据的提交,参数的格式和 GET 方式一样,是类似于 hl=zh-CN&newwindow=1 这样的结构。程序代码如下: string param = "hl=zh-CN&newwindow=1";byte[] bs = Encoding.ASCII.GetBytes(param); HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.google.com/intl/zh-CN/" );req.Method = "POST";req.ContentType = "application/x-www-form-urlencoded";req.ContentLength = bs.Length; using (Stream reqStream = req.GetRequestStream()){ reqStream.Write(bs, 0, bs.Length);}using (WebResponse wr = req.GetResponse()){ //在这里对接收到的页面内容进行处理} 在上面的代码中,我们访问了 www.google.com 的网址,分别以 GET 和 POST 方式提交了数据,并接收了返回的页面内容。然而,如果提交的参数中含有中文,那么这样的处理是不够的,需要对其进行编码,让对方网站能够识别。 3. 使用 GET 方式提交中文数据。 GET 方式通过在网络地址中附加参数来完成数据提交,对于中文的编码,常用的有 gb2312 和 utf8 两种,用 gb2312 方式编码访问的程序代码如下: Encoding myEncoding = Encoding.GetEncoding("gb2312");string address = "http://www.baidu.com/s?" + HttpUtility.UrlEncode("参数一", myEncoding) + "=" + HttpUtility.UrlEncode("值一", myEncoding);HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);req.Method = "GET";using (WebResponse wr = req.GetResponse()){ //在这里对接收到的页面内容进行处理} 在上面的程序代码中,我们以 GET 方式访问了网址 http://www.baidu.com/s ,传递了参数“参数一=值一”,由于无法告知对方提交数据的编码类型,所以编码方式要以对方的网站为标准。常见的网站中, www.baidu.com (百度)的编码方式是 gb2312, www.google.com (谷歌)的编码方式是 utf8。 4. 使用 POST 方式提交中文数据。 POST 方式通过在页面内容中填写参数的方法来完成数据的提交,由于提交的参数中可以说明使用的编码方式,所以理论上能获得更大的兼容性。用 gb2312 方式编码访问的程序代码如下: Encoding myEncoding = Encoding.GetEncoding("gb2312");string param = HttpUtility.UrlEncode("参数一", myEncoding) + "=" + HttpUtility.UrlEncode("值一", myEncoding) + "&" + HttpUtility.UrlEncode("参数二", myEncoding) + "=" + HttpUtility.UrlEncode("值二", myEncoding); byte[] postBytes = Encoding.ASCII.GetBytes(param); HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.baidu.com/s" );req.Method = "POST";req.ContentType = "application/x-www-form-urlencoded;charset=gb2312";req.ContentLength = postBytes.Length; using (Stream reqStream = req.GetRequestStream()){ reqStream.Write(bs, 0, bs.Length);}using (WebResponse wr = req.GetResponse()){ //在这里对接收到的页面内容进行处理} 从上面的代码可以看出, POST 中文数据的时候,先使用 UrlEncode 方法将中文字符转换为编码后的 ASCII 码,然后提交到服务器,提交的时候可以说明编码的方式,用来使对方服务器能够正确的解析。 以上列出了客户端程序使用 HTTP 协议与服务器交互的情况,常用的是 GET 和 POST 方式。现在流行的 WebService 也是通过 HTTP 协议来交互的,使用的是 POST 方法。与以上稍有所不同的是, WebService 提交的数据内容和接收到的数据内容都是使用了 XML 方式编码。所以, HttpWebRequest 也可以使用在调用 WebService 的情况下。 转自:http://www.cnblogs.com/webman/archive/2006/11/17/564106.html
View Details今天去中欧上班,真是扯淡。 老板不在,没有位置,没有电脑,真是悲催。 更郁闷的是有个SB却让我做主管,本来谈好的是总监。 人力说不用管他,面谈我的邱SIR直说抱歉;这的技术也像中业一样混乱。TMD的模式也一样,因为有个SB。 我是文明人,不想骂人。但现在有些人不厚道的人就会出现在那些不厚道的公司。今天的事对我来说是好事,总比上了一两月班再有状况要好。 中欧也够TMD的不厚道的,和中世商务一样,25号发工资,MD10号发工资已经是压工资10天了。最近几年工作过的公司还就北京西蔓和上海拜般还说的过去。可惜都不是内地的公司。由此可见内地和发达地区商业环境的差距。 不过,要感谢这一切的工作经历,让我更加坚信自己的理念,要想舒服的工作环境,要想工作在一个有理想、有作为的公司就只有自己做,需要自己去浇灌爱心。
View Details如果你是个Linux用户,你可能听说过不需要去对你的linux文件系统进行磁盘碎片整理。也许你注意到了,在Liunx安装发布包里没有磁盘碎片整理的工具。为什么会这样? 为了理解为什么Linux文件系统不需要磁盘碎片整——而Windows却需要——你需要理解磁盘碎片产生的原理,以及Linux和Windows文件系统它们之间工作原理的不同之处。 什么是磁盘碎片 很多Windows用户,甚至是没有经验的用户,都深信经常对文件系统进行碎片整理会提高计算机的速度。但并不是很多人知道这其中的原委。 简单的说,磁盘驱动器上有很多扇区,每个扇区都能存放一小段数据。文件,特别是大文件的存储需要占用很多不同的扇区。假设现在你有很多个文件存在的文件系统里,每个文件都会被存储在一系列连续的扇区里。后来你更新了其中的一个文件,它的体积变大了。文件系统会尝试把文件新增的部分存放到紧邻原始文件的扇区里。可不幸的是,它周边已经没连续的足够扇区空间了,文件需要被分割成数段——这些都在自动进行的。当从磁盘上读取这个文件时,磁盘磁头需要跨越数个不同的物理位置来读取各个扇区——这样会使速度降低。 磁盘碎片整理就是小心的移动这些小文件块来减少碎片,让每个文件都能连续的分布在磁盘上。 当然,如果是固态硬盘,那情况又不同了,固态硬盘没有机械移动,不应该进行碎片整理——对一个U盘进行碎片整理通常会降低它的寿命。在最新版的Windows系统里,你实际上不需要关心系统上的碎片——Windows会自动替你整理。 Windows文件系统的工作原理 微软老的FAT文件系统——最后一次使用是在Windows 98 和 Window ME上,可如今的U盘上还在使用它——并不会智能的管理文件。当你把一个文件存入FAT文件系统里时,系统会尽量的把它存到靠近磁盘开始的地方。当你存入第二个文件时,它会紧接着第一个文件——一个接着一个。当原始文件体积变大后,它们一定会产生碎片。根本没有留给它们增长的空间。 微软新的NTFS文件系统——使用在装有Windows XP和2000的PC机上——稍微智能了一点。它会在磁盘上在文件周围分配一些“缓冲”的空闲空间,尽管如此,任何Windows用户都会告诉你,经过一段时间的使用后,NTFS文件系统还是会形成碎片。 由于这些文件系统的工作原理,它们注定需要进行碎片整理来保持高性能。微软在它最新的视窗系统里通过在后台运行一个磁盘碎片整理进程来解决这个问题。 Linux文件系统的工作原理 Linux的ext2, ext3, 和 ext4 文件系统 ——Ubuntu和大多数最新的Linux发布版中使用的是ext4——采用了一种更聪明的方法来存放文件。与把多个文件并排放在磁盘上不同,Linux文件系统把所有文件都分散到了整个磁盘上,每两个文件之间都留有相当巨大的空闲空间。当文件被修改、体积增加时,它们通常有足够的空间来扩展。一旦有碎片产生时,文件系统会尝试移动整个文件来消除碎片,所以你不需要一个碎片整理工具。 因为这种工作方式,当磁盘快要装满时,你开始会发现有碎片开始产生。如果已用空间超过95%(甚至80%),你会发现碎片开始变多。但不管怎样,这个文件系统的设计会使正常情况下不产生碎片。 如果你在Linux系统上遇到了磁盘碎片问题,你很可能需要一个更大的硬盘了。如果你真想整理一个文件系统,这最简单的方式也许是最可靠的方式:把文件从这个分区里考出,删除这些文件,然后考回这些文件。当你把文件考回硬盘时,文件系统会智能为文件分配存储空间。 你可以使用 fsck 命令来查看Linux文件系统上的磁盘碎片情况——在输出结果里寻找“non-contiguous inodes”信息。 [英文原文:Why Linux Doesn’t Need Defragmenting ]
View Details1.Default.aspx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ScriptWebSerivce" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title></title> <script type="text/javascript"> function ShowResult(res) { alert(res);} </script> </head> <body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" runat="server"> <Services> <asp:ServiceReference Path="MyWebService.asmx" /> </Services> </asp:ScriptManager> <script type="text/javascript"> Ajax.MyWebService.GetTotal(5, 4, ShowResult, null, "abc"); </script> </div> </form> </body> </html> |
2.MyWebService.asmx.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Script.Services; namespace Ajax { /// <summary> /// MyWebService 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] //[System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 [ScriptService] public class MyWebService : System.Web.Services.WebService { public MyWebService() { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public int GetTotal(int x, int y) { return x + y; } } } |
注意:此方法只适合在同一个域下调用。
View Details1. 改变 在软件开发中,没有什么事情会一直停滞不前。现在你正在开发的东西,只是软件的其中一个版本,未来随时可能发生变化。 变化是在软件开发中最常见的事情,你最好接受这一事实。一种好的做法是,使你的代码更加模块化,这样在未来需求改变时,可以容易地进行更改。 遵循DRY(Don't Repeat Yourself)和YAGNI(You Aren't Gonna Need It)原则。经常看看你的代码,相信自己可以做得更好。立即采取行动,并进行重构,你等的时间越长,代码维护起来就越艰难。有可能会混乱到你无法处理。 好代码是很容易改变的代码。代码会不断改变,直到它不再容易改变为止。那时所有的代码已经变成了糟糕的代码。—— 匿名 2. 移除死代码和注释掉的代码 在开发中,往往会遇到一些无用的或注释掉的代码,你可能不愿意删除,因为你不知道它们以后会不会排上用场。 立刻删除了吧!因为有版本管理工具来负责记住这些代码。现实中太多的项目充斥着大量注释掉的代码,如果不需要,就删除吧,不要害怕。 完美,不是在没有东西需要补充的时候,而是在没有东西需要去掉的时候。——《小王子》 3. 犯错误 没有人是完美的,每个人都会犯错误。犯错是一个学习的过程。如果你不承认任何错误,你将不会有任何改善。 所以,每当你犯了一个错误的时候,你要从中学到一些新的东西,来提高你的知识。此外,不要隐藏自己的错误,或为它们感到羞愧,诚实、坦率地说出你的错误,为自己或他人作前车之鉴。批评与自我批评是推动一个成功团队向前的重要工具。 从未犯过错误的人,是没有机会尝试新东西的。—— 阿尔伯特•爱因斯坦 4. 向其他人展示你的代码 你是不是害怕其他人审查你的代码?为什么呢?你没有尽全力写好吗?你害怕犯任何错误吗? 你不应该这样,代码审查中发现的每一处错误都可以为你积累一些经验,在以后的编码中,你将不会再犯同样的错误。因此,你应该为你写的代码感到骄傲,不要害怕别人看到。 5. 失败 这是最重要的一个。如果你害怕失败,那么你将永远无法解决手头的问题。永远不要放弃希望,把它当作是一个挑战。尝试从另一个角度看东西。成功地解决难题之后,会让你更加强大。 我并没有失败,我刚刚发现了1万种无法正常工作的方式。——托马斯•爱迪生 6. 你自己代码的稳定性 你向你的老板或客户展示你的项目时,你开始担心“能正常运行吗?希望我在开发过程中没有遗漏什么。” 这是一个不好的征兆,你不应该担心。你应该尽早测试你的项目。当然,你无法100%肯定你的作品是完美的,但通过编写自动化测试,可以大大提高你对你的代码的信任度。 7. 新的、复杂的技术 有些开发人员很懒惰,经常沉浸在他们的“Good Old”技术中。要知道,IT正在以令人难以置信的速度发展,每一天都会有新的、更好的技术出现。 因此,开发人员要以开放的态度,多学习一些东西,阅读一些博客,使你不至于与新技术脱节。如果技术/框架满足你的需求,尝试一下也无妨。 8. 项目时间压力 别让时间压力毁了项目的质量。保证你的代码干净、稳定,这是你的工作。高质量也意味着需要深思熟虑的决策和开发时间,有时你需要争取一下。你的客 户期待你用100%(甚至120%)的努力来完成一个可维护的、最先进的产品,如果最终你交付一个次品,那么你后面的时间将被各种需求变更、维护工作占 用,并且老板和客户对你的信任度也会降低。 在开发中,你节省的时间往往会为你带来更多的技术债务。因此,当涉及到项目质量时,拿出你的勇气,诚实地与你的老板谈谈。 编程就像性一样:一次犯错,终生维护。——Michael Sinz 英文原文:8 Things you should not be afraid of as a Developer/iteye翻译 转自:http://www.oschina.net/news/38760/8-things-you-should-not-be-afraid-of-as-developer
View DetailsSystem.Web.Caching 命名空间提供用于缓存服务器上常用数据的类。此命名空间包括 Cache 类,该类是一个字典,您可以在其中存储任意数据对象,如哈希表和数据集。它还为这些对象提供了失效功能,并为您提供了添加和移除这些对象的方法。您还可以添加依赖于其他文件或缓存项的对象,并在从 Cache对象中移除对象时执行回调以通知应用程序。
1 |
<div style="margin:0px;padding:0px;line-height:21px;"><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><summary></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"> 获取当前应用程序指定CacheKey的Cache对象值 <br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"></summary></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="CacheKey"></span><span style="margin:0px;padding:0px;color:#008000;">索引键值</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><returns></span><span style="margin:0px;padding:0px;color:#008000;">返回缓存对象</span><span style="margin:0px;padding:0px;color:#808080;"></returns></span><span style="margin:0px;padding:0px;color:#808080;"> </span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">public</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">static</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">object</span><span style="margin:0px;padding:0px;color:#000000;"> GetCache(</span><span style="margin:0px;padding:0px;color:#0000ff;">string</span><span style="margin:0px;padding:0px;color:#000000;"> CacheKey)<br style="margin:0px;padding:0px;line-height:10px;" />{<br style="margin:0px;padding:0px;line-height:10px;" /> System.Web.Caching.Cache objCache </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> HttpRuntime.Cache;<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">return</span><span style="margin:0px;padding:0px;color:#000000;"> objCache[CacheKey];<br style="margin:0px;padding:0px;line-height:10px;" />}<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><summary></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"> 设置当前应用程序指定CacheKey的Cache对象值<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"></summary></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="CacheKey"></span><span style="margin:0px;padding:0px;color:#008000;">索引键值</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="objObject"></span><span style="margin:0px;padding:0px;color:#008000;">缓存对象</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">public</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">static</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">void</span><span style="margin:0px;padding:0px;color:#000000;"> SetCache(</span><span style="margin:0px;padding:0px;color:#0000ff;">string</span><span style="margin:0px;padding:0px;color:#000000;"> CacheKey, </span><span style="margin:0px;padding:0px;color:#0000ff;">object</span><span style="margin:0px;padding:0px;color:#000000;"> objObject)<br style="margin:0px;padding:0px;line-height:10px;" />{<br style="margin:0px;padding:0px;line-height:10px;" /> System.Web.Caching.Cache objCache </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> HttpRuntime.Cache;<br style="margin:0px;padding:0px;line-height:10px;" /> objCache.Insert(CacheKey, objObject);<br style="margin:0px;padding:0px;line-height:10px;" />}<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><summary></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"> 设置当前应用程序指定CacheKey的Cache对象值<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"></summary></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="CacheKey"></span><span style="margin:0px;padding:0px;color:#008000;">索引键值</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="objObject"></span><span style="margin:0px;padding:0px;color:#008000;">缓存对象</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="absoluteExpiration"></span><span style="margin:0px;padding:0px;color:#008000;">绝对过期时间</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="slidingExpiration"></span><span style="margin:0px;padding:0px;color:#008000;">最后一次访问所插入对象时与该对象过期时之间的时间间隔</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#808080;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">public</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">static</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">void</span><span style="margin:0px;padding:0px;color:#000000;"> SetCache(</span><span style="margin:0px;padding:0px;color:#0000ff;">string</span><span style="margin:0px;padding:0px;color:#000000;"> CacheKey, </span><span style="margin:0px;padding:0px;color:#0000ff;">object</span><span style="margin:0px;padding:0px;color:#000000;"> objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)<br style="margin:0px;padding:0px;line-height:10px;" />{<br style="margin:0px;padding:0px;line-height:10px;" /> System.Web.Caching.Cache objCache </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> HttpRuntime.Cache;<br style="margin:0px;padding:0px;line-height:10px;" /> objCache.Insert(CacheKey, objObject, </span><span style="margin:0px;padding:0px;color:#0000ff;">null</span><span style="margin:0px;padding:0px;color:#000000;">, absoluteExpiration, slidingExpiration);<br style="margin:0px;padding:0px;line-height:10px;" />} <br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">protected</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">void</span><span style="margin:0px;padding:0px;color:#000000;"> Page_Load(</span><span style="margin:0px;padding:0px;color:#0000ff;">object</span><span style="margin:0px;padding:0px;color:#000000;"> sender, EventArgs e)<br style="margin:0px;padding:0px;line-height:10px;" />{<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">string</span><span style="margin:0px;padding:0px;color:#000000;"> CacheKey </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#800000;">cachetest</span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#000000;">;<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">object</span><span style="margin:0px;padding:0px;color:#000000;"> objModel </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> GetCache(CacheKey);</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">从缓存中获取</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">if</span><span style="margin:0px;padding:0px;color:#000000;"> (objModel </span><span style="margin:0px;padding:0px;color:#000000;">==</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">null</span><span style="margin:0px;padding:0px;color:#000000;">)</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">缓存里没有</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"> {<br style="margin:0px;padding:0px;line-height:10px;" /> objModel </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> DateTime.Now;</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">把当前时间进行缓存</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">if</span><span style="margin:0px;padding:0px;color:#000000;"> (objModel </span><span style="margin:0px;padding:0px;color:#000000;">!=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">null</span><span style="margin:0px;padding:0px;color:#000000;">)<br style="margin:0px;padding:0px;line-height:10px;" /> {<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">int</span><span style="margin:0px;padding:0px;color:#000000;"> CacheTime </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#800080;">30</span><span style="margin:0px;padding:0px;color:#000000;">;</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">缓存时间30秒</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"> SetCache(CacheKey, objModel, DateTime.Now.AddSeconds(CacheTime), TimeSpan.Zero);</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">写入缓存</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"> }<br style="margin:0px;padding:0px;line-height:10px;" /> }<br style="margin:0px;padding:0px;line-height:10px;" /> Label1.Text </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> objModel.ToString();<br style="margin:0px;padding:0px;line-height:10px;" />}</span></div> |
以上几种方法都很好的解决了数据缓存的问题,但由一个最大的问题是当数据发生变化了,而缓存里还是过期的数据,只有等缓存过期后才会重新获取最新的数据,这样的话,很多时候用户获取的数据都是和实际数据不一致的过期数据。这同样给用户造成了比较大的麻烦,怎么办呢?接着往下看。 转自:http://kb.cnblogs.com/page/69725/
View Details更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能。但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据就是老的数据,从而导致数据的不一致。那有没有办法做到,数据如果不变化,用户就一直从缓存中取数据,一旦数据变化,系统能自动更新缓存中的数据,从而让用户得到更好的用户体验。 答案是肯定的!.NET已经为我们提供了这样一种非常好的解决方法:SqlCacheDependency数据库缓存依赖。 实现步骤: 下面就让我们看一下如何实现数据库缓存依赖功能: 第一步: 修改web.config,让项目启用SqlCacheDependency 。 将下列代码加入web.config的<system.web>节:
1 |
<div style="margin:0px;padding:0px;line-height:21px;"><span style="margin:0px;padding:0px;color:#0000ff;"><?</span><span style="margin:0px;padding:0px;color:#ff00ff;">xml version="1.0"</span><span style="margin:0px;padding:0px;color:#0000ff;">?></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">configuration</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">appSettings</span><span style="margin:0px;padding:0px;color:#0000ff;">/></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">connectionStrings</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">add </span><span style="margin:0px;padding:0px;color:#ff0000;">name</span><span style="margin:0px;padding:0px;color:#0000ff;">="strcodematic"</span><span style="margin:0px;padding:0px;color:#ff0000;"> connectionString</span><span style="margin:0px;padding:0px;color:#0000ff;">="data source=127.0.0.1;initial catalog=codematic;user id=sa;password="</span><span style="margin:0px;padding:0px;color:#ff0000;"> providerName</span><span style="margin:0px;padding:0px;color:#0000ff;">="System.Data.SqlClient"</span><span style="margin:0px;padding:0px;color:#ff0000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">/></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"></</span><span style="margin:0px;padding:0px;color:#800000;">connectionStrings</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">system.web</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">caching</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">sqlCacheDependency </span><span style="margin:0px;padding:0px;color:#ff0000;">enabled</span><span style="margin:0px;padding:0px;color:#0000ff;">="true"</span><span style="margin:0px;padding:0px;color:#ff0000;"> pollTime</span><span style="margin:0px;padding:0px;color:#0000ff;">="6000"</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">databases</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /> </span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">add </span><span style="margin:0px;padding:0px;color:#ff0000;">name</span><span style="margin:0px;padding:0px;color:#0000ff;">="codematic"</span><span style="margin:0px;padding:0px;color:#ff0000;"> connectionStringName</span><span style="margin:0px;padding:0px;color:#0000ff;">="strcodematic"</span><span style="margin:0px;padding:0px;color:#ff0000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">/></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"></</span><span style="margin:0px;padding:0px;color:#800000;">databases</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"></</span><span style="margin:0px;padding:0px;color:#800000;">sqlCacheDependency</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"></</span><span style="margin:0px;padding:0px;color:#800000;">caching</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">compilation </span><span style="margin:0px;padding:0px;color:#ff0000;">debug</span><span style="margin:0px;padding:0px;color:#0000ff;">="true"</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"></</span><span style="margin:0px;padding:0px;color:#800000;">compilation</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"><</span><span style="margin:0px;padding:0px;color:#800000;">authentication </span><span style="margin:0px;padding:0px;color:#ff0000;">mode</span><span style="margin:0px;padding:0px;color:#0000ff;">="Windows"</span><span style="margin:0px;padding:0px;color:#0000ff;">/></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"></</span><span style="margin:0px;padding:0px;color:#800000;">system.web</span><span style="margin:0px;padding:0px;color:#0000ff;">></span><span style="margin:0px;padding:0px;color:#000000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;"></</span><span style="margin:0px;padding:0px;color:#800000;">configuration</span><span style="margin:0px;padding:0px;color:#0000ff;">></span></div> |
这里的connectionStringName指定了在<connectionStrings>中添加的某一个连接字符串。name则是为该SqlCacheDependency起的名字,这个名字将在第3步中用到。 SqlCacheDependency类会自动完成对此配置节信息的读取以建立和数据库之间的联系。 注意:在<databases>节的<add name="codematic" connectionStringName="strcodematic"/>中的name属性值必须和第三步的Page_Load代码中System.Web.Caching.SqlCacheDependency("codematic","P_Product"); 中的第一个参数(数据库名称)相一致。 第二步:执行下述命令,为 数据库启用缓存依赖。 如果要配置SqlCacheDependency,则需要以命令行的方式执行。 aspnet_regsql.exe工具位于Windows\\Microsoft.NET\\Framework\\[版本]文件夹中。 aspnet_regsql -C "data source=127.0.0.1;initial catalog=codematic;user id=sa;password=" -ed -et -t "P_Product" 参数-C后面的字符串是连接字符串(请替换成自己所需要的值), 参数-t后面的字符串是数据表的名字。 运行结果如图15-3所示: 图15-3 启用数据库缓存依赖 命令执行后,在指定的数据库中会多出一个AspNet_SqlCacheTablesForChangeNotification表。 注意: 要使得7.0或者2000版本以上的SQLServer支持SqlCacheDependency特性,需要对数据库服务器执行相关的配置。 有两种方法配置SQLServer: 一使用aspnet_regsql命令行工具, 二使用SqlCacheDependencyAdmin类。 例如: aspnet_regsql -S "server"-E -d "database"–ed 或者 aspnet_regsql -S "server"-E -d "database"-et -t "table" 如果是Sql验证的话要把-E换成,-U (用户名),-P (密码) 以下是该工具的命令参数说明: -? 显示该工具的帮助功能; -S 后接的参数为数据库服务器的名称或者IP地址; -U 后接的参数为数据库的登陆用户名; -P 后接的参数为数据库的登陆密码; -E 使用当前登录用户的 Windows 集成认证进行身份验证。 -d 后接参数为对哪一个数据库采用SqlCacheDependency功能; -C 连接数据库的连接字符串。如果您指定服务器(-S)和登录(-U和-P,或 -E)信息,则此选项不是必需的,因为连接字符串已经包含这些信息。 -t 后接参数为对哪一个表采用SqlCacheDependency功能; -ed 允许对数据库使用SqlCacheDependency功能; -dd 禁止对数据库采用SqlCacheDependency功能; -et 允许对数据表采用SqlCacheDependency功能; -dt 禁止对数据表采用SqlCacheDependency功能; -lt 列出当前数据库中有哪些表已经采用sqlcachedependency功能。 第三步:在代码中使用缓存,并为其设置SqlCacheDependency依赖:
1 |
<div style="margin:0px;padding:0px;line-height:21px;"><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><summary></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"> 获取当前应用程序指定CacheKey的Cache对象值<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"></summary></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="CacheKey"></span><span style="margin:0px;padding:0px;color:#008000;">索引键值</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><returns></span><span style="margin:0px;padding:0px;color:#008000;">返回缓存对象</span><span style="margin:0px;padding:0px;color:#808080;"></returns></span><span style="margin:0px;padding:0px;color:#808080;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">public</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">static</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">object</span><span style="margin:0px;padding:0px;color:#000000;"> GetCache(</span><span style="margin:0px;padding:0px;color:#0000ff;">string</span><span style="margin:0px;padding:0px;color:#000000;"> CacheKey)<br style="margin:0px;padding:0px;line-height:10px;" />{<br style="margin:0px;padding:0px;line-height:10px;" /> System.Web.Caching.Cache objCache </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> HttpRuntime.Cache;<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">return</span><span style="margin:0px;padding:0px;color:#000000;"> objCache[CacheKey];<br style="margin:0px;padding:0px;line-height:10px;" />}<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><summary></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"> 设置以缓存依赖的方式缓存数据<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"></summary></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="CacheKey"></span><span style="margin:0px;padding:0px;color:#008000;">索引键值</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="objObject"></span><span style="margin:0px;padding:0px;color:#008000;">缓存对象</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#808080;">///</span><span style="margin:0px;padding:0px;color:#008000;"></span><span style="margin:0px;padding:0px;color:#808080;"><param name="cacheDepen"></span><span style="margin:0px;padding:0px;color:#008000;">依赖对象</span><span style="margin:0px;padding:0px;color:#808080;"></param></span><span style="margin:0px;padding:0px;color:#808080;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">public</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">static</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">void</span><span style="margin:0px;padding:0px;color:#000000;"> SetCache(</span><span style="margin:0px;padding:0px;color:#0000ff;">string</span><span style="margin:0px;padding:0px;color:#000000;"> CacheKey, </span><span style="margin:0px;padding:0px;color:#0000ff;">object</span><span style="margin:0px;padding:0px;color:#000000;"> objObject, System.Web.Caching.CacheDependency dep)<br style="margin:0px;padding:0px;line-height:10px;" />{<br style="margin:0px;padding:0px;line-height:10px;" /> System.Web.Caching.Cache objCache </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> HttpRuntime.Cache;<br style="margin:0px;padding:0px;line-height:10px;" /> objCache.Insert(<br style="margin:0px;padding:0px;line-height:10px;" /> CacheKey,<br style="margin:0px;padding:0px;line-height:10px;" /> objObject,<br style="margin:0px;padding:0px;line-height:10px;" /> dep,<br style="margin:0px;padding:0px;line-height:10px;" /> System.Web.Caching.Cache.NoAbsoluteExpiration,</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">从不过期</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"> System.Web.Caching.Cache.NoSlidingExpiration,</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">禁用可调过期</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"> System.Web.Caching.CacheItemPriority.Default,<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">null</span><span style="margin:0px;padding:0px;color:#000000;">);<br style="margin:0px;padding:0px;line-height:10px;" />}<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">protected</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">void</span><span style="margin:0px;padding:0px;color:#000000;"> Page_Load(</span><span style="margin:0px;padding:0px;color:#0000ff;">object</span><span style="margin:0px;padding:0px;color:#000000;"> sender, EventArgs e)<br style="margin:0px;padding:0px;line-height:10px;" />{<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">string</span><span style="margin:0px;padding:0px;color:#000000;"> CacheKey </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#800000;">cachetest</span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#000000;">;<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">object</span><span style="margin:0px;padding:0px;color:#000000;"> objModel </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> GetCache(CacheKey);</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">从缓存中获取</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">if</span><span style="margin:0px;padding:0px;color:#000000;"> (objModel </span><span style="margin:0px;padding:0px;color:#000000;">==</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">null</span><span style="margin:0px;padding:0px;color:#000000;">)</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">缓存里没有</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"> {<br style="margin:0px;padding:0px;line-height:10px;" /> objModel </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> GetData();</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">把当前时间进行缓存</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">if</span><span style="margin:0px;padding:0px;color:#000000;"> (objModel </span><span style="margin:0px;padding:0px;color:#000000;">!=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">null</span><span style="margin:0px;padding:0px;color:#000000;">)<br style="margin:0px;padding:0px;line-height:10px;" /> {<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">依赖数据库codematic中的P_Product表变化 来更新缓存</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"> System.Web.Caching.SqlCacheDependency dep </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">new</span><span style="margin:0px;padding:0px;color:#000000;"> System.Web.Caching.SqlCacheDependency(</span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#800000;">codematic</span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#000000;">, </span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#800000;">P_Product</span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#000000;">);<br style="margin:0px;padding:0px;line-height:10px;" /> SetCache(CacheKey, objModel, dep);</span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">写入缓存</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#000000;"> }<br style="margin:0px;padding:0px;line-height:10px;" /> }<br style="margin:0px;padding:0px;line-height:10px;" /><br style="margin:0px;padding:0px;line-height:10px;" /> GridView1.DataSource </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"> (DataSet)objModel;<br style="margin:0px;padding:0px;line-height:10px;" /> GridView1.DataBind();<br style="margin:0px;padding:0px;line-height:10px;" />}<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#008000;">//</span><span style="margin:0px;padding:0px;color:#008000;">查询数据</span><span style="margin:0px;padding:0px;color:#008000;"><br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">private</span><span style="margin:0px;padding:0px;color:#000000;"> DataSet GetData()<br style="margin:0px;padding:0px;line-height:10px;" />{<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">string</span><span style="margin:0px;padding:0px;color:#000000;"> conString </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#800000;">data source=127.0.0.1;initial catalog=codematic;user id=sa;password=</span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#000000;">;<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">string</span><span style="margin:0px;padding:0px;color:#000000;"> strSQL </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#800000;">SELECT * FROM P_Product</span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#000000;">;<br style="margin:0px;padding:0px;line-height:10px;" /> SqlConnection myConnection </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">new</span><span style="margin:0px;padding:0px;color:#000000;"> SqlConnection(conString);<br style="margin:0px;padding:0px;line-height:10px;" /> DataSet ds </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">new</span><span style="margin:0px;padding:0px;color:#000000;"> DataSet();<br style="margin:0px;padding:0px;line-height:10px;" /> myConnection.Open();<br style="margin:0px;padding:0px;line-height:10px;" /> SqlDataAdapter adapter </span><span style="margin:0px;padding:0px;color:#000000;">=</span><span style="margin:0px;padding:0px;color:#000000;"></span><span style="margin:0px;padding:0px;color:#0000ff;">new</span><span style="margin:0px;padding:0px;color:#000000;"> SqlDataAdapter(strSQL, myConnection);<br style="margin:0px;padding:0px;line-height:10px;" /> adapter.Fill(ds, </span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#800000;">Product</span><span style="margin:0px;padding:0px;color:#800000;">"</span><span style="margin:0px;padding:0px;color:#000000;">);<br style="margin:0px;padding:0px;line-height:10px;" /> myConnection.Close();<br style="margin:0px;padding:0px;line-height:10px;" /></span><span style="margin:0px;padding:0px;color:#0000ff;">return</span><span style="margin:0px;padding:0px;color:#000000;"> ds;<br style="margin:0px;padding:0px;line-height:10px;" />}</span></div> |
[…]
View Details上周为Edu 2.0研究中心申请的空间今天批准下来了,所以中午抽空将站点从内网服务器迁移出去了。因为这过程中起了一点波折,所以还是觉得有必要记一笔,以后也可以有个参考。 以下基本是按本人操作的过程,因为之前并没经验,未必是最佳实践,看客自行斟酌,有不准确的,或者有更好的解决方法的,不妨也可以在评论中给提个建议: 1、大约12点收到FTP、MySQL帐户信息,打算开始迁移,所以在微博里放出风声,告知我们的成员在接下来的3个小时内将执行系统迁移,原部署于内网的系统会不可访问; 2、在本地服务器上,使用PHPMyAdmin,选中Drupal使用的数据库,选择export,将数据记录以默认格式导出为tempDrupal.SQL;如果你原先没有配置phpmyadmin,那么使用前需要修改phpmyadmin\libraries\config.default.php文件配置以下基本参数: $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['user'] = 'MYSQL数据库帐号'; $cfg['Servers'][$i]['password'] = 'MYSQL数据库密码'; 3.敲以下命令停止Apache和MySQL服务(具体服务名称以系统中配置的为准),用FTP帐号将原先的Drupal目录中的所有文件传送到目标空间中 net stop apache2.2 net stop mysql 4. 在目标空间上同样上传并配置一个phpmyadmin,登录后选择import,将之前导出的tempDrupal.SQL导入数据库中,这时在phpmyadmin中就可以看到数据库的内部结构了。 5、修改目标空间中的Drupal配置文件,即/sites/default/settings.php。将其中的数据库信息,设置为符合目标空间的值,这些设置语句形如下文。顺便也可以将系统的$base_url 、$cookie_domain均设置为站点的域名,例如“ 'http://et2x.zjnu.edu.cn';”(注意不带“/”) $databases = array ( 'default' => array ( 'default' => array ( 'database' => '数据库名称', 'username' => '数据库用户名', 'password' => '数据库密码', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ),); 6、到这一步时访问install.php,执行更新脚本,至此,迁移后的空间应该可以显示出来。如果在执行这一脚本时提示没有权限,可以在settings.php中设置 “$update_free_access = TRUE; ”(但执行完后一定要记得改回FALSE或注释掉) 7、不过我在此步登录之后做了一个手欠的事,顺手在主题列表选择另一个主题,结果系统报出一个“failed to open stream: "DrupalTemporaryStreamWrapper::stream_open"”的错误,愣了一会才意识到系统中配置的临时文件夹还没改,在“配置”/“媒体”/“文件系统”中更改了就恢复原先的主题风格了。 […]
View DetailsSQL Server 2008分为SQL Server 2008企业版、标准版、工作组版、Web版、开发者版、Express版、Compact 3.5版,其功能和作用也各不相同,其中SQL Server 2008 Express版是免费版本。企业版/开发版下载+安装+破解说明:SQL Server 2008正式版 下载 安装 指南 (序列号)+(破解) SQL Server 2008企业版 SQL Server 2008企业版是一个全面的数据管理和业务智能平台,为关键业务应用提供了企业级的可扩展性、数据仓库、安全、高级分析和报表支持。这一版本将为你提供更加坚固的服务器和执行大规模在线事务处理。这个是最牛B的版本。 SQL Server 2008标准版 SQL Server 2008标准版是一个完整的数据管理和业务智能平台,为部门级应用提供了最佳的易用性和可管理特性。 SQL Server 2008工作组版 SQL Server 2008工作组版是一个值得信赖的数据管理和报表平台,用以实现安全的发布、远程同步和对运行分支应用的管理能力。 这一版本拥有核心的数据库特性,可以很容易地升级到标准版或企业版。 SQL Server 2008 Web版 SQL Server 2008 Web版是针对运行于Windows服务器中要求高可用、面向Internet Web服务的环境而设计。这一版本为实现低成本、大规模、高可用性的Web应用或客户托管解决方案提供了必要的支持工具。 SQL Server 2008开发者版 SQL Server 2008开发者版允许开发人员构建和测试基于SQL Server的任意类型应用。这一版本拥有所有企业版的特性,但只限于在开发、测试和演示中使用。基于这一版本开发的应用和数据库可以很容易地升级到企业版。 SQL Server 2008 Express版 SQL Server 2008 Express版是SQL Server的一个免费版本,它拥有核心的数据库功能,其中包括了SQL Server 2008中最新的数据类型,但它是SQL Server的一个微型版本。这一版本是为了学习、创建桌面应用和小型服务器应用而发布的,也可供ISV再发行使用。 SQL Server Compact 3.5版 SQL Server Compact是一个针对开发人员而设计的免费嵌入式数据库,这一版本的意图是构建独立、仅有少量连接需求的移动设备、桌面和Web客户端应用。 SQL Server Compact可以运行于所有的微软Windows平台之上,包括Windows XP和Windows Vista操作系统,以及Pocket PC和SmartPhone设备。 转自:http://www.cnblogs.com/wallis0922/archive/2010/08/19/1803252.html
View Details