<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[柠檬居IT技术网]]></title>
<link>http://www.nmju.net/</link>
<description><![CDATA[分享最前卫最时尚的技术！- http://www.nmju.net]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[luckcf@gmail.com(数字水瓶)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>柠檬居IT技术网</title>
	<url>http://www.nmju.net/images/logos.gif</url>
	<link>http://www.nmju.net/</link>
	<description>柠檬居IT技术网</description>
</image>

			<item>
			<link>http://www.nmju.net/article.asp?id=141</link>
			<title><![CDATA[对SQL说不！NoSQL的数据库技术革命]]></title>
			<author>luckcf@gmail.com(admin)</author>
			<category><![CDATA[News]]></category>
			<pubDate>Mon,06 Jul 2009 21:06:22 +0800</pubDate>
			<guid>http://www.nmju.net/default.asp?id=141</guid>
		<description><![CDATA[就像当年波士顿的爱国者为反抗英国重税的行动一样，NoSQL的支持者们从各地涌来，分享他们如何推翻缓慢而昂贵的关系数据库的暴政，怎样使用更有效和更便宜的方法来管理数据，他们开始对SQL说不！NoSQL组织上个月在旧金山的行动让人闻到了数据库革命的味道，好像一个现代IT业版的波士顿倾茶事件正在策划之中。<br/><br/>在NoSQL运动的最新一次聚会中，来自世界各地的150人挤满了CBS Interactive的一间会议室。<br/><br/>就像当年波士顿的爱国者为反抗英国重税的行动一样，NoSQL的支持者们从各地涌来，分享他们如何推翻缓慢而昂贵的关系数据库的暴政，怎样使用更有效和更便宜的方法来管理数据。云计算可能会为数据库技术的发展带来新的契机，如果想在云中获得丰富而随需应变的可伸缩性，你需要一个非关系数据库。<br/><br/>“关系型数据库给你强加了太多东西。它们要你强行修改对象数据，以满足RDBMS （relational database management system，关系型数据库管理系统）的需要，”Java工具提供商SpringSource公司的首席工程师Jon Travis说，他是本次集会的10位发言人之一，在他看来，基于NoSQL的替代方案“只是给你所需要的”。<br/><br/><strong>开源的兴起</strong><br/><br/>反SQL运动的主要倡导者都是Web和Java开发者，他们中许多人都在创业的初期历经了资金短缺并因此与Oracle说再见，然后效仿Google和Amazon的道路建设起自己的数据存储解决方案，并随后将自己的成果开源发布。现在，他们的开源数据商店管理着成百TB甚至PB的数据，由于Web 2.0和云计算的兴起，无论从技术上还是从经济上他们都无需再返回从前，甚至连想也不用想。<br/><br/>“Web 2.0的企业应该抓住机会，他们需要可扩展性，”总部设在伦敦的NoSQL会议组织者Johan Oskarsson说，他任职于著名的音乐网站Last.fm，其他的大多数与会者也都是网络开发者。<br/><br/>Oskarsson说，许多人甚至抛弃了MySQL开源数据库这个长期以来Web 2.0的宠儿，而改由NoSQL的方案来替代，因为优势实在是引人注目。51CTO.com之前曾报道过MySQL创始人宣布创建开源数据库联盟的消息，过度的商业化是MySQL失去原来的优势。<br/><br/>例如Facebook建立了自己的Cassandra数据商店并且在其网站上重点推出一项新的搜索功能，没有使用到现有的MySQL数据库。据Facebook的工程师Avinash Lakshma介绍，Cassandra仅用0.12毫秒就可以写入50GB的数据，比MySQL快了超过2500倍。Google也开始公测他们的云数据库Fusion Tables，这是一个和传统数据库完全不同的数据库，主要优势能够简单的解决关系型数据库中管理不同类型数据麻烦，以及排序整合的常见操作的性能问题等。<br/><br/><strong>什么是NoSQL（从技术上说）？</strong><br/><br/>从这些NoSQL项目的名字上看不出什么相同之处：Hadoop、Voldemort、Dynomite，还有其它很多。<br/><br/>但是，它们通常在某些方面相同：<br/><br/>不要叫它们数据库。Amazon.com的首席技术官Werner Vogels将他们的重要的Dynamo系统称作“高可用性的键值商店”。Google将自己的BigTable称作“管理结构化数据的分布式存储系统”，在51CTO.com之前的外电《云服务颠覆开发传统观念》中曾提到，Google的Big Table不是SQL数据库，原因是SQL数据库支持的一些功能实在难以进行分割，这与我们跨机器存储数据的想法无法结合。它们都是许多NoSQL追随者的效仿模式。<br/><br/>它们可以处理超大量的数据。比如Zvents公司以BigTable模式搭建的开源数据库Hypertable，据Zvents工程师Doug Judd介绍，它可以每天在搜索引擎中写入10亿单元数据。<br/><br/>另外，BigTable与其姊妹技术MapReduce相结合，每天可以处理多达20PB的数据。<br/><br/>“毫无疑问，数据量越来越巨大也让人们寻找其他的数据库替代技术，”SpringSource的Travis说。<br/><br/>它们运行在便宜的PC服务器集群上。PC集群扩充起来非常方便并且成本很低，避免了“sharding”操作的复杂性和成本。<br/><br/>Google曾表示一个BigTable的大集群可以管理数千台服务器上多达6PB的数据。<br/><br/>“Oracle会告诉你需要购买一些硬件然后正确配置Oracle RAC，然而用其他的神奇软件你也可以达到相同的可扩展性。但是两者的开销可是天差地别。”SpringSource首席技术官Javier Soltero说。<br/><br/>它们击碎了性能瓶颈。NoSQL的支持者称，通过NoSQL架构可以省去将Web或Java应用和数据转换成SQL友好格式的时间，执行速度变得更快。<br/><br/>“SQL并非适用于所有的程序代码，”数据库分析师Curt Monash说。对于那些繁重的重复操作的数据，SQL值得花钱。但是当数据库结构非常简单时，SQL可能没有太大用处。<br/><br/>Adobe公司资深计算机科学家Raffaele Sena说，当一年半前Adobe准备重新更新ConnectNow网络协作服务时，正是由于上面的理由，他们决定不采用关系型数据库。<br/><br/>Adobe决定使用Terracotta 提供的Java集群软件，管理Java格式的数据，Sena说，这使ConnectNow的性能提高到前一版本的2至3倍。<br/><br/>没有过多的操作。虽然NoSQL的支持者也承认关系数据库提供了无可比拟的功能集合，而且在数据完整性上也发挥绝对稳定，他们同时也表示，企业的具体需求可能没有那么多。<br/><br/>以Adobe的ConnectNow为例，Sena说，当用户在线时它会不通过数据库而制作三份会话数据，在离线后删除。“因此我们并不需要数据库，因为具体所需要的数据是在内存中的，”他说。<br/><br/><strong>Bootstrap支持</strong><br/><br/>因为NoSQL项目都是开源的，因此它们缺乏供应商提供的正式支持。这一点它们与大多数开源项目一样，不得不从社区中寻求支持。<br/><br/>但是一些人承认，没有正式的官方支持，万一出了差错会是可怕的，至少很多管理人员是这样看。<br/><br/>“我们确实需要做一些说服工作，”Adobe的Sena承认，“但基本在他们看到我们的第一个原型运行良好之后，我们就能够说服他们，这是条正确的道路。”<br/><br/>“大多数大型企业已经习惯于使用关系型数据库管理系统。因此他们会想为什么要改变呢？”Monash说。比如MapReduce和类似的项目“对企业有意。但是在具体使用时，它很可能会和一个分析DBMS（数据库管理系统）相集成。”<br/><br/>即使NoSQL的组织者Oskarsson也承认，就算是他自己的公司Last.fm也还没有做好转为NoSQL替代者的准备，现在依然在使用开源数据库。<br/><br/>他认为这场革命目前仍然需要等待。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.nmju.net/article.asp?id=140</link>
			<title><![CDATA[IIS服务器管理资源的几个方法和工具]]></title>
			<author>luckcf@gmail.com(admin)</author>
			<category><![CDATA[Server]]></category>
			<pubDate>Sun,14 Jun 2009 19:40:48 +0800</pubDate>
			<guid>http://www.nmju.net/default.asp?id=140</guid>
		<description><![CDATA[<p>这个命题，对于单独的网站拥有者，或者来说，针对单独的网站应用程序池来说，作用不是太大，但大多数玩web服务器的，拥有的可不止是一个网站一个应用程序池，特别对于iis6来说，应用程序池的分离管理，极大的提高了iis的应用效果。</p>
<p><strong>解决w3wp.exe内存占用问题</strong></p>
<p>在IIS6下，经常出现w3wp的内存占用不能及时释放，从而导致服务器响应速度很慢。<br />
研究了一下，可以考虑做以下配置：<br />
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。<br />
2、设置应用程序池的回收时间，默认为1720小时，可以根据情况修改。同时，设置同时运行的w3wp进程数目为1。再设置当内存或者cpu占用超过多少，就自动回收内存<br />
一般来说，这样就可以解决了。但仍然会出现个别网站因为程序问题，不能正确释放。</p>
<p>那么，<strong>怎么样才能找到是哪一个网站的？</strong><br />
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid<br />
2、在命令提示符下运行<strong>iisapp -a</strong>。注意，第一次运行，会提示没有js支持，点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池<br />
3、到iis中察看该应用程序池对应的网站，就ok了</p>
<p>　　很多管理员，特别是做虚 拟主机可能到遇到过<strong>IIS cpu100%</strong>占用，但又不知道哪些网站资源占用多，下面介绍一个方法可以查看每个web站点的资源使用情况<br />
&nbsp;<br />
　　<strong>这个方法平时不推荐使用，只是在出现问题的时候使用</strong><br />
&nbsp;<br />
　　1，把每个站点设为独立进程<br />
&nbsp;<br />
　　打开IIS 站点属性 -- 主目录 -- 应用程序保护改成 高<br />
&nbsp;<br />
　　打开任务管理器 查看进程 你就会看到多出一些dllhost.exe进程 和他们的资源使用情况 这些就是每个web点点的进程，但现在好不知道 哪个web站点使用那个进程<br />
&nbsp;<br />
　　2，对应web站点的dllhost.exe进程<br />
&nbsp;<br />
　　打开组建管理--- 组件服务 -- 计算机 -- 我的电脑 -- com+ 应用程序<br />
&nbsp;<br />
　　在这里，我们可以看到类似IIS-{domain.com//Root}这样的，不设为独立进程就看不到，这个就是IIS里的web站点，选择工具栏上的状态查看<br />
&nbsp;<br />
　　你就会看到类似这样的<br />
&nbsp;<br />
　　名称运行PID<br />
&nbsp;<br />
　　IIS-{down.789game.com//Root}是1688<br />
&nbsp;<br />
　　其中 PID 就是任务管理里的 dllhost.exe得 pid值<br />
&nbsp;<br />
　　好了现在知道每个web站点使用的dllhost.exe进程了，而在任务管理器又可以知道dllhost.exe占用的资源，那你应该知道那个网站占用资源不正常了吧!</p>
<p><strong>使用IIS Request Viewer查看当前IIS连接</strong></p>
<p>如果有自己的服务器，如果想查看当前IIS连接情况：例如有多少个请求，每个请求的动作，请求的Url，请求的IP等信息，使用微软的IIS Diagnostics Toolkit无疑是非常好的选择，利用它的IIS Request Viewer，查看当前连接以及连接状态，一目了然，非常方便好用。</p>
<p>&nbsp;<img alt="" onload="ResizeImage(this,520)" src="http://www.linwan.net.cn/upload/iisrequestvieweriis_6.gif" /></p>
<p>不过要特别注意，在第一次使用IIS Request Viewer功能时，极有可能会弹出来一个错误窗口</p>
<p>&nbsp;<img alt="" onload="ResizeImage(this,520)" src="http://www.linwan.net.cn/upload/iisrequestvieweriis_62.gif" /></p>
<p>---------------------------<br />
Warning<br />
---------------------------<br />
OpenTraceLogFile() failed (Win32 error:-2147024735 - 指定的路径无效。)<br />
---------------------------<br />
确定 取消<br />
---------------------------</p>
<p>被这个问题郁闷了很久，今天终于找到解决方法了：</p>
<p>在&ldquo;我的电脑&rdquo;属性里面的&ldquo;环境变量&rdquo;设置里面，设置Temp目录为一个较短的目录，例如c:\temp，就不会有这个错误。</p>
<p>IIS Diagnostics Toolkit for 32-bit systems</p>
<p>在2003server版本下安装后，执行程序在：C:\Program Files\IIS Resources\TraceDiag 目录下reqviewer.exe</p>
<p>有人分析说，使用一段时间后,感觉还不如直接对IIS LOG进行当天的分析，因为HTTP变化很快的,或者用TCPView看也是一个方法</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9bfa49bc-376b-4a54-95aa-73c9156706e7&amp;amp;DisplayLang=en">Download the iisdiag.msi package now</a>&nbsp; <strong>IIS Request Viewer</strong><a href="http://www.linwan.net.cn/upload/iisdiag.rar">本站下载</a></p>
<p><strong>利用性能管理器查看IIS站点流量。</strong></p>
<p>先打开perfmon.msc，点一下加号，选web server，左边选一个要查看的性能，右边选站点</p>
<p><strong>IIS监控--自动重启脚本工具IISWatcher IIS自动重启vbs脚本</strong></p>
<p>功能：可以在IIS意外终止时自动重启IIS，无须登陆系统，无人职守<br />
条件：<br />
1.服务器安装过Windows Script 5.6，可以正常运行.vbs脚本。<br />
2.确保系统服务WindowsManagement Instrumentation 正常启动。<br />
将以下代码复制为 fu.vbs，放至系统盘WINNT/System32/下，注意重命名时要和&ldquo;cscript //h:cscript&amp;&amp;cscript fu.vbs&rdquo; 中的fu.vbs保持一至，否则计划任务启动时报找不到文件的错误。<br />
然后做计划任务，让其在系统启动时运行监控<br />
vbs代码：<br />
程序代码<br />
strFullName = WScript.FullName<br />
strWshHost = Right(strFullName, 11)<br />
'WScript.Echo &quot;Default script host: &quot; &amp; strWshHost<br />
If strWshHost = &quot;WScript.exe&quot; Then<br />
Set objShell = CreateObject(&quot;WScript.Shell&quot;)<br />
objShell.Run _<br />
&quot;%comspec% /k &quot;&quot;cscript //h:cscript&amp;&amp;cscript fu.vbs&quot;&quot;&quot;, _<br />
MAXIMIZE_WINDOW<br />
If Err.Number&nbsp; 0 Then<br />
WScript.Echo &quot;Error 0x&quot; &amp; hex(Err.Number) &amp; &quot; occurred. &quot; &amp; _<br />
Err.Description &amp; &quot;. &quot; &amp; VbCrLf &amp; _<br />
&quot;Could not temporarily change the default script host to Cscript.&quot;<br />
Err.Clear<br />
WScript.Quit<br />
End If<br />
WScript.Quit<br />
End If<br />
'----上面这段代码是强制到cscript命令行，一般要在cmd命令行下输入cscript *.vbs,如果直接执行vbs会用wscript打开，这样只会弹个对话框，我不喜欢，有不想每次都cscript，所以要写点额外的代码，双击后会调用一个wscript执行csript，然后再消灭自己，幸好微软的网站上提供了这个代码------------------------------------<br />
strComputer = &quot;.&quot;<br />
Set objWMIService = GetObject(&quot;winmgmts:&quot; _<br />
&amp; &quot;{impersonationLevel= impersonate, (Security)}!\\&quot; &amp; strComputer &amp; &quot;\root\cimv2&quot;)<br />
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _<br />
(&quot;Select * from __instancecreationevent where TargetInstance isa'Win32_NTLogEvent' and TargetInstance.EventCode = '7031' &quot;)<br />
Wscript.Echo &quot;开始监视iis于 &quot;&amp;now<br />
Do<br />
Set objLatestEvent = colMonitoredEvents.NextEvent<br />
Wscript.Echo &quot;重新启动iis &quot;&amp;now<br />
Set objShell = CreateObject(&quot;WScript.Shell&quot;)<br />
objShell.Run &quot;%COMSPEC% /c IISRESET.EXE&quot;,,1<br />
'------核心程序<br />
whichfile=(&quot;iisresetlog.htm&quot;)<br />
set fso=createobject(&quot;Scripting.FileSystemObject&quot;)<br />
if Not fso.FileExists(whichfile) then<br />
iomode=2 : create=true<br />
'Set MyFile = fso.CreateTextFile(whichfile,True)<br />
else<br />
iomode=8 : create=false<br />
'Set MyFile = fso.CreateTextFile(whichfile)<br />
end if<br />
set MyFile = fso.OpenTextFile(whichfile,iomode,create)<br />
'MyFile.writeLine(&quot;事件发生于 &quot;&amp;now&amp;&quot; 重启iis成功&quot;&amp;vbctrf)<br />
if create=true then<br />
MyFile.WriteLine &quot;&quot;<br />
MyFile.WriteLine &quot;&quot;<br />
MyFile.WriteLine &quot;&quot;<br />
MyFile.WriteLine &quot;&quot;<br />
MyFile.WriteLine &quot;&quot;<br />
MyFile.WriteLine &quot;&quot;<br />
end if<br />
MyFile.WriteLine &quot; iis重启时间: &quot; &amp;now&amp; &quot;&quot;<br />
'MyFile.WriteLine &quot; 是否成功: 是 &quot;<br />
MyFile.WriteLine &quot;<br />
&quot;<br />
MyFile.WriteLine &quot; &quot;<br />
MyFile.Close<br />
set fso=nothing<br />
Loop<br />
'-----用fso记录iis 重启日志。<br />
注意：TargetInstance.EventCode = '7031' 这段代码控制了在什么情况下重启IIS，7031是系统的事件 ID代号，即当系统日志出现7031这样的事件时重启IIS。<br />
下面是系统7031事件描述：IIS Admin Service 服务意外地终止，这种情况已经出现了 1 次。以下的修正操作将在 1 毫秒内运行: 运行配置的故障恢复程序。<br />
同样的道理，可以根据不同的事件ID触发此脚本，修改objShell.Run &quot;%COMSPEC% /c IISRESET.EXE&quot;,,1 这一行代码，可以执行任何win32所支持的程序，即可以根据任意事件触发执行任意的程序，那样用途更广了。<br />
另：<br />
%comspec%打开一个命令行窗口。%comspec% 是一个指向当前命令行外壳的环境变量。通过使用 %comspec%，您不必担心命令行外壳是 cmd.exe 还是 command.exe；%comspec% 会自动选择正确的一个。<br />
/k 在调用 Dir 命令后，确保窗口始终保持打开。这就是 /k 参数的用处。如果我们想要确保命令窗口会在 Dir 命令调用完成后被自动关闭，应该将 /k (keep) 修改为 /c (close)。</p>
<p><strong>砺青IIS监控器IISWatcher v2.1&nbsp;</strong> <a target="_blank" href="http://www.linwan.net.cn/upload/IISWatcher2.1.rar">IISWatcher2.1.rar下载</a></p>
<p>适用于虚拟主机提供商用于排查个别有问题的网站，最大特点是可以监控每一个WEB站点的资源使用状态，包括:CPU使用率，总的CPU时间，内存，最大内存，线程数，模块数等</p>]]></description>
		</item>
		
			<item>
			<link>http://www.nmju.net/article.asp?id=139</link>
			<title><![CDATA[Frontpage2003的怪bug，自动添加“../”的父级目录]]></title>
			<author>luckcf@gmail.com(admin)</author>
			<category><![CDATA[News]]></category>
			<pubDate>Wed,27 May 2009 08:27:24 +0800</pubDate>
			<guid>http://www.nmju.net/default.asp?id=139</guid>
		<description><![CDATA[<p>用FrontPage2003</p>
<p>无意中发现一个bug</p>
<p>稍加研究，基本发现这个bug的规律了</p>
<p>首先是我的系统版本和Frontpage版本：</p>
<p><img alt="" border="0" src="http://www.yici.net/content/uploadfiles/2007-09/20070929_194115.jpg" /></p>
<p>我的文件路径（后面有描述，和路径有关哦～）</p>
<p><img alt="" border="0" src="http://www.yici.net/content/uploadfiles/2007-09/20070929_194212.jpg" /></p>
<p>页面中有如下代码：</p>
<p>注：CSS中有背景文件的定义，文件body中也有文件路径，用红线标注出来了</p>
<p><img alt="" border="0" src="http://www.yici.net/content/uploadfiles/2007-09/20070929_194339.jpg" /></p>
<p>随便找body中一个图片路径，手工修改html代码，用到三级父目录好了</p>
<p>如下：</p>
<p><img alt="" border="0" src="http://www.yici.net/content/uploadfiles/2007-09/20070929_194433.jpg" /></p>
<p>存盘</p>
<p><img alt="" border="0" src="http://www.yici.net/content/uploadfiles/2007-09/20070929_194449.jpg" /></p>
<p>再编辑html代码，假设之前路径搞错了，需要减少两级父目录</p>
<p>如下：</p>
<p><img alt="" border="0" src="http://www.yici.net/content/uploadfiles/2007-09/20070929_194540.jpg" /></p>
<p>存盘</p>
<p><img alt="" border="0" src="http://www.yici.net/content/uploadfiles/2007-09/20070929_194449.jpg" /></p>
<p>此时发现，所有涉及图片路径的字段，都添加上了&ldquo;../&rdquo;这样的父目录（红线标注了）</p>
<p><img alt="" border="0" src="http://www.yici.net/content/uploadfiles/2007-09/20070929_194629.jpg" /></p>
<p>此时无论你再次编辑，添加或者减少父目录&ldquo;../&rdquo;的标记，只要你存盘，总会在每一个涉及图片路径的地方自动添加一次&ldquo;../&rdquo;</p>
<p>汗&hellip;&hellip;</p>
<p>不知道ms对于发现bug有没有奖励啊？</p>
<p>　</p>
<p>呵呵</p>
<p>　</p>
<p><span style="color: #ff0000"><strong>经过反复试验，基本找到原因了，页面所在目录如果是中文名的话修改并保存几次后就会出现问题。</strong></span></p>
<p><span style="color: #ff0000"><strong>所在目录是英文的话一点问题没有，所在目录的上级目录有无中文无所谓。</strong></span></p>
<p>汗&hellip;&hellip;</p>
<p>这算什么怪事啊&hellip;&hellip;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.nmju.net/article.asp?id=138</link>
			<title><![CDATA[VS2008中ASP.NET只发布一个dll]]></title>
			<author>luckcf@gmail.com(admin)</author>
			<category><![CDATA[C#/ASP.NET]]></category>
			<pubDate>Mon,25 May 2009 16:18:07 +0800</pubDate>
			<guid>http://www.nmju.net/default.asp?id=138</guid>
		<description><![CDATA[每次都找一遍，下一遍，麻烦，放一个在这里吧，网上查一下我看都是beta的，这个貌似不是。<br/><br/>Visual Studio® 2008 Web Deployment Projects：<br/><br/><a href="http://www.microsoft.com/downloads/info.aspx?na=90" target="_blank" rel="external">http://www.microsoft.com/downloads/info.aspx?na=90</a>&amp;p=&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=0aa30ae8-c73b-4bdd-bb1b-fe697256c459&amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f0%2f5%2fb%2f05b4424b-5b9b-4961-8ec6-91e9f1741b2d%2fWebDeploymentSetup.msi<br/><br/> <br/><br/>下载安装即可。<br/><br/>功能：发布网站时，只生成一个DLL。<br/><br/>方法：略。<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.nmju.net/article.asp?id=137</link>
			<title><![CDATA[维护好你的WEB服务器]]></title>
			<author>luckcf@gmail.com(admin)</author>
			<category><![CDATA[Server]]></category>
			<pubDate>Fri,15 May 2009 10:09:08 +0800</pubDate>
			<guid>http://www.nmju.net/default.asp?id=137</guid>
		<description><![CDATA[经济关系，我管理的服务器上面放了IIS,SQL2000,SQL2005。该服务器上面放了很多网站，所以一天运行下来，单数据库进程占用内存的量就高达2G，以前到也没怎么在意，最近发现服务器访问变慢了，虽然不能排除其他的原因，不过我就目前最容易发现的占用内存的问题进行了处理。<br/><br/>我的办法就是采用WIN的计划任务功能，让系统定时的重启那几个关键的服务，从而来保证服务器的稳定。<br/><br/><br/>重启2000数据库<br/>------------------------------------------------<br/>at&nbsp;&nbsp; 3:00&nbsp;&nbsp; /every:m,t,w,th,f,s,su&nbsp;&nbsp; &#34;&#34;net stop MSSQL$SQL2000&#34;&#34;&nbsp;&nbsp; <br/>at&nbsp;&nbsp; 3:01&nbsp;&nbsp; /every:m,t,w,th,f,s,su&nbsp;&nbsp; &#34;&#34;net start MSSQL$SQL2000&#34;&#34;&nbsp;&nbsp; <br/><br/>重启2005数据库，由于上面摆放了数据库自动备份机制，所以需要先停止代理服务<br/>-----------------------------------------------<br/>at&nbsp;&nbsp; 3:02&nbsp;&nbsp; /every:m,t,w,th,f,s,su&nbsp;&nbsp; &#34;&#34;net stop SQLAgent$SQL2005&#34;&#34;&nbsp;&nbsp; <br/>at&nbsp;&nbsp; 3:02&nbsp;&nbsp; /every:m,t,w,th,f,s,su&nbsp;&nbsp; &#34;&#34;net stop MSSQL$SQL2005&#34;&#34;&nbsp;&nbsp; <br/>at&nbsp;&nbsp; 3:03&nbsp;&nbsp; /every:m,t,w,th,f,s,su&nbsp;&nbsp; &#34;&#34;net start MSSQL$SQL2005&#34;&#34;&nbsp;&nbsp; <br/>at&nbsp;&nbsp; 3:04&nbsp;&nbsp; /every:m,t,w,th,f,s,su&nbsp;&nbsp; &#34;&#34;net start SQLAgent$SQL2005 &#34;&#34;&nbsp;&nbsp; <br/><br/>重启IIS服务<br/>-----------------------------------------------<br/>at 3:05&nbsp;&nbsp;/every:m,t,w,th,f,s,su&nbsp;&nbsp;%systemroot%\system32\iisreset /restart<br/><br/><br/>由于是今天刚部属，所以效果还不晓得。不过这样至少可以缓解下服务器压力，避免服务器崩溃的发生<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.nmju.net/article.asp?id=136</link>
			<title><![CDATA[asp.net表单回车提交的问题，设置默认按钮]]></title>
			<author>luckcf@gmail.com(admin)</author>
			<category><![CDATA[C#/ASP.NET]]></category>
			<pubDate>Wed,13 May 2009 11:26:57 +0800</pubDate>
			<guid>http://www.nmju.net/default.asp?id=136</guid>
		<description><![CDATA[有asp.net里面用了form runat=server的表单的时候，里面的&lt;asp:button .. 总不能按个回车提交表单，很是不爽。<br/>现在终于发现了一个属性可以干这个事情，用 this.Form.DefaultButton = &#34;ContentPlaceHolder1$btsubmit&#34;;<br/>值得注意的是，如果用了masterPage(母板页)，那么要在按钮ID前加上母板的ID:ContentPlaceHolderID和一个美元符($)<br/><br/>代码如下：<br/>&lt;%@ Page Language=&#34;C#&#34; MasterPageFile=&#34;~/MasterPage.master&#34; AutoEventWireup=&#34;true&#34; CodeFile=&#34;login.aspx.cs&#34; Inherits=&#34;login&#34; %&gt;<br/>&lt;asp:Content ID=&#34;Content1&#34; ContentPlaceHolderID=&#34;ContentPlaceHolder1&#34; Runat=&#34;Server&#34;&gt;<br/>&lt;asp:TextBox runat=&#34;server&#34; ID=&#34;wd&#34; &gt;&lt;/asp:TextBox&gt;&lt;asp:Button ID=&#34;btsubmit&#34; runat=&#34;server&#34; Text=&#34;提交&#34; OnClick=&#34;btsubmit_Click&#34; /&gt;<br/>...........................<br/>&lt;/asp:Content&gt;<br/><br/>含母板页的类中:<br/>protected void Page_Load(object sender, EventArgs e)<br/>{<br/>this.Form.DefaultButton = &#34;ContentPlaceHolder1$btsubmit&#34;;<br/>}<br/><br/>非母板页的类中:<br/><br/>protected void Page_Load(object sender, EventArgs e)<br/>{<br/>this.Form.DefaultButton = &#34;btsubmit&#34;;<br/>}<br/><br/>---------------------------------------------------另一种办法是做一个控件-----------------------------------------------------------<br/><br/><br/>大家都知道。如何页面只有一个按钮的话。按回车的话。是可以提交的。此时的做法也非常简单。在click中直接写代码就可以了。页面在提交时，它黓认是提交第一个控件的。所以。我在页面的最上面放一个长宽都为0的服务器按钮button1。然在在button1_onclick()中写要提交的代码就可以了。运行时，你按下回车提交。这时页面提交的就是button1的事件了。哈！是不是很简单！<br/><br/>缺点：<br/><br/>不用我说了，每个页面只能存在一个回车提交的事件。<br/><br/><br/>---------------------------------------------------另一种办法是做一个控件-----------------------------------------------------------<br/>自己写一个控件继承TextBox，增加一个SubmitControl 属性用来指定此文本框上按回车时由哪个按钮来响应。 <br/>　　再做一个Converter增加设计时支持，就是在设计时可以用下拉框选择提交按钮。 <br/>　　目前只考虑了Button、LinkButton和ImageButton作为提交按钮，当然继承它们的控件也可以。 <br/>　　本例知识点：控件、属性、继承。 <br/>　　继承：是一个进程，通过继承，一个对象可以获得另一个对象的属性（包括函数），并可向其中加入属于自己的一些特征。作为C++语言的一种重要机制，用继承的方法可以自动为一个类提供来自另一个类的操作和数据结构，进而使程序设计人员在一个一般的类的基础上很快建立一个新的类，而不必从零开始设计每个类。 <br/>　　当一个类被其他的类继承时，被继承的类称为基类，又称为父类。 <br/>　　继承其他类属性的类称为派生类，又称为子类。 <br/>　　一般情况下，继承的进程起源于一个基类的定义，基类定义了其所有派生类的公有属性。从本质上讲，基类具有同一类集合中的公共属性，派生类继承了这些属性，并且增加了自己特有的属性。从任何已存在的类继承的实质就是建造新的派生类。 <br/>　　实现过程 <br/>　　1）先创建一个新项目WEB控件库，将此段代码加进去。 <br/>　　public class ufoTextBox ：TextBox <br/>　　{ <br/>　　[TypeConverter(typeof(SubmitableControlConvertor))，DefaultValue(&#34;&#34;)，Category(&#34;Behavior&#34;)] <br/>　　public string SubmitControl <br/>　　{ <br/>　　get <br/>　　{ <br/>　　object ret = this．ViewState[&#34;SubmitControl&#34;]; <br/>　　if (ret != null) <br/>　　{ <br/>　　return (string) ret; <br/>　　} <br/>　　return string．Empty; <br/>　　} <br/>　　set <br/>　　{ <br/>　　this．ViewState[&#34;SubmitControl&#34;] = value; <br/>　　} <br/>　　} <br/>　　protected override void AddAttributesToRender(HtmlTextWriter writer) <br/>　　{ <br/>　　base．AddAttributesToRender(writer); <br/>　　if(this．SubmitControl．Length &gt;0) <br/>　　{ <br/>　　Control con = FindControl(SubmitControl); <br/>　　if(con != null) <br/>　　{ <br/>　　string script = &#34;if(event．keyCode == 13){document．getElementById(&#39;&#34; + con．ClientID + &#34;&#39;)．click();event．returnValue=false;}&#34;; <br/>　　writer．AddAttribute(&#34;onkeydown&#34;，script); <br/>　　} <br/>　　} <br/>　　} <br/>　　} <br/>　　自定义的Converter，用于设计时支持： <br/>　　public class SubmitableControlConvertor ：StringConverter <br/>　　{ <br/>　　private object[] GetControls(IContainer container) <br/>　　{ <br/>　　ComponentCollection components = container．Components; <br/>　　ArrayList ret = new ArrayList(); <br/>　　foreach (IComponent control in components) <br/>　　{ <br/>　　if (!(control is Button || control is LinkButton || control is ImageButton)) <br/>　　{ <br/>　　continue; <br/>　　} <br/>　　Control button = (Control) control; <br/>　　if ((button．ID != null) &amp;&amp;(button．ID．Length != 0)) <br/>　　{ <br/>　　ret．Add(string．Copy(button．ID)); <br/>　　} <br/>　　} <br/>　　ret．Sort(Comparer．Default); <br/>　　return ret．ToArray(); <br/>　　} <br/>　　publicoverrideSystem．ComponentModel．TypeConverter．StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) <br/>　　{ <br/>　　if ((context != null) &amp;&amp;(context．Container != null)) <br/>　　{ <br/>　　object[] controls = this．GetControls(context．Container); <br/>　　if (controls != null) <br/>　　{ <br/>　　return new TypeConverter．StandardValuesCollection(controls); <br/>　　} <br/>　　} <br/>　　return null; <br/>　　} <br/>　　public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) <br/>　　{ <br/>　　return false; <br/>　　} <br/>　　public override bool GetStandardValuesSupported(ITypeDescriptorContext context) <br/>　　{ <br/>　　return true; <br/>　　} <br/>　　} <br/>　　2）将此文件生成．dll文件，在工具箱中添加此dll文件。 <br/>　　3）将此控件拖入相应页面，在Page_Load中加上[此控件的名字]．SubmitControl=&#34;所提交的按钮的名字&#34;; <br/>　　例如： <br/>　　WebCustomControl1．SubmitControl=&#34;Button1&#34;（双引号不要去掉了!） <br/>　　当往WebCustomControl1输入完内容之后按回车Button1响应。 ]]></description>
		</item>
		
			<item>
			<link>http://www.nmju.net/article.asp?id=135</link>
			<title><![CDATA[网站会员注册模块抵御垃圾信息最有效办法]]></title>
			<author>luckcf@gmail.com(admin)</author>
			<category><![CDATA[C#/ASP.NET]]></category>
			<pubDate>Tue,05 May 2009 10:19:49 +0800</pubDate>
			<guid>http://www.nmju.net/default.asp?id=135</guid>
		<description><![CDATA[年初的时候一直在和垃圾信息做斗争，我所管理的几个网站经常被垃圾会员注册机攻入，导致数据库里面有几K几K的垃圾信息。整天被运营人员抱怨，今天又多了啥啥啥的垃圾信息。我采用过很多办法，不过正所谓道高一尺魔高一丈吧，每次改过一种规则，最多不超过一礼拜就又被攻入了。网上的很多防御办法都试过，实效不大。后来根据IIS日志，自己摸索了一套办法，就是把注册页面写成ASP.NET的，然后进行2次数据验证形式的注册。<br/><br/>譬如一个TEST.ASPX页面，首先在FORM内建立两个&lt;asp:Panel /&gt;控件PA和PB，其中PB为隐藏状态Visible=&#34;false&#34;，另外再放2个按钮，NEXT和SAVE。然后在点击NEXT按钮的时候，验证PA里面的数据，你可以验证用户名是否存在或者验证验证码是否正确等，然后PA隐藏，PB显示；当PB页所填写的内容完成后点SAVE按钮保存你的注册信息。<br/><br/>为什么这么做呢，因为以前我分过2个页面来进行会员注册，如A.ASP和B.ASP，但垃圾发布员总是能够突入防御。后来考虑到ASP.NET特有的性能，所以采用同一个页面的形式，不过效果很好，至今3个月了，网站依旧没有被垃圾会员信息突入！<br/><br/>也希望有更好的办法的朋友来交流指导。<br/><br/><a href="http://www.3to3.com" target="_blank" rel="external">http://www.3to3.com</a> 以前没有采用2次验证注册形式<br/><a href="http://www.mmlamp.com" target="_blank" rel="external">http://www.mmlamp.com</a> 采用了2次验证注册形式]]></description>
		</item>
		
			<item>
			<link>http://www.nmju.net/article.asp?id=134</link>
			<title><![CDATA[关于局域网部属.NET网站应注意事项]]></title>
			<author>luckcf@gmail.com(admin)</author>
			<category><![CDATA[C#/ASP.NET]]></category>
			<pubDate>Tue,14 Apr 2009 09:56:10 +0800</pubDate>
			<guid>http://www.nmju.net/default.asp?id=134</guid>
		<description><![CDATA[1、应该安装.NET2.0框架<br/><br/>2、.NET1.1和.NET2.0不能共用一个应用池<br/><br/>3、IIS里面WEB扩展有么有允许<br/><br/>4、查看IIS建立的.NET网站里面有没有“允许父路径”<br/><br/>5、网站目录有么有给予权限角色NETWORK SERVICE，这个最关键，其他的可以用USERS来替代，或者可以自己建立用户来实施<br/><br/>6、查看C:\WINDOWS\Temp文件夹是否给予了足够的权限，一般式添加USERS角色，完全权限<br/><br/>7、设置完后最好重启下系统，好让他的IIS和一些设定的参数能够彻底清空<br/><br/>8、客户机的话最好清除下所有IE临时缓存<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.nmju.net/article.asp?id=133</link>
			<title><![CDATA[Microsoft Web Platform Installer 2.0 Beta 发布]]></title>
			<author>luckcf@gmail.com(admin)</author>
			<category><![CDATA[News]]></category>
			<pubDate>Tue,24 Mar 2009 14:46:27 +0800</pubDate>
			<guid>http://www.nmju.net/default.asp?id=133</guid>
		<description><![CDATA[<p>&nbsp;微软网络平台安装试用版（网络 PI ）的提供了一个单一，免费包安装和配置微软的整个网络平台，包括IIS7，Visual Web Developer 2008 Express Edition， SQL Server 2008 Express Edition 或 .NET Framework。利用网络平台安装的简单的用户界面，您可以选择自定的组成部分或更多...</p>
<p>&nbsp;</p>
<div><b>下载:</b><a href="http://go.microsoft.com/fwlink/?LinkID=145505" target="_blank">Microsoft Web Platform Installer 2.0 Beta</a></div>
<div>&nbsp;</div>
<div>站长语：好像是一个集成化开发平台，各个功能都可以使用，不过在服务器上没试过，值得期待</div>]]></description>
		</item>
		
			<item>
			<link>http://www.nmju.net/article.asp?id=132</link>
			<title><![CDATA[清除Teleport pro文件中的冗余代码:tppabs等]]></title>
			<author>luckcf@gmail.com(admin)</author>
			<category><![CDATA[Tools]]></category>
			<pubDate>Wed,04 Mar 2009 16:01:24 +0800</pubDate>
			<guid>http://www.nmju.net/default.asp?id=132</guid>
		<description><![CDATA[清除整站下载文件中的冗余代码:tppabs等<br/>用Teleport pro下载的离线网页文件(整站下载得到)源码中,包含了大量的<br/><br/>&lt; tppabs=&#34;<a href="http://www." target="_blank" rel="external">http://www.</a>****.com/images/bg.gif&#34; style=&#34;font-size:12px;&#34;&gt;<br/><br/>以及<br/><br/>&lt;a href=&#34;javascript: if(confirm(&#39;<a href="http://www." target="_blank" rel="external">http://www.</a>xxx.com/bbs/ \n\n文件并未依 Teleport Pro 取回，因为 服务器报告因为错误<br/><br/>的发生导致无法读取。 \n\n你要从服务器上打开它吗？&#39;))window.location=&#39;http: //www.xxx.com/bbs/&#39;&#34; &gt;<br/><br/><br/>这样的代码,这些是 Teleport pro给代码加的.相当于一个说明.提示.<br/><br/>可以在 DreamWeaver中使用正则表达式批量清除这种代码.<br/><br/>具体写法如下:<br/><br/>匹配tppabs标签: <br/>\btppabs=&#34;h[^&#34;]*&#34;<br/><br/>替换为<br/><br/>(空)<br/><br/>匹配javascript代码:<br/>href=&#34;javascript:if\(confirm\(&#39;htt[^&#34;]*&#34;<br/><br/>替换为<br/><br/>href=&#34;#www.nmju.net&#34;<br/><br/>注意替换的时候.应该勾选 &#34;使用正则表达式&#34;<br/><br/>css文件中,还有一些类似/*tpa=http://image.39.net/cancer/images/focus_bmark_bg.gif*/这样的代码<br/><br/>用正则,是这样做的.<br/><br/>tpa=http://[^\s]*.gif<br/><br/>替换为<br/><br/>(空)<br/><br/>然后剩下的就是/**/ 了,可以不需要正则替换了.<br/>]]></description>
		</item>
		
</channel>
</rss>
