AspNet 有的〈processModel〉username/password和〈identity〉的username/password来模拟用户。
〈processModel〉的username默认为machine,指的是ASPNET这个帐户。这个是指定运行ASPNET_WP.EXE进程的身份。
而当指定〈identity impersonate='true'〉时,则应用IIS当前的帐户信息。
当指定〈identity impersonate='true'〉的username/password时,则固定使用固定的帐户来执行请求。
当然,你也可以在运行时指定用户名和密码来运行指定代码:
不过这里有点问题。如果不是Windows2003的话,那么〈processModel〉的username最好为SYSTEM。否则的话,就要在管理工具-本地安全策略-本地策略-用户权利指派-以操作系统方式操作 里添加运行的用户的权利,我试过Administrators可以,但是如果是以ASPNET来运行的话,则被拒绝。(真麻烦,〈identity〉也用相关的原理来实现模拟,不过不知道它具体是怎样实现的。)
另外,由于〈processModel〉是全局的,而只是针对某一请求的,所以我这里不是太清楚那些ASPNET空间服务的提供商怎样才能保证各空间不能互相访问。
〈processModel〉指定的用户,至少需要有权限访问各网站的web.config才能得到〈identity〉的内容,这就是说,全局用户至少能访问各网站的web.config。那么即使在某个请求中使用了来切换了用户,我只要新开一条线程就能重新用回〈processModel〉指定的用户来运行代码,这时候我也能读取其他网站的web.config了。如果没有更明确的限制,我还能读取其他网站的所有文件。
上面的代码写成一个工具类:
我想由不少人都懂得在Applicaton_Start等事件中使用HttpContext.RewritePath来改变HttpHandler。
如果在 Server.Transfer/Execute 的调用前,使用RewritePath,更可以起到指定QueryString的效果。
例如
Context.RewritePath("AA.Aspx","","OKOK=3333");
Context.Server.Transfer("Test2.Aspx");
这样,就能执行Test2.Aspx,并且QueryString是OKOK=3333。
这个用途特别大。我目前用这个方法来避免使用 Response.Redirect 。
最近做了一个控件。其中涉及了控件的样式的设置的IDEA。
这个IDEA具体就是想在应用程序放个controltheme.config,里面直接放
这样的XML。
然后控件在运行的时候,读取这个文件,并且自动把里面的设置加载进来。
这样的话,就不需要在设计的时候复制这些样式了,而且还可以随时更换。
具体的代码只有几十行:
里面主要简单地应用类型转换的规则,并没有做优化。
使用方法无非就是想办法加载一个XML文档,然后MergeToObject(xmldoc,mycontrol)就可以了。
这个是只读的版本,正方形继承长方形,可是这里又多了一个菱形的问题。。
最近想研究一下OO的理论,,待续。。。。
这段时间要做个Excel的东西。本来是打算用DotNet来控制Excel的。不过后来要求做成两个部分。一个为Excel的设计工具,为开发人员用。另外一个是给最终用户使用。
最终用户很多,分散在各地,所以如果要求他们安装DotNet,那么是很痛苦的事情。
最后打算给最终用户使用的Excel的控制采用VBA的方式。而VBA则在用DotNet做的设计工具设计Excel界面时自动生成相关的VBA代码。
一个例子如下:
Excel.Workbook book=.....
Excel.Worksheet sheet=...
//得到第一个Sheet的编程模型
VBIDE.VBComponent componentsheet1=book.VBProject.VBComponents.Item(sheet.CodeName);
//测试,添加一行
componentsheet1.CodeModule.AddFromString("'Hello'");
//测试,删除所有行
componentsheet1.CodeModule.DeleteLines(1,componentsheet1.CodeModule.CountOfLines);
//添加代码
componentsheet1.CodeModule.AddFromString(@"
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.Interior.Color = RGB(222,222,222)
End Sub
"
);
其实就这么简单。生成这个VBA代码,和在ASP.NET中为HTML生成相关的JavaScript的原理差不多。
这个是回答:
http://community.csdn.net/Expert/topic/3243/3243216.xml?temp=.3925897
为什么突然会发现某些场合遇到的事情是曾经发生过的呢?
有时候,自己知道这个地方,这个人,这个事情,是以前根本没有接触过的。
但是,为什么感觉会那么强烈?
难道是自己曾经梦过?自己有预知未来的能力?
如果你以为自己有其他人没有的能力,那肯定是在做白日梦。
就如上面的人所说的,小小的CSDN就有那么多人有这样的经历。
其实刚好反映了,要么大家都很正常,要么大家都有超能力。
我的观点却是,这只是体内的一种潜能的突然反映而已。
大家要注意到一点,你是直到事情发生了,你才感觉熟悉。
而你却无法想起后面接着会干什么。你认为并且希望你是有这样的记忆的,但是就是想不起来而已。
其实这是一种错觉,更是一种“马后炮”。
大家都知道我们思想分主观和潜意识。通常,你醒来的时候,主观意识很强。所以潜意识的活动,人自己很难察觉出来的。
而到了睡觉的时候,主观意识基本停止了,这时候潜意识再强烈一些,就能发梦。
不过梦到的东西,都是现实的东西及创新过来的想象。
而在白天,当你做一件事情时,如果潜意识活动突然像打了针那样强了起来,
那么它就会把你眼前的东西记下来。
潜意识的活动你能干预吗?你能知道它在想什么吗?
我想不能。
但是当主观意识再读记忆中的东西时,突然发现,怎么记忆中有眼前的东西?
而且这种记忆很模糊,但是记忆的存在又那么强烈。
(你十分肯定是有这个记忆的,记忆的东西比较弱,不过和眼前的东西是一样的!)
你感觉很神奇啊,于是你又想扫描一下,看看有没有下文。
但是很可惜,没有人能想到下面到底发生什么。
(因为根本没有发生,潜意识也无法帮你记下未来的东西)
这就是这个现象的基本原理。
当然,史上记载很多关于有人梦见什么他将要做的某个事情,于是没有做,而逃过一劫的事情。
不过这个只不过是巧合而已。
几乎人人都发恶梦。但是几十亿的人,只有那么几个遇到刚巧事故真的发生的事情,按概率来说应该还是少了。我觉得应该有成千上万的人能把自己逃过什么劫的事情写成书才算正常。