• 创建:2006-6-8
  • 文章:277
  • 评论:342
  • 访问:854085
  •  

2006-8-30 10:52 | 启用IIS的Gzip压缩功能

现代的浏览器IE6和Firefox都支持客户端Gzip,也就是说,在服务器上的网页,传输之前,先使用Gzip压缩再传输给客户端,客户端接收之后由浏览器解压显示,这样虽然稍微占用了一些服务器和客户端的CPU,但是换来的是更高的带宽利用率。对于纯文本来讲,压缩率是相当可观的。如果每个用户节约50%的带宽,那么你租用来的那点带宽就可以服务多一倍的客户了。
IIS6已经内建了Gzip压缩的支持,可惜,没有设置更好的管理界面。所以要打开这个选项,还要费些功夫。
首先,如果你需要压缩静态文件(HTML),需要在硬盘上建一个目录,并给它“IUSR_机器名”这个用户的写权限。如果压缩动态文件(PHP,asp,aspx)就不需要了,因为它的页面是每次都动态生成的,压缩完就放弃。然后在IIS管理器中,“网站”上面右键-属性,不是下面的某个站点,而是整个网站。进入&l……
编辑 | 阅读全文(3407) | 回复(2),Jason Cui 发表于 2006-8-30 10:52
asp.net用到现在,有几个实在无法忍受的问题:
1.每次更新程序,都会启动一大堆Csc.exe进程来编译新的文件,所有的DLL我都编译过了,为什么要重新编译一次呢?而且在编译完成之前,每一个新的连接都会启动一个新的进程进行编译,这些进程之间又会互相抢占资源,造成堵塞,因此,每次更新程序,都要几分钟的时间才能启动起来。不知道当初设计的时候为什么不让它们等待一个进程编译完成以后大家一起使用?这样只需要十几秒就可以了。而编译完成之后,由于同时编译,可能还会带来另一个问题,就是会提示dll文件找不到,又需要重新完整编译一遍再上传,并清空dll缓存才可以。
据说asp.net 2.0里面已经有完整发布模式编译了,可以在本地进行完整编译,上传以后就可以直接用。有机会尝试一下。
今天发现另一个新问题,编译完成以后内存占用会上升一倍,而且不会降下来。内存的持续升高会带来网站Down掉,或者反应缓慢。又要重启……
编辑 | 阅读全文(3577) | 回复(1),Jason Cui 发表于 2006-8-28 13:43

2006-8-20 19:48 | [推荐]好东西,大家用

长期以来,IIS的用户都非常希望能够得到像Apache的Mod_Rewrite那样的路径重写模块,否则,像ASP这样的程序除了使用静态地址生成,没有任何办法实现伪静态地址,论坛根本就不可能做到。而ASP.net虽然有HttpModule的实现方式,但是实现起来限制多多,而且性能也是个大问题。如果要使用这个模块,需要在站点上加上"通配符应用程序映射",加上以后,VS将无法使用。因此,在开发环境下没有办法使用伪静态目录。虽然已经有公司实现了Mod_Rewrite的功能,但是一直是收费的,而且安装使用复杂。看着PHP的开发人员将整个论坛都变成静态地址,难道我们只有羡慕的份吗?
现在,我们终于有了完美的实现方式,http://cheeso.members.winisp.net/IIRF.aspx,使用C++实现IIS的ISAPI模块,可以加载到整个系统或者虚拟站点上,实现机制同A……
编辑 | 阅读全文(3227) | 回复(0),Jason Cui 发表于 2006-8-20 19:48

微软官方代码,描述了安全编程的最佳方式,包括登录处理,用户信息处理,交易信息处理。

编辑 | 阅读全文(3043) | 回复(1),Jason Cui 发表于 2006-8-4 10:28
今天在做在线用户的时候突然发现一个问题,在所有的页面调用之前加入一个写入用户当前位置的过程,结果这个过程始终只写Default.aspx,无论点击的是哪个页面。跟踪了一通没有发现问题所在,结果被误导了。在首页上点击任何一个页面,最后首页都会被调用一次。而如果直接刷新首页,在生成的时候会连续调用两次Page_Load,这也就意味着整个网页要生成两次,也就是说完全的多了一次运算。不看不知道,一看吓一跳,所有的首页都有这个问题。而且还有一个莫名奇妙的问题,打开其它页面的时候,首页也会被调用一次。转来转去搞了一个下午,试了几个论坛上找到的解释也都不对。
晚上回家接着搞,把所有的Redirect查了一篇,没有找到任何问题。把页面模板里面的东西删的差不多了,也没发现问题所在。都是因为一开始没有发现是Default.aspx的差别,而对比页面是About.aspx。后来终于在微软的论坛上看到一句提示,如果……
编辑 | 阅读全文(2895) | 回复(1),Jason Cui 发表于 2006-7-26 21:8
Jeff Prosise在《MSDN杂志》2006年7月期上的文章历数ASP.NET应用中常见的,容易出错,影响性能和扩缩性的潜在问题
Keep Sites Running Smoothly By Avoiding These 10 Common ASP.NET Pitfalls
http://msdn.microsoft.com/msdnmag/issues/06/07/WebAppFollies/
1。设置输出缓存的用户控件,如果用LoadControl动态装载,LoadControl返回对象属于PartialCachingControl类,其中的CachedControl也许并不存在,无法转换成原用户控件对象类
2。在 IIS 6.0 中,在设置kernel模式输出缓存的情形下,OutputCacheModule模块有时会保留缓存输出的Set-Cookie header,导致会话串门(cro……
编辑 | 阅读全文(2574) | 回复(0),Jason Cui 发表于 2006-7-25 23:14
asp.net经常莫名奇妙的遇到一个奇怪的问题,某些页面(随机的)会出现无法打开的情况,错误显示为某个dll找不到。而且问题越来越严重。每次更新服务器上的DLL文件,进程里面会突然多出N多个csc.exe,狂占CPU,要经过大概2分钟程序才能重新启动起来,然后就会有一些页面出现那个问题。一开始发现重新编译上传可以解决问题,但是后来发现重新上传以后其实这个页面好了,但是另外的某个页面就会再出问题。
后来搜索了一下解决方案,找到一个办法,到C:\\Windows\\Microsoft .Net\\下面的缓存目录下把该程序的缓存文件删掉。删这些文件要停掉IIS服务才可以,后来发现上传步骤变为:先停止服务,删除缓存文件,更新dll,启动服务,不但没有了前面那个问题,启动速度也快了很多,整个过程不会多于一分钟。
今天再一次上传以后又出现一个新问题,发邮件的部分出错,错误类型就是“类型初始值设定项引发异常……
编辑 | 阅读全文(8247) | 回复(2),Jason Cui 发表于 2006-7-13 23:43

今天又浪费了一个多小时,被NHibernate给害的。

使用了Ajax技术保存页面上的窗体数据,以前一直是文本框,从来没有遇到过问题,今天换上了文本区域,并且使用了TinyMCE,结果保存进数据库的始终就只有前面一半的内容。开始以为是TinyMCE和Ajax的问题,费了近半个小时发现服务器上收到的数据是远大于数据库里保存的内容的。

后来再搜索NHibernate,在一个日本人的网站上终于找到点线索,NHibernate在默认情况下把String转换成NVarchar来保存进数据库,即使数据库是使用NText的,但是它定了其它的数据类型用来处理这些长数据,就是StringClob,在hbm.xml文件中把Content字段的Type改成这个,终于好了。害得我差点重写Ajax代码。唉,没看官方文档的坏处。

编辑 | 阅读全文(2678) | 回复(0),Jason Cui 发表于 2006-5-21 22:14
最近连续一个月每天工作到晚上10点半回家,没有一天休息,实在是有点累了。不过还有一个月项目才能结束,而且还是第一期,后面还要几期,要命了。
Blog也没有时间写了,昨天看了KFC的一个广告,本来想写下来,结果写完一段代码就忘记了是什么样的广告了,因此也就没写。
不过累归累,成长还是有的。至少胆子大了,敢随便承诺别人没有我写不出来的程序!
老板喜欢MSN的Blog上的随便拖动的功能,要求我加上去,研究了两三天,搞定了。效果还真是不错。有些功能先用最简单的方式实现,然后再想办法优化。就像检索Blog里每一天的帖子数量,显示一个日历一开始是遍历了30次查询每一天的数据,然后想想应该用一个Group By来实现一次性取出来。不过在查询中使用计算其实也是不划算,特别是数据量大的话。因此多加了三个字段,把日期拆开保存,就可以按照年月日等等各个级别来分组取数了,然后保存成一个Hashtable,再根据每一天去……
编辑 | 阅读全文(2332) | 回复(1),Jason Cui 发表于 2006-5-18 22:36
最近公司的项目进入了最后阶段,问题也不断的展现出来。我负责的只是项目中的一个相对独立的小部分,所以要考虑的问题也都是基于这一小部分的。
由于开发中这一部分使用了NHibernate,开发难度大大降低,同时带来效率问题大大增加。不过在目前的测试中没有发现跟直接写SQL语句有太大差别,可能是数据量还不大,而且NHibernate的缓存做的不错。但是日后数据量达到一定程序的时候,这个问题就不得不考虑了。
另外由于后面还会继续开发内容管理系统合并到这个系统上来,而且公司也一直在考虑页面静态化的问题,所以虽然还没有用到,但是先把这一块想清楚。
因为整个系统是跟用户密切相关的,而且相当一部分内容是处于经常变化的,因此原始的生成静态文件的方式并不适用,因为可能会造成大量读写磁盘。因此,我考虑将静态化的内容也存入数据库,每一个动作先检查数据库里面保存的页面是否过期,如果没有过期,直接读出来返回客户端或者交给它的……
编辑 | 阅读全文(2577) | 回复(0),Jason Cui 发表于 2006-5-3 19:25
研究了很多成熟的系统,大部分都是使用用户控件ascx文件的形式来做模板。但是我总觉得这样对于美工来说过于复杂了。在当前的一个项目中,我们的美工对于asp.net基本上一窍不通的,所以如果还以这种方式来做的话,只能是他做出HTML模板,然后我把模板拆成一块块的ascx。而且,这些ascx没有办法预览,设计期看起来非常的不直观。
想来想去还是觉得PHP的模板技术是最合适的,于是决定放弃一些asp.net的技术,整合一下PHP的模板方式。使用简单的HTML里面加标记,然后用纯正的C#语言读取html模板文件,用计算出来的字符串替换这些固定的标记,然后用response.write写到客户端。虽然原始一些,但是却可以很好的解决前面那些问题,我不需要再重复一次美工的工作了。不过还有个缺点,就是需要循环的部分就要单独拿出来做一个单独的文件,可能会导致文件数量比较多。不过相对来说,这不是大问题,大不了拆分……
编辑 | 阅读全文(2539) | 回复(0),Jason Cui 发表于 2006-4-27 9:45

今天在写一个小东西的时候,要用到在一个表里取出一部分字段的功能,在NHibernate的HQL里面似乎已经预留了这个接口,就是可以定义一个新的类,然后用Select new的方法,从一个表或者几个关联表中取数据,并使用取出来的字段创建这个类的实例,然后返回一个包含这个类的IList。好不容易把这个功能调试通过以后发现,在这个HQL上面没有办法再增加Select Top 10的功能了,结果就是一次返回所有的数据。试了半天,两者不可兼得。

于是采用另一个迂回策略,在数据库里建一个视图,里面包含完整的查询语句,然后给它增加一个实体类和对应的hbm.xml文件,hbm里面的table就指向这个视图,然后就可以像使用表一样的使用它了。不过因为这个浪费一个实体类似乎有些愚蠢,而且,如果需要多种不同样式的查询,也不可能建多个这样的对应类。不过目前还没有想出更好的办法。

编辑 | 阅读全文(3027) | 回复(3),Jason Cui 发表于 2006-4-26 11:54
前面参考来的代码在数据处理类里面基本上都是直接使用SaveOrUpdate来保存数据,让系统自动判断是新增的还是更新的。但是用在我的代码里就有问题,保存第一条数据就会提示数据错误,记录可能被改动之类的。在网上找了半天也没看到有什么有用的线索。
今天再做的时候突然看到一条信息,NHibernate不是通过到数据库里查找这条记录在不在来判断它是更新还是插入的,而是通过主键的值来判断,这里就要用到那个unsaved-value的值了。如果主键的值等于这个未保存前的值,那么这条记录就是要新建的,如果不等于,那么它就是要更新的了。
通常我所看到的参考代码,这个unsaved-value都是设为null的,所以我的代码里也全部是设为null的,但是没有想到,我的代码里所有的主键都是数字型的,生成对象的时候会给这个字段设成默认值0,所以在保存第一条数据的时候NHibernate会以为我要更新数据,但是这个主……
编辑 | 阅读全文(2602) | 回复(0),Jason Cui 发表于 2006-4-26 1:13
由于这次当机,更加看重备份的重要性,但是在Windows上做备份似乎没有linux上方便,因为linux的脚本要强的多。找了半天,测试了半天,终于成功了。
首先是备份文件。因为要备份Web站点内容,Mysql数据库内容,SVN仓库内容,最简单的方式就是直接用RAR打包,备份RAR文件。当然,也可以写个脚本Dump出mysql内容和subversion仓库,不过如果不考虑以后切换平台,也就没必要了。对于压缩工具,首先考虑的是rar的命令行版,结果试了一下失败了,它的参数的用法不是很清晰,而且运行过程中显示是试用版,需要注册。于是考虑用winrar。在要备份的三个目录上点右键,压缩到文件,打开winrar的对话框,选上需要的参数,比如每个文件夹压缩到单独的文件,以及压缩密码等。设置完成后点击配置,保存为新配置,设一个名字,选中下面两个保存压缩文件名和要压缩的文件,以及下面的立即执行和在桌面上建立……
编辑 | 阅读全文(2974) | 回复(0),Jason Cui 发表于 2006-4-24 20:36
在前面使用NHibernate的经验中,因为做的是客户端,所以把所有的变量都做成静态变量,比如Session和SessionFactory,而且理论上来说Session可以一直开着,直接程序关闭的时候再关闭。但是在开发Asp.net的时候肯定是不可以一直开着的,不过前期开发的时候还是使用静态变量的方式保存Session。结果程序写的差不多了的时候使用VS2003自带的Application Test Center测试网站的运行效率,当只模拟一个客户端的时候程序运行良好,而且速度很快,设成两个客户端以后,突然全部变成HTTP错误,关闭测试,再打开网站也不行了,提示当前的Command是关闭的之类的。
原来NHibernate的Session不是线程安全的,而且使用静态变量的方法来传递变量会导致整个IIS环境内都使用这同一个变量,因为当两个客户端同时操作的时候,就会冲突报错,不过SessionF……
编辑 | 阅读全文(2531) | 回复(0),Jason Cui 发表于 2006-4-22 23:39
(共 123 条) 上一页 1 2 3... 8 9

仅列出标题