Community Server专题:FAQ--2005年9月19日更新

对Community Server专题中的疑问,或者在专题中还未涉及部分的相关问题你可以在这里提出来,我会在我对CS认识的范围内不定期的进行解答或讨论。

2005.09.19
Q:
运用MemberRole能实现多类用户的管理吗?比如一个网站有个人用户和企业用户,个人用户和企业用户在网站具有不同的功能,能实现吗?

A:Membership是不对用户角色做管理的,但是MemberRole下面还有另外一个机制实现,那就是RoleManager,通过给User赋予不同的角色年可以实现你说的个人用户和企业用户,然后可以建立自己的权限机制,不同的角色拥有不同的权限,这样就可以实现你说的不同的用户在网站有不同的功能。
这很容易办到。
 

2005.09.12
Q:
httphandler是否能实现这样的功能?
服务器端监视 注册用户 下载软件.能检测出此注册用户的下载流量和下载是否完成等等

A:解答这个问题前需要对HTTP请求做一些了解,用户下载的过程中在请求阶段可以通过设置由asp.net捕获并且可以进行相关的处理,如果身份验证等。但是http请求是没有状态的而且是短暂的,也就是说asp.net才处理完最后的EndRequest 事件后就结束对该用户请求的http线程,因此也失去对用户的的Context的检测,假设一个下载的文件很大如100M,下载的过程不可能这个用户请求的HttpContext都存在,而是asp.net处理完EndRequest 事件后就把任务教给了IIS。另外还有一点,Http请求两次交互信息的时候会有不同的HttpContext,也就是无状态性。
如果你要监测流量有几种情况,一客户端返回一个下载进度,另外一种就是在服务器端检测发送的流量。返回下载进度正好与Http请求的无状态冲突,而检测发送的流量与Http请求的短暂性冲突。在某种意义上你的要求无法实现。
试想:如果一个下载站点能够监测下载的流量(包括发送HTML图片等),且一个客户机的网络速度很慢,你的ASP.net是否要一直开辟这个线程直道对方下载完毕?如果有100个客户访问?1000个呢?

2005.09.12
Q:
实现IHttpHandle接口的Handle可以重写IsReusable属性
表示是否需要缓存的意思 那么这里缓存的东西是什么?缓存的时间长度是如何的 ?

A:这里缓存的是一个IHttpHandle实例。
如果 IHttpHandler 实例可再次使用,则为 true;否则,为 false。
该属性经常配合HttpHandlerFactory使用,判断一个Handle实例是否为多个请求提供服务。


2005.09.10
Q:
如果一个系统中实现了多个HttpModule,每个Module里的事件都是类似的,那么在这些具体的多个HttpModule之间的事件顺序如何判断先后呢 ?
A:HttpModule执行的顺序取决于web.config配置HttpModule的顺序,而HttpModule中事件的执行先后顺序与asp.net运行机制相关,具体执行顺序如下:

BeginRequest
AuthenticateRequest
AuthorizeRequest
ResolveRequestCache
AcquireRequestState
PreRequestHandlerExecute
PostRequestHandlerExecute
ReleaseRequestState
UpdateRequestCache
EndRequest


此外,有三个事件有不确定的顺序:
PreSendRequestHeaders
PreSendRequestContent
Error

举个例子:
如果你在web.config配置了两个HttpModule,分别是HttpModuleAHttpModuleB

这个事件执行的顺序如下:
HttpModuleA->BeginRequest
HttpModuleB ->BeginRequest
HttpModuleA->AuthenticateRequest
HttpModuleB ->AuthenticateRequest
HttpModuleA->AuthorizeRequest
HttpModuleB AuthorizeRequest
...以此类推


2005.09.08
Q:
还有一点我一直没想明白:相对httpmodule这种过滤器来说,httphandler是终端处理,不能一个web请求经过几个handler。那么相对直接写普通的aspx后台代码,它的优势何在呢?换句话说,什么时候应该像一般做法写个继承Page的类来处理,什么时候用httphandler来处理好呢?毕竟写handler没有写Page子类来得方便。
A:运用层次的不同,决定是否要使用handler。
1:一个小的项目,要的可能是开发速度,而且软件的使用周期也很有限,再或者根本就不会再去维护与扩展,这个时候你没有必要把handler引入进来,你需要的是再最短的时间内完成业务逻辑。
2:当你期望或者客户要求软件中一些功能在普通的aspx后台代码无法完成的时候,而用handler确可以完成,比如防盗链的运用。
3:自定义handler功能其实是在所有aspx页面执行之前完成的,这个时候请求的上下文Context中只有一些基本的信息,而Page继承了IhttpHandler的同时为了呈现页面还继承了TemplateControl, 也就是说初始化一个page页面比处理一个IhttpHandler要更多的系统资源开销,如在CS中对Utility/redirect.aspx页面的请求只是想实现redirect功能,根本不需要其他的页面呈现部分,因此采用了httpHandler,整个redirect都在服务器端实现,节约了一定的系统开销和数据回发的网络资源。







 

posted on 2005-09-08 15:24  彭斌  阅读(2601)  评论(11编辑  收藏  举报

导航