明辉站/网站教程/内容

ASP.NET 打造互联网未来空间站(2)

网站教程2024-06-08 阅读
[摘要]我可以想象他是如何支持ASP.NET应用模型的,难道他也用ISAPI过滤器做一些事情吗?是的,他也用它做一些事情。我们也支持一种叫做ASP模块扩展点的技术。他基本上允许你像一个函数那样使用ISAPI过滤器。我们提及的很多例子,如替换Session State等工作都是在那个级别实现的。此外,重定向...
我可以想象他是如何支持ASP.NET应用模型的,难道他也用ISAPI过滤器做一些事情吗?
是的,他也用它做一些事情。我们也支持一种叫做ASP模块扩展点的技术。他基本上允许你像一个函数那样使用ISAPI过滤器。我们提及的很多例子,如替换Session State等工作都是在那个级别实现的。此外,重定向URL的工作也是在这个级别实现的。例如,我们的许多客户经常要为他们的用户提供个性化的URL,像financial institution站点就可以为他的顾客提供www.financialinstitution.com/scott这样的URL为一个名叫SCOTT的用户,因为他们不想创建太明显的路径,所以要借用重定向技术提供各种各样的不可视的URL,你可以在ASP.NET上实现这样的功能。

带有"/scott" URL,实际上被ASP.NET转换成他要去的地方,是吗?
是的,因此在实际运行前,你会有一些代码解析"/scott" 部分,转换成一个实际地址的页面,实际执行的是一个很普通的页面。这种方式可以使得所有的用户都得到个性化。我们有一个模块中的一个API可以为你解决这个问题。在这个问题上,我们也有一个扩展点。在ASP的时候,我们有一个叫做Global.asa的概念,他可以定义应用开始,应用结束,Session 开始,Session结束等事件。在ASP.NET中我们允许您将ISAPI过滤器功能加入Global.asa中,因此,如果您想继续重定向URL时候,你甚至不需要写一个模块了,你只需要在Global.asa中定义就足够了。
我们做的另一点是,努力提高安全水平并且允许更为灵活的认证,在过去,您使用ASP的时候,您主要用IIS来构建您的认证功能,这种认证实际上依赖NT SAM,在ASP.NET中,我们将安全模块放入ISAPI过滤器中,因此如果您想在一个main frame 或者在你有一些usernames/passwords的数据库中,并且是你自己做这种认证时,你可以在Global.asa中写入相关的信息或者在一个与那个事件同步的组件中加入相关信息。
因此,我可孕匆桓鑫易约河没氖菘饬耍⑶遥勾斜曜嫉娜现す獭?BR>是的,没错。如果你这样做了,你可以获得更多的东西,你不仅可以拥有了用户名字和口令,而且还会有角色(role)这样的东西。你可以将那些用户映射成角色,你可以使用这种方式而不是仅仅使用ACL的方式构建你的站点。你可以知道Joe 和 Mark(用户名)访问了这个页面,相反,你也可以知道这个页面被哪个角色访问了。你在数据库的主要工作就是告诉我们 Mark 的用户名和密码是什么,他在哪一组角色中,其余的工作由安全系统来考虑,以保证它可以访问那些网页或者服务。当然,这里需要提及的是,所有的架构,安全架构、caching架构都为网页和XML服务提供支持。
如果从性能角度来看,增加的这些东西,这些能力,可以提供更好的性能服务吗?
我们的确提供了更好的性能服务,当我们创建ASP.NET项目组时,我们就指定一个开发人员专门负责性能上的工作,我们当时使用的是早期的common language runtime,他每日的工作就是检查每项操作是变快了还是变慢了,并且与运行时(runtime)项目组一起查找问题,加速变慢了的操作。同时,他也指出性能上的问题。这样做的结果是ASP.NET比ASP要更快。所有的代码都是编译过的,编译成本地代码,不再用解释的方式。
是吗,那么说我在ASP.NET中写的程序代码再也不用解释的方式?
正确。此外,更好的是,您仍然可以像您从前那样在编辑器里面编写代码,点击SAVE存盘,然后剩下的事情都交给系统去处理。但是,对于剩下工作ASP与ASP.NET确有不同处理方式。ASP采用的是分析代码然后传给脚本引擎,在程序运行时解释代码;而ASP.NET则是传给编译器,然后在common language runtime上运行。在common language runtime上执行的是本地代码,因此你可以用VB编制程序获得与C++一样级别的性能。
那么,它是在什么时候编译,是在我存储文件并且NT文件系统发现文件变化时,还是页面第一次使用的时候?
当某人请求页面的时候发生。我们将会检查,是否某个页面已经被编译,如果没有编译,我们将会编译他。我们在ASP.NET中作了许多很有趣的工作,使得编译过程更有效率。因为我们编译了他,所以如果你为了使机器更可靠或者性能更好而重起机器或者shut down你的WEB服务器或者shut down你的进程时,你不用再编译你的那个页面了,因为我们已经检测到了该文件已经被编译和加载,这样可以获得更高的响应速度和更强的伸缩性,并且那也是因为把它放在CACHE的某个地方了。

下面我们在谈论一下性能。好,我们谈论一下性能,是的,从整体上看,性能是更优化了。我们也在可扩展性,可靠性,可获取性方面作了很多的工作。我们曾经有一个假设,在一个common language runtime上,即使有一个Session想要和所有与他相关的东西通信的话,应用程序的可靠性仍然变得很高。
我们还可以举些例子。例如,真正强大的类型检查。在一个可管理的环境中,如果出现数组越界的情况,系统将会抛出一个exception而不会产生一个垃圾内存。除此之外,我们还有更多的可靠性机制保证您的使用。例如,我们可以检测内存冲突,也就是内存在某一点徘徊。我们可以检测到死锁,你甚至可以配置系统以便在发生这样的情况的时候,你的机器可以每隔多长时间重起一次。因此,在出现这样的情况的时候,我们可以规定一小时一次、一天一次或者每隔200个请求一次等来启动一个应用程序的新的实例。然后允许旧的应用程序完成相关的任务后,新的程序接着进行。
保持这样的一个可靠性机制使得你不必中断任何为用户工作的服务。我们将会动态地生成一个新的进程,开始接受新的请求,老的进程完成当前运行的所有请求,然后我们将删除老的进程。在这样的过程中,为了提高效率,系统实际上作了RESET的工作。但是这个过程中,你不会看见管理人员的干涉。你的客户也不会感觉到任何变化,他们会认为,嗷,每一件事情都运行的这样好,服务器还在运行。用这样的方式,你就可以获得非常高的可靠性。
此外,我们在Session State上也有了一些改进,Session State不再需要和你的代码运行在同一个进程中。他可以作为一种服务运行在一台机器上,也可以作为一种服务运行在整个WEB服务器群中的某一台机器上,其他的前端机器可以共享该服务。

Session State只能存放在一台机器上吗?
不,不是的,如果需要的话可以在多台机器上保留。Session State可以在多台机器上存储,也可以有多台机器的前端去访问那些存储信息。

我是一个用户,我正在访问一台机器,我的Session State留在这台机器上,如果我下一次要访问另一台机器,Session State中的数据可以共享吗?
是的,这种工作方式是WEB群组最典型的工作方式。一个用户你可以访问机器A,等一会儿,你又会访问机器B,你的Session State保留在另外一台独立的机器上。Session State既可以运行在我们的Session State provider上面也可以运行在SQL Server上面,我们有一种方式可以让SQL Server成为Session信息的服务器。但是,前端的这两台机器,也可以是多台机器,都可以访问同样的Session State。

这样看来,我们可以通过这种方式共享数据了。
是的,正确。但是你可以想象一旦你拥有这种Session State,与你的ASP代码不在一个进程中运行的Session State,无论你的ASP程序遇到下面什么样的问题,程序崩溃、我们终止了你的代码运行、我们检测到某种资源漏洞或者锁定、我们所配置的一些事情(例如一小时一次)遇到问题时,你所有的Session依然是安全的。因为,你将你的Session State保存在另外一台独立的机器上了。
如果你只有一台机器,你也可以利用Session State的这种特点,你可以让他运行的进程与你的代码运行的进程不同,因此,只要进程到来时,他们就可以访问在安全保护进程中的Session State。
正如我们刚才提到的,Session State最重要的几个好处是:(1)可靠性。你不用再担心你的应用程序崩溃或者一个用户数据丢失这样的事情发生。(2)第二个好处是,现在,你的应用程序不必再局限于一台机器。如果你使用了Session State ,你的确可以将你的应用扩展到更多台的机器上,这样,就真的没有什么条件能够限制你了,也就是说,你不必再担心你的应用程序能够在多大范围内或者能够为多少用户提供正常服务这样的问题。
听了上面的讲解,我们好像做了两种不同的事情,一个是ASP.NET提供了许多新的功能和性能,人们可以充分利用这些新的特点;另外一个方面是,在这些功能和性能的后面,ASP.NET做了许多额外的工作,使得这些特征和功能发挥了更大的作用。
是这样的

对我来说,如果我已经有了一个ASP的WEB站点,如果他已经为我提供了满意的结果,我不想再改变程序中的任何东西,如果我将站点的整个框架更新到新的ASP.NET上或者类似的东西上,那么就意味着我的站点获得更多的鲁棒性。
是这样的,你说的的确是一个很有趣的观点。我确信,如果你是那个用户,你说那个站点的应用程序运行良好,我的确不想做任何改变,如果我需要升级到ASP.NET框架的时候,我只想在我的机器上安装这个ASP.NET即可。如果你这样做了,我们并不会替换你的机器上任何的ASP代码,因此ASP与ASP.NET运行在一台机器上。但是,你实际上将不得不将运行环境让位给ASP.NET,并且重新配置你的机器。尽管作这样的事情没有什么难的,但是你需要告诉我们你想让ASP.NET运行ASP的那些程序。因为,如果一个机器里已经存在了多个应用程序的时候,你再想安装一个新的运行环境,新的编译环境,和所有新的.NET的那些东西时,我们不能完全保证你的每个应用程序在升级后的环境中都运行良好,都带给你同样的性能。做服务器程序的开发人员将会用很长的时间调试他们的程序,以确保程序正常工作。
如果我是按照你们说的去做,那么,好,我安装了ASP.NET,我标记了我的文件,并且告诉他们:现在你们运行在ASP.NET的环境中,就算是我根本没有对文件作任何改变,我是否可以获得具有更高鲁棒性和更好柔韧性的解决方案?
是的,你将获得具有更高鲁棒性和更好柔韧性的解决方案。不过,在这里我要提及的一个重要的事情是,我们当前的解决方案不是百分之百地与ASP兼容。众所周知,尽管我们的ASP.NET与ASP之间具有非常非常的亲密关系,但是,最近几年里,当我们开发这个平台的时候,由于若干的总总原因,我们不得不牺牲一些兼容性。但是人们根本不会感觉到这些。在ASP.NET中,我们获得COOKIES的顺序实际上稍稍发生了一些变化。这一切正如我们期望的那样,不会有百分之百的兼容。不过最重要的是,无论发生了怎样的变化,如果你安装了ASP.NET后,你现有的代码和你现有的网页将依然会正常的工作。
从整体上看ASP.NET对你是有帮助的,但是由于它本身的一些小小的变化,你将不得不随之作一些小小的调整。我们会有一些自动化的工具帮助你完成这一切。但是,对于大型的应用来讲,毫无疑问,你要做一些改变。


让我们再一次回顾一下理解你的应用程序架构的一些关键的事情或者简单看看那些新的事物
很好,这是一个很有意思的部分。这其实是一种移植工作。你可以将一个页面,将你所掌握的技巧,将你能够你所做的一切,将你写的东西移植到ASP.NET上,你依然可以用同样的技巧,同样的技术,但是你将获得更高的性能。当人们开始了解这个平台的时候,我推荐给人们的是应该了解这个平台的所有特征。因为除了移植外,还有很多的新的特征。也可能不仅仅是移植的过程还有一点点重建的过程。例如,我们在前面提到了确认的过程,大多数的应用程序都可以用到不同程度的确认过程。但是,他将不再是“保留你原来的确认逻辑,并且让他运行的更快一些”,而是,完全被我们的确认组件所替代。
许多人都已经用ASP建立了他们自己的某种安全架构,他们可以用它来验证登录信息。现在当他们知道ASP.NET带有这种功能是,他们会说,这下可好了,我可以直接使用ASP.NET内嵌的认证功能了,在也不用我自己编的那些东西,不再用Session State跟踪用户信息。
Caching是与性能相关的的一项重要的功能,我前面没有提及,许多的开发人员非常努力并且使用了很多的非常好的技术试图弄明白一个页面的局部或者服务器上的整个一个页面的运行结果,以便当两个浏览器请求同一个特殊资源时,不必重新生成两次,我只要使用cache中的版本就可以了。在ASP.NET中,我们提供了一个对cache的支持。
我想说的基本也就这些,但是我认为他们是值得花时间的,特别是你想快速开始时,在SDK中,我们有大约900来个例子,这是一个很大的数目,我们有一些很大的端到端的应用程序,一个电子商务的应用,一个建立类似INTRANET门户框架的应用。我认为,认真研究这些应用程序,并且看看他们是如何构建的是一件很值得做的事情。因为你会发现你找到了很多技巧,意想不到地减少了你写代码的数量。使你的代码更干净。我想,你将会突然发现那些的确难以管理的50、60行的代码变成了5、6行清晰的代码,几周之后,你再回来看看时,一目了然。很容易弄清楚是什么意思。

小结:
关于ASP.NET最重要的事情是,首先,他使得开发人员的效率大大地提高了。他使得应用程序和系统的可靠性大大地增强了,有许多东西使得应用程序真的很容易配置。例如,当你的应用程序正在运行时,如果你复制一个DLL时,他没有被锁定,这样你的应用程序就可以平滑地移植到新版本上。举这个例子是为了说明可以真正地提高性能、可靠性、可用性、可扩展性。我想,所有这些能力都实际上是系统中最重要的事情。除此之外,我们还增加了大量的新的功能。我知道有很多的人看着ASP从1.0,2。0,到3.0成长的,他们今天看到ASP.NET时候会说,嗷,对于server对象或者response 对象以及其他类似的东西还有三种不同的方法。这就是新特征带给我们的巨大的财富。


……

相关阅读