# Saturday, November 04, 2006
烟台.Net俱乐部网站近几日出现了异常报告,于是调查了一下站点的IIS日志,进行了分析,发现了100次以上的非法访问的IP情况如下:
尝试次数 IP地址 所属地区
4904 211.64.120.192 山东省济南市 山东交通大学
223 74.6.74.159 美国
190 222.80.77.209 新疆喀什市 电信
181 202.108.211.101 北京市 网通
160 222.183.217.187 重庆市江北区 电信ADSL
148 124.156.191.67 中国
112 222.88.189.247 河南省鹤壁市 电信ADSL
100 220.169.248.6 湖南省衡阳市

以这里的第一名211.64.120.192的访问情况为例,其访问的俱乐部网站路径如下:

于是乎把他的IP封锁了,索然这本身没有什么效果,但是对该“黑客”的行为表示痛恨。不过呢其实最痛恨的也不是他啦,最痛恨的是那些疯狂的搜索引擎爬虫,baidu,sogou的爬虫都不是什么好鸟。而且看到很多网站在为这个问题而头痛,希望大家一起努力可以想到一个好的办法来解决这个问题。近期我也会尝试分析和解决这个问题。

posted on Saturday, November 04, 2006 9:33:44 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Monday, October 30, 2006

近来微软的产品和服务在中国的本土化在不断的改进,比如说针对中国用户的正版增值(PS:Microsoft Cartoon Maker挺好玩)、微软asp.net官方站点的中文版(http://asp.net/cn)、MSDN Magazine中文版(http://msdn.microsoft.com/msdnmag/issues/06/11/default.aspx?loc=zh)……这些都是值得称赞甚至可以说惊喜的。但是作为开发者我们来说,似乎还没有看到VS2005的Web Application Project中文版的出现,致使部分狂热爱好者甚至采取一些极为复杂的办法去实现在中文的的VS2005下使用Web Application Project,微软为何不出个官方的中文版本,以便使用中文版VS开发工具的开发者们更方便的从VS2003转向VS2005呢?期待中……

posted on Monday, October 30, 2006 11:11:40 AM (China Standard Time, UTC+08:00)  #    Comments [6]
# Tuesday, October 10, 2006

我们在上网使用搜索引擎的时候,经常会遇到类似这样的一个问题:从Google上搜索到了一个包含了“税收”的文章,但是打开对应的网站页面时发现这篇文章很长,很难确定税务在文章中的位置,即使使用浏览器的查找功能,也并不爽。那么如何改进信息类网站在此需求上的用户体验呢?一个国外的朋友做了件好事情:http://www.kryogenix.org/code/browser/searchhi/,他在这个页面上提供了一个js,可以很方便的实现我们的需求。但是这个脚本对baidu没有什么效果为什么呢?首先我们看看他的部分代码:

……
if (qsip[0] == 'q' || qsip[0] == 'p') { // q= for Google, p= for Yahoo
words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
for (w=0;w<words.length;w++) {
highlightWord(document.getElementsByTagName("body")[0],words[w]);
}
}

……

上述代码获取来源地址中q或p的值,q对应的是google的搜索关键字,p是Yahoo的搜索关键字,而且这两个关键字是utf-8编码的,使用js自然可以很方便的处理,但是百度搜索的则有较大不同:搜索关键字的对应的地址参数是wd,且编码为GB2312。如何解决这个问题呢?我这里使用了js结合vbs的办法来解决该问题。

首先我们使用vbs写一个函数解决编码问题:

Function DeCodeAnsi(s)
Dim i, sTmp, sResult, sTmp1
sResult = ""
For i=1 To Len(s)
If Mid(s,i,1)="%" Then
sTmp = "&H" & Mid(s,i+1,2)
If isNumeric(sTmp) Then
If CInt(sTmp)=0 Then
i = i + 2
ElseIf CInt(sTmp)>0 And CInt(sTmp)<128 Then
sResult = sResult & Chr(sTmp)
i = i + 2
Else
If Mid(s,i+3,1)="%" Then
sTmp1 = "&H" & Mid(s,i+4,2)
If isNumeric(sTmp1) Then
sResult = sResult & Chr(CInt(sTmp)*16*16 + CInt(sTmp1))
i = i + 5
End If
Else
sResult = sResult & Chr(sTmp)
i = i + 2
End If
End If
Else
sResult = sResult & Mid(s,i,1)
End If
Else
sResult = sResult & Mid(s,i,1)
End If
Next
DeCodeAnsi = sResult
End Function

然后在js中调用这个vbs的函数:
if (qsip[0] == 'wd') { // wd= for baidu
if(qsip[1]=='') continue;
execScript('wd = DeCodeAnsi("'+qsip[1]+'")','vbscript');
words = decodeURI(wd.replace(/\+/g,' ')).split(/\s+/);
for (w=0;w<words.length;w++) {
highlightWord(document.getElementsByTagName("body")[0],words[w]);
}
}

ok问题解决了。

使用的时候在网页中加上以下两行就好了:

<script src="/searchhi.js" type="text/javascript"></script>
<script src="/searchhi.vbs" type="text/vbscript"></script>

searchhi.js (2.23 KB)
searchhi.vbs (.93 KB)

posted on Tuesday, October 10, 2006 11:55:25 AM (China Standard Time, UTC+08:00)  #    Comments [2]
# Friday, September 29, 2006

      一个asp.net应用中,可能我们有时候会需要处理一个可能长时间执行的任务。比如说将新闻内容生成静态页面,如果在asp.net中调用方法来处理,很可能引起超时操作,而且我们也无法获知当前处理的进度情况。那么我们应该如何解决该问题呢?答案是使用Thread+AJAX。

      基本的解决办法是,首先我们将可能长时间执行的程序放在一个Thread中执行:
Thread tr= new Thread(new ThreadStart(ArticleCreate));
tr.Start();

      然后在执行过程中将执行的进度数据存在Session中:
private void ArticleCreate()
{
    string sqlStr="select * from article order by id asc"
    DataSet ds=……
    int tCount =ds.Tables[0].Rows.Count;
    for(int i=0;i<tCount;i++)
    {
        ……
        Session["c_pro"] = (i+1)*100/tCount;
    }
    Session["c_pro"]=100;
}

      再后,我们使用AjaxPro.Net从客户端读取服务器端的Session值:
[AjaxMethod(AjaxPro.HttpSessionStateRequirement.Read)]
public int tmethod()
{
    return (int)Session["c_pro"];
}

注意红色字体部分,这是必要的参数,否则无法在AjaxMethod中使用Session,进而在客户端也将无法调用。

客户端进度条的实现可以参考我的改进版的渐变效果进度条fingerscrossed

posted on Friday, September 29, 2006 11:02:37 AM (China Standard Time, UTC+08:00)  #    Comments [1]
# Sunday, September 10, 2006

声明:本作品属于Demo级别,功能并未完整实现,供.Net俱乐部会员学习使用,高手就不必看了

授权:开源&&非商业化使用

作者:qihangnet,phenge

技术:SqlServer2000+C#+Asp.Net1.1
         存储过程
         自定义实体
         自定义实体集合
         I/O
         反射
         接口
         IDataRecord
         数据缓存
         Form认证
         三层结构
         工厂模式
         ……
文档:(电信)Qihang_CMS.chm (网通)QihangCMS.chm

代码:(电信)Qihang_CMS.rar (网通)Qihang_CMS.rar

数据库备份文件:(电信)qihang_cmsDB.rar (网通)qihang_cmsDB.rar

参与讨论:http://qihang.net/forums/thread/2908.aspx

posted on Sunday, September 10, 2006 12:35:56 PM (China Standard Time, UTC+08:00)  #    Comments [3]
# Sunday, August 27, 2006

String.Split 方法:标识此实例中的子字符串(它们由数组中指定的一个或多个字符进行分隔),然后将这些子字符串放入一个 String 数组中。

Regex.Split 方法:在由正则表达式匹配项定义的位置将输入字符串拆分为一个子字符串数组。

上面的两个Split方法,在使用单字符拆分字符串的时候效果一样。然而在使用多个字符拆分字符串时,就有所区别了:

Srting.Split(字符串.ToCharArray())得到的结果往往不是我们希望的结果。所以在此推荐使用Regex.Split方法处理使用多字符拆分字符串。

posted on Sunday, August 27, 2006 11:45:34 AM (China Standard Time, UTC+08:00)  #    Comments [0]
# Wednesday, August 23, 2006

微软在上周发布了Visual Studio 2003 SP1。这个服务包看起来包含一系列稳定性、安全性的补丁以及一些其他的问题。
Visual Studio 2003 SP1的说明
http://support.microsoft.com/default.aspx?scid=kb;en-us;924009
Visual Studio 2003 SP1补丁修复的问题列表
http://support.microsoft.com/kb/918007
Visual Studio 2003 SP1下载地址
http://www.microsoft.com/downloads/details.aspx?FamilyID=69d2219f-ce82-46a5-8aec-072bd4bb955e&DisplayLang=en

偶下载并安装了,但是对中文版用户来说似乎并不理想,比如说经常自动加入<font>标签这类问题,似乎还没有解决,会单独出一个修复包?还是……

posted on Wednesday, August 23, 2006 11:23:44 AM (China Standard Time, UTC+08:00)  #    Comments [1]
# Thursday, August 03, 2006

莫名的就出现了"编译器错误信息:CS1595",错误的全部提示如下:
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。
编译器错误信息: CS1595: 已在多处定义“Web.Global”;使用“c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\gtgaweb_web\0548dcce\e0f80a7f\assembly\dl2\b10aefc8\dc3591a2_cecec501\Web.DLL”中的定义


在网上找了一下,有一个提到解决方案如下:
以前我也有这种情况,不过那没有编译,本来程序都运行很好.用着用着就出现在这种问题了.后来我把Temporary asp.net files 里面的文件给删除了.丛启机器就好了.

另一个解决办法如下:
同时要删除项目文件夹中bin目录下所有文件再重新编译生成
这个办法我试了是可以的

有提到问题的原因认为:
导致的原因一般是重命名了虚拟目录的名称和文件夹...

另外还有一种情况,请参看:http://support.microsoft.com/?id=318274

posted on Thursday, August 03, 2006 10:33:33 PM (China Standard Time, UTC+08:00)  #    Comments [0]