# Wednesday, June 13, 2007

asp.net 2.0中引入的Membership机制给我们做web开发带来很多便利,使得我们在做很多项目开发时处理用户和角色及权限问题时减少了相当的工作量。不过我们开发中可能会碰到一个小小的问题如下:

我们知道MembershipUser中有如下重载的方法

  • MembershipUser.ResetPassword () :将用户密码重置为一个自动生成的新密码。
  • MembershipUser.ResetPassword (String passwordAnswer) :将用户密码重置为一个自动生成的新密码。

msdn中有如下描述:

ResetPassword 调用 ProviderName 属性所引用的成员资格提供程序的 MembershipProvider.ResetPassword 方法,以将成员资格用户的密码重置为自动生成的新密码。然后将该新密码返回到调用方。

如果 EnablePasswordReset 为 false,则成员资格提供程序将返回一个异常。

如果 RequiresQuestionAndAnswer 为 true,则必须使用以密码提示问题答案作为参数的 ResetPassword 重载方法,并提供成员资格用户的密码。如果需要密码答案并提供了不正确的密码答案,成员资格提供程序将引发 MembershipPasswordException。

而另外一个方法MembershipUser.ChangePassword(String oldPassword, String newPassword) 又必须提供原始密码,那么这里就产生了一个矛盾:我们希望用户能够通过安全问题和答案来作为找回密码,又希望管理员可以重置某用户的密码怎么办?上述方法均无法直接使用,要么使用MembershipUser.ResetPassword ()而无安全问题和答案验证,要么必须知道问题答案或者原始密码,我们知道这些安全相关的东西我们都是加密的,而且往往采用单向编码的方式,也是说我们不可能轻易的通过读取数据库数据知道用户的答案和旧密码!那么好,如何解决这个问题呢?下面我来提供一个小的解决方案:

Membership的数据库中包含有一个设置用户密码的存储过程:

CREATE PROCEDURE aspnet_Membership_SetPassword
(

 @ApplicationName nvarchar(256),

 @UserName nvarchar(256),

 @NewPassword nvarchar(128),

 @PasswordSalt nvarchar(128),

 @CurrentTimeUtc datetime,

 @PasswordFormat int = 0
)

返回值:成功返回 0;
用户不存在,返回 1;

那么ok,我们开始解决我们的需求吧!思路很简单我们先设置用户一个默认的密码,然后以该密码为旧密码使用MembershipUser.ChangePassword(String oldPassword, String newPassword) 修改用户的密码。下面的代码是在以DataAccess.RunProcedure方法是已经实现的执行存储过程的方法为前提编写的:

public class MembershipSafe
 {
     public static string ResetPassword(string username)
     {
         //将用户密码修改为8位且包含一个特殊符号的随机密码
         return ResetPassword(username, Membership.GeneratePassword(8,1));
    }
  
     public static string ResetPassword(string username, string newpassword)
     {
         //先将用户密码修改为123123
  
         SqlParameter[] _sp = {
                              new SqlParameter("@ApplicationName",Membership.ApplicationName)
                             ,new SqlParameter("@UserName",username)
                             ,new SqlParameter("@NewPassword","1M4h3eZLAKW1WbVTTwYJiJZa33w=")
                             ,new SqlParameter("@PasswordSalt","rcVy3pCccZ9tXW7NHp1Maw==")
                             ,new SqlParameter("@CurrentTimeUtc",DateTime.Now)
                             ,new SqlParameter("@PasswordFormat",1)
         };
         bool op = DataAccess.RunProcedure("aspnet_Membership_SetPassword", _sp) == 0;
         //以123123为原始密码,修改为新密码
         Membership.GetUser(username).ChangePassword("123123", newpassword);
         return newpassword;
     }
 }

注:以上代码仅做参考,不一定是符合您具体项目的需求,比如有人可能会继续问修改了密码怎么告诉用户啊,答案是发邮件或者电话通知啊,哈哈~~

推荐浏览:

posted on Wednesday, June 13, 2007 2:41:02 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Saturday, May 05, 2007

    最近不少Web技术圈内的朋友在讨论协议方面的事情,有的说web开发者应该熟悉web相关的协议,有的则说不用很了解。个人认为这要分层次来看待这个问题,对于一个新手或者刚入门的web开发人员而言,研究协议方面的东西可能会使得web开发失去趣味性、抹煞学习积极性,这类人应该更多的了解基本的Web技术使用。而对于在该行业工作多年的老鸟来说,协议相关的内容、标准相关内容应该尽量多些的了解,因为只有这样才能使得经手的web系统更加优秀(安全、漂亮、快速、兼容性好、体验好……)。本文我们来说一下MIME 协议的一个扩展Content-disposition。

    我们在开发web系统时有时会有以下需求:

  • 希望某类或者某已知MIME 类型的文件(比如:*.gif;*.txt;*.htm)能够在访问时弹出“文件下载”对话框
  • 希望以原始文件名(上传时的文件名,例如:山东省政府1024号文件.doc)提供下载,但服务器上保存的地址却是其他文件名(如:12519810948091234_asdf.doc)
  • 希望某文件直接在浏览器上显示而不是弹出文件下载对话框
  • ……………………

    要解决上述需求就可以使用Content-disposition来解决。第一个需求的解决办法是

Response.AddHeader "content-disposition","attachment; filename=fname.ext"
 
将上述需求进行归我给出如下例子代码:
public static void ToDownload(string serverfilpath,string filename)
{
    FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
    long fileSize = fileStream.Length;
    HttpContext.Current.Response.ContentType = "application/octet-stream";
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + UTF_FileName(filename) + "\";");
    ////attachment --- 作为附件下载
    ////inline --- 在线打开
    HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
    byte[] fileBuffer = new byte[fileSize];
    fileStream.Read(fileBuffer, 0, (int)fileSize);
    HttpContext.Current.Response.BinaryWrite(fileBuffer);
    fileStream.Close();
    HttpContext.Current.Response.End();
}

public static void ToOpen(string serverfilpath, string filename)
{
    FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);
    long fileSize = fileStream.Length;
    HttpContext.Current.Response.ContentType = "application/octet-stream";
    HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=\"" + UTF_FileName(filename) + "\";");
    HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());
    byte[] fileBuffer = new byte[fileSize];
    fileStream.Read(fileBuffer, 0, (int)fileSize);
    HttpContext.Current.Response.BinaryWrite(fileBuffer);
    fileStream.Close();
    HttpContext.Current.Response.End();
}

private static string UTF_FileName(string filename)
{
    return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);
}

 

简单的对上述代码做一下解析,ToDownload方法为将一个服务器上的文件(serverfilpath为服务器上的物理地址),以某文件名(filename)在浏览器上弹出“文件下载”对话框,而ToOpen是将服务器上的某文件以某文件名在浏览器中显示/打开的。注意其中我使用了UTF_FileName方法,该方法很简单,主要为了解决包含非英文/数字名称的问题,比如说文件名为“衣明志.doc”,使用该方法客户端就不会出现乱码了。

 需要注意以下几个问题:

  1. Content-disposition是MIME协议的扩展,由于多方面的安全性考虑没有被标准化,所以可能某些浏览器不支持,比如说IE4.01
  2. 我们可以使用程序来使用它,也可以在web服务器(比如IIS)上使用它,只需要在http header上做相应的设置即可

可参看以下几篇文档:

posted on Saturday, May 05, 2007 3:03:14 AM (China Standard Time, UTC+08:00)  #    Comments [0]
# Tuesday, January 02, 2007

 将VS2003下的一个Web项目升级到VS2005后,去除明显错误后编译测试运行。某页面发现一个问题:

“/”应用程序中的服务器错误。

分析器错误

说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。

分析器错误信息: 发现不明确的匹配。

这个问题发生原因一般情况是:

aspx页面里面的控件有与您的aspx.cs里的类变量重名(不区分大小写)的ID

那么我发现在代码中有如下的声明:

protected System.Web.UI.WebControls.Label BlogID;
protected System.Web.UI.WebControls.Label blogID;

blogID在前台控件中不存在,仅在cs代码中声明了,因此产生了上述的问题。

 

由此看来虽然,C#等语言中允许我们使用大小写不同来声明不同的变量,但是我们应该尽量避免这样的情况,使用完全不同的名字区分不同的变量为好啊。

posted on Tuesday, January 02, 2007 10:50:23 PM (China Standard Time, UTC+08:00)  #    Comments [2]
# Sunday, December 17, 2006

首先最值得庆祝的是VS2005 SP1在本月15日发布,我在第一时间下载并安装了。该补丁包中最让ASP.Net应用的开发者高兴的恐怕就是Web Application Project的引入了,使用VS2005中文版ASP.Net开发者终于有福了。

而且在VS2005 SP1中的Web Application Project的页面设计视图右键菜单已经有View Code(查看代码)项了。
 

安装VS2005 SP1之前最好先看看这个知识库的925336号文章,不然您可能会安装失败。也就是您最好先做如下图配置:

大家要了解VS2005 SP1可以先看看:

Visual Studio 2005 Service Pack 1

Visual Studio 2005 Service Pack 1 发行说明

第二件比较好的事情就是ASP.Net AJAX(Aatlas)的RC1发布了。

这次的修改内容可以到http://ajax.asp.net/files/AspNet_AJAX_CTP_to_RC_Whitepaper.aspx#link8查看。其中几点重要变化是:

  1. 编译文件由原来的Microsoft.Web.Extensions.dll 变为System.Web.Extensions.dll;
  2. 命名空间也从Microsoft.Web.* 变为 System.Web.*;
  3. registerNamespace修改为Type.registerNamespace();
  4. 附带安装了AJAX-Enabled Web Application项目模板,可以在VS里直接创建AJAX的ASP.Net应用。

PS:RC就是Release Candidate(候选版本)的简称。从微软的惯例来看推出RC版操作系统就代表正式版的操作系统已经离我们不远了,因为微软操作系统的开发步骤是这样的:内部测试->alpha公测->beta公测->RC版->正式版上市;通常微软的RC版本筛选会经历2-3个过程,也就是说微软会推出RC1、RC2或者RC3的操作系统,而随后就是正式版操作系统上市了,因此通常来看RC1版操作系统已经同最终零售版操作系统相差无几了。

posted on Sunday, December 17, 2006 7:06:34 PM (China Standard Time, UTC+08:00)  #    Comments [3]
# Tuesday, November 21, 2006

微软反跨站攻击脚本库 v1.5。此下载包含Microsoft Application Security Anti-Cross Site Scripting Library的分发组件.Anti-Cross Site Scripting Library可以为网站开发人员提供基于Web应用防护,以抵御源自 Cross-Site Scripting (XSS跨站漏洞)的攻击.支持.NET Framework: 2.0, 1.1

下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=efb9c819-53ff-4f82-bfaf-e11625130c25&DisplayLang=en

相关文章:http://blogs.msdn.com/kevinlam/archive/2006/07/07/659531.aspx

posted on Tuesday, November 21, 2006 8:22:02 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# 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]
# 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]
# 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]
# Friday, June 02, 2006
虽然 Apache 的名声可能比 IIS 好,但我相信用 IIS 来做 Web 服务器的人一定也不少。说实话,我觉得 IIS 还是不错的,尤其是 Windows 2003 的 IIS 6(马上 Longhorn Server 的 IIS 7 也就要来了,相信会更好),性能和稳定性都相当不错。但是我发现许多用 IIS 的人不太会设置 Web 服务器的权限,因此,出现漏洞被人黑掉也就不足为奇了。但我们不应该把这归咎于 IIS 的不安全。如果对站点的每个目录都配以正确的权限,出现漏洞被人黑掉的机会还是很小的(Web 应用程序本身有问题和通过其它方式入侵黑掉服务器的除外)。下面是我在配置过程中总结的一些经验,希望对大家有所帮助。
posted on Friday, June 02, 2006 1:13:14 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Tuesday, March 28, 2006

以下是INETA牛人Stephen Walther的比较测试结论.希望对大家有用

  • DataReadear比DataSet快15%
  • SqlDataReader比OleDbDataReader快50%
  • 用DataReader的ASP风格的表格显示比DataGrid绑定DataReader快60%
  • 用Ordinal的DataReader访问字段比用名字访问快15%
  • DataGrid中用AutoGenerateColumns=true比用显式绑定快24%
  • 尽量用缓存


数据不一定是非常准确的,毕竟硬件方面还是会有些影响的。但是作为提高系统效率的参照应该还是比较有用的。

posted on Tuesday, March 28, 2006 11:31:00 PM (China Standard Time, UTC+08:00)  #    Comments [4]

近一段时间一直忙于公司的项目,无暇来更新技术博客。最近几天将会做一些补充。
公司的服务器在近一个月的时间内时常崩溃,由于我们项目组开发的网站访问量远超过服务器上其他的网站,所以服务器管理员认为是我们的网站程序造成的系统崩溃。但是事实是怎么样的呢?请见以下描述:


服务器管理人员(管):你看服务器的负荷又被你们的网站占了99%,服务器崩溃了。你看一个w3wp.exe进程的cpu消耗是99%。其他客户的网站都是小型程序不可能是他们造成的,肯定是你们造成的。
:我们的网站是不好用了哦,难道真是我们的问题……我回去瞧瞧。(暗地在想,日访问量最多4万的站,不至于让我的程序这样吧)


回去后我不断的修改程序中隐藏的瑕疵,并尽量避免服务器在访问高峰更新程序,但是服务器仍然时常崩溃,频率逐渐提高,最常的时候竟然是一天3次。郁闷……什么原因呢?
今日,服务器管理人员又把我喊过去,说:"你们看看吧,服务器又崩了,你们看看怎么办?我心理就郁闷了,我说你怎么就那么肯定是我们程序的进程造成的呢?"……一阵子罗嗦后,我说:"你把我们的站点和进程池关闭,然后重新启动服务器"……几分钟后,服务器启动了,我们的网站处于关闭状态,结果服务器仍然有个w3wp.exe的cpu消耗居高不下,我说这肯定不是我们的问题了。他们也知道自己判断失误了,但是并没有道歉。我回办公室测试,发现网站的数据维护程序有个一直无法正常使用,因为cpu都被一个非我们网站的w3wp.exe给占了,怎么办?于是自己就开始研究如何处理,并与服务器管理人员一起合作查找那个w3wp.exe的真正归宿,可是任务管理器里只有pdi号没有办法直接看到所属的服务器进程池啊。怎么办?google一下。
找到了微软的文档:Iisapp.vbs:IIS 应用程序查询脚本 于是在服务器上运行iisapp.vbs脚本,并根据pid查出了对应的w3wp的进程池归属,发现是某个客户网站的程序造成的,但是由于早期管理人员并没有将客户网站适当分配进程池,百余个网站在一个默认进程池里,怎么办继续查吧,先按照一定的规则对现有客户网站适当分配进程池,然后利用iisapp.vbs查出是一个济南客户的网站程序造成的,先停掉再说,ok一切正常了。期间发现我们的w3wp.exe进程cpu使用率一直在0-1%之间,而内存消耗也不到130M,心里还是比较满意的。等项目的二期工程时,我们再好好修整一下程序,提高性能并尽量减少服务器负担,以免超大访问量时不至于死掉了,呵呵


相关文章:Iisapp.vbs:IIS 应用程序查询脚本

posted on Tuesday, March 28, 2006 4:15:53 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Friday, November 11, 2005

VS2005目前还没有官方正式的简体中文版本,这个安装包是我从SQL2005CTP版的安装包里抽取出来的,中文化已经非常高了,特别是在vs2005的起始页的社区文档也成了调用msdn中文网站的了。很不错。

点击下载(约55M)

下载完以后请将文件的扩展名.zip修改为.iso,然后运行其中的vs_setup.msi文件。

注意:安装过程没有进度窗口,安装完毕会显示一个安装完成的提示窗口。

posted on Friday, November 11, 2005 12:59:32 PM (China Standard Time, UTC+08:00)  #    Comments [7]
# Friday, October 28, 2005

孙展波的博客上看到了一个则令人激动的消息:

2005年10月27日上午微软RTM了Visual Studio 2005和.NET Framework 2.0。

MSDN订户将可以在今天晚些时候下载Visual Studio 2005的各个版本。非MSDN订户可以在Microsoft Download Center下载.NET Framework及其SDK。在11月7日之后,非MSDN订户还可以下载Visual Basic, Visual C#, Visual C++, Visual Web Developer, Visual J#, 和SQL Server的Express版本。

我激动不已,于是下载VS2005旧版卸载软件将Beta2的卸载了,可惜卸载完毕才想起来还没有搞到RTM版的安装程序呢:(

只好等开心下个月给俱乐部带来VSTSBeta3再说吧,~~如果是MVP多好啊:)

posted on Friday, October 28, 2005 11:02:41 AM (China Standard Time, UTC+08:00)  #    Comments [0]
# Tuesday, August 30, 2005

    有时候,我们在调试ASP.net程序的时候,会很痛苦的碰到。某某组件访问被拒绝。这时候重起IIS,电脑注销都不起作用。

其中最常见的原因是Indexing service服务引起的。解决方法就是停用Indexing service,或配置ASP.net 的临时目录不受Indexing service服务的影响。

配置ASP.net 的临时目录不受Indexing service服务的影响的步骤如下:

1、开始 -- 管理工具 -- 计算机管理(Win2003的位置,其他操作系统类似)打开计算机管理
2、展开计算机管理左边树中“服务和应用程序”节点,再在其下展开“索引服务”节点,再在其下展开“System”节点,再在其下展开“目录”节点。
3、在计算机管理的右边我们可以看到配置的索引服务目录。
4、在“目录”节点上右击鼠标,选择“新建”--“目录”
5、在“添加目录”对话框中,路经输入框中输入 ASP.net 的临时文件目录。默认应该是:
c:\<WINDIR>\Microsoft.NET\Framework\<Version Number>\Temporary ASP.NET Files  目录。
<Version Number> 指你要处理的.net版本。
6、在“包含在索引中吗?”选项中,选择“否”
7、单击“确定”按钮
8、在“索引服务”节点上右键单击,重起索引服务即可。

参考以下文档:
http://community.csdn.net/Expert/topic/4075/4075120.xml
http://support.microsoft.com/default.aspx?scid=kb;en-us;329065

posted on Tuesday, August 30, 2005 11:57:27 AM (China Standard Time, UTC+08:00)  #    Comments [1]
# Thursday, August 25, 2005
在实际开发Asp.Net项目时,程序可能会出现一些异常,那么我们应该怎么去获得尽量多的系统异常,以便后期维护过程能够尽可能重现异常,及时分析、发现和修复Bug。为了处理这个问题,我写了一个小程序来帮助实现我的需求。
posted on Thursday, August 25, 2005 2:40:44 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Saturday, July 30, 2005

Johnny Hughes的Blog上获悉可以从CVS上获得dasBlog 1.8版源码,于是尽早立即下载后将原码中的明显错误去除,将FreeTextBox升级为最新的3.0.5000.5版,然后修改了部分小错误。现将我修改后的带源码的已编译版本共享给大家。
点击这里下载(连接已失效)

posted on Saturday, July 30, 2005 12:23:50 PM (China Standard Time, UTC+08:00)  #    Comments [7]
# Thursday, July 28, 2005

    在博客园管理员dudu以及博客堂开心就好宝玉的支持和帮助下,烟台.NET 俱乐部也成立啦.
    希望烟台、威海及其周边地区.NET爱好者能积极的加入.
    希望加入此团队的博客园成员可以在本文的评论中回复或EmailTo : qihangnet(AT)hotmail.com。
    请说明你的Blog帐号和所在城市,特长/兴趣(最好详细点)。

    继北京,上海,广州,杭州,郑州,济南等城市成立后。我们烟台也要努力了。
    Let's Do Our Best!

烟台.Net俱乐部博客园团队Blog:http://www.cnblogs.com/team/dotsail.html
烟台.NET俱乐部官方网站:http://qihang.net
烟台.NET俱乐部QQ群:6718824
烟台.NET俱乐部博客园聊天室:http://chat.cnblogs.com/CuteSoft_Client/CuteChat/CH_MainForm.Aspx?ChannelId=45f4536b-39fc-44d5-af07-1715e7b2097e

posted on Thursday, July 28, 2005 9:31:12 PM (China Standard Time, UTC+08:00)  #    Comments [1]
# Sunday, May 22, 2005
前几天安装了VS.Net 2005 测试版,尝了尝鲜!近日要更新一个.Net的网站系统,于是乎卸载了VS.Net 2005和.NET Framework 2.0。结果发现我的IIS开始不正常了,运行asp.net程序不成功!于是重新安装了IIS,结果发现还是不正常,检查了一下IIS的配置信息,发现IIS关联的ASP.NET相关信息没有了。这可怎么办呢?于是google了一下,在微软的MSDN上找到了相关解说,原来在.NET Framework对应的版本目录中有个包含了一个工具:Aspnet_regiis.exe —— ASP.NET IIS 注册工具。于是在命令行下运行了该工具,根据帮助信息,选择了适当的参数,结果俺IIS支持俺的ASP.Net网站代码了。:)
posted on Sunday, May 22, 2005 2:26:16 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Thursday, May 19, 2005

经过将近一周时间的努力,在宝玉的大力支持和帮助以及UGIAandot等的协助下,基于DotText的多用户版博客社区——博客港终于运行开通了。
博客港目前的口号是“风雨中我们一起努力!”。博客港的本意是为了建立一个较为友好直接的交流平台,一个展示个人才华和精神面貌的信息港湾。
博客港地址为:http://www.qihang.net

posted on Thursday, May 19, 2005 7:20:30 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Monday, March 28, 2005

早期就一直关注着DasBlog,这款Asp.net+XML的Blog系统。因为它拥有着其他众多Blog所没有的特性。
去年(2004年)使用DasBlog的时候,发现了问题,并发现了很多不适合或者不满足中国人的东西,所以开始学着宝玉研究DOTNET Forum一样来研究Dasblog的系统构架和代码,做Dasblog系统的本土化改进。希望能在不久的未来出来一款适合中国人使用的DasBlog来。

让我们一起努力吧!!!

posted on Monday, March 28, 2005 1:22:22 PM (China Standard Time, UTC+08:00)  #    Comments [2]
# Wednesday, March 23, 2005
中国电话号码验证
匹配形式如:0511-4405222 或者021-87888822 或者 021-44055520-555 或者 (0511)4405222
正则表达式 "((d{3,4})|d{3,4}-)?d{7,8}(-d{3})*"

中国邮政编码验证
匹配形式如:215421
正则表达式 "d{6}"

电子邮件验证
匹配形式如:justali@justdn.com
正则表达式 "w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*"

身份证验证
匹配形式如:15位或者18位身份证
正则表达式 "d{18}|d{15}"

常用数字验证
正则表达式 
"d{n}" n为规定长度
"d{n,m}" n到m的长度范围

非法字符验证
匹配非法字符如:< > & / ' | 
正则表达式 [^<>&/|'\]+

日期验证
匹配形式如:20030718,030718
范围:1900--2099
正则表达式((((19){1}|(20){1})d{2})|d{2})[01]{1}d{1}[0-3]{1}d{1}
posted on Wednesday, March 23, 2005 5:04:12 PM (China Standard Time, UTC+08:00)  #    Comments [3]
DotNet专业词汇英中对照表,从微软MSDN的文档中转载过来的。希望能对各位DOTNET技术人员有用:)
posted on Wednesday, March 23, 2005 4:47:37 PM (China Standard Time, UTC+08:00)  #    Comments [3]
    以DropDownList控件为例讲一下asp.net的数据绑定技术,适合初手阅读,高手免读。

System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(); 
sqlconn.ConnectionString = "workstation id=localhost;packet size=4096;user  
id=sa;data source=db1;persist security info=False;initial catalog=DB"
;  
sqlconn.Open(); 
System.Data.SqlClient.SqlDataAdapter sqldar = new System.Data.SqlClient.SqlDataAdapter("select UserName from forums_Users",sqlconn);  
sqldar.SelectCommand.CommandType = CommandType.Text;  
System.Data.DataSet DataSet1= new System.Data.DataSet();  
sqldar.Fill(DataSet1,"Users");  
DropDownList1.DataSource = DataSet1.Tables["Users"].DefaultView;  
DropDownList1.DataTextField="UsersName";  
DropDownList1.DataBind();  
sqlconn.Close(); 

第一行是创建一个sql连接对象sqlconn;
第二行是给新建的sql连接对象sqlconn的连接字符串赋予正确的值;
第三行是让sql连接对象sqlconn打开,连接sql数据库;
第四行是创建一个sql适配器对象sqldar,并同时让其使用sqlconn对象执行一条sql查询语句;
第五行是设置sqldar对象的命令类型为文本型;
第六行是创建一个数据集对象DataSet1;
第七行是将sqldar执行的结果填充到DataSet1中,并将命名为Users;
第八行是将DropDownList的数据源设置为DataSet1的Users,并使用默认的查看模式;
第九行是设置DropDownList空间的显示项对应的字段名UsersName;
第十行是执行DropDownList的数据绑定方法;
第十一行是关闭sqlconn对象。

*** 这段代码就是实现了DropDownList的选择项为Users表中的UsersName,只是一个简单的示范,通常在使用过长中会更细致甚至更麻烦一些,但是基本的思想是一样的:创建你需要的数据源,让指定的server端web控件与你的数据源绑定,指定显示项和显示项对应的value
posted on Wednesday, March 23, 2005 4:28:48 PM (China Standard Time, UTC+08:00)  #    Comments [0]
    新手在进行asp.net应用或者webservice应用开发的时候,往往忽略Web.config这个配置文件。下面我来说一下这个文件的一个使用问题。

    我们知道在web上的应用系统开发的时候,会经常要进行数据库连接,通常新手会把数据库连接字符串在程序里直接写,这样造成了开发的系统在后期的维护和移植过程中出现很麻烦的事情:花很多的时间修改程序中的所有数据库连接字符串。而asp.net是需要编译的,所以会比php、asp、jsp更麻烦。但是.net是为了让程序员更方便的做开发的,而不是更麻烦。那么我们如何让这件事情变得简单呢?那就是在Web.config文件的平凡而伟大的作用。
    我们知道默认的Web.config文件的头部结构如下:  

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web> 

    在这个xml格式的Web.config里没有我们可以利用的东西,但是我们如果添加一个应用配置标签,那么情况就不同了。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ConnectionString" value="……"/>
</appSettings>
<system.web> 

    这里的……就是你要在程序中经常使用的连接字符串了,当然你也可以更多添加其他名称的应用配置信息,只需要一行<add key="其他名称" value="其他值"/>就可以了。那么这个值如何调用呢?下面给出一个C#描述的调用方法:

conn = new System.Data.SqlClient.SqlConnection(); 
conn.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings.Get("ConnectionString"); 


(结束)
posted on Wednesday, March 23, 2005 4:20:27 PM (China Standard Time, UTC+08:00)  #    Comments [0]