组件的并排执行

能同时运行同一个组件的多种形式,这是CLR的一个非常有用的功能,它甚至能在同一个进程中执行同一个组件的两种版本。我们把这种功能称之为并排执行。由于该功能的实施,.NET Framework为开发人员提供了由于COM架构的地方。虽然过去也有进行并排执行的方法,但时在.NET中的并排执行却把开发人员从过去的烦琐中解脱了出来。通过在CLR信息通道中对并排执行处理,开发人员只要考虑应用程序中的特定业务代码就行了。

在创建组件的新版本时,开发人员无需因为必须与以前的版本保持兼容而考虑得太多。因为旧版本与新版本一起正常运行,而且使用该组件的应用程序知道该使用组件的哪一种版本,在同一台机器中两种版本可以和平共处。将组件的新版本与以前的版本并排执行,开发人员有几个事项需要注意一下。例如,如果组件依赖一个物理文件作为数据高速缓存,那么并排执行的组件就会视图访问同一个文件。在编写组件时应该注意将文件依据要执行的组件的版本存放在某个位置。在某些情况下,CLR所提供的功能优于COM。现在我们可以从用不同语言编写的类中派生出新对象,即使是我们只有基类的已编译版本也可以做到这一点,所以,这种并排执行的功能给我们编写组件的时候带来极大的方便。

对象的特性

服务器控件能够将其他对象以及基本类型作为特性开放。一个ASP.NET页面中的服务器控件声明能够直接通过两种方式设置某个对象特性的特性值。第一种方法是对属性名使用Object Walker语法,该方法使用连字符(-)来指定一个对象的特性。支持一个对象特性很简单。例如,这个简单的类定义允许使用特性A和B设置两个字符串值。通过使对象特性初始化,服务器控件就能用很少的代码将逻辑关联的属性组合在一起并方便地将它们在一个或多个控件上开放。典型的例子是大多数ASP.NET控件使用的style对象。大多数ASP.NET Web控件都支持该方法。然而,为了是其能够工作,我们需要使用ParseChildren属性指定一个true值来注释我们的服务器控件类定义。

网站建设编码中的传递回送数据

当回送发生并且某个控件有回送数据时,LoadPostData方法就会被调用。该方法为页面上所有需要访问回送数据的控件依次调用。如果控件因为被禁用等原因而没有获得任何回送数据,该方法不被调用。控件即使没有回送数据,也可以通过调用Page.RegisterRequiresPostBack方法,来显示要求调用该方法。
在网站建设编码中当回送发生并且某个控件有回送数据时,LoadPostData方法就会被调用。该方法为页面上所有需要访问回送数据的控件依次调用。如果控件因为被禁用等原因而没有获得任何回送数据,该方法不被调用。控件即使没有回送数据,也可以通过调用Page.RegisterRequiresPostBack方法,来显示要求调用该方法。

网站建设编码中如何创建子控件

在组合控件的生命周期的不同阶段中都可以调用CreateChildControls方法,但只能调用一次,除非我们使用ChildControlsCreated特性显示地重置控件状态,因此它是在控件生命周期发生的不确定事件。而不像Init及Render事件,在页面的生命周期中发生的固定的时间段,而且是确定性的。

如果CreateChildControls方法在执行的过程中未被调用,那么在页面预显示阶段则一定要被调用。如果调用了控件的公有FindControl方法,或者Control自己调用了受保护的EnsureChildControls方法,该方法将在这之前被调用。当回送数据被返回某个控件时,FindControls方法将被调用,所以如果有与某个给定控件相关联的回送数据,在页面的回送阶段CreateChildControls也将被调用。

网站建设中使用视图状态

网站建设中在一个ASP.NET页面被显示出来以后,曾经创建了该页面以及所有的服务器控件的页面对象就被破坏了。当回送发生时,一个新的页面对象和新的服务器控件对象就被创建出来。在编写一个服务器控件时我们常常需要保持和管理状态。因为控件随着每个页面请求被创建,然后被破坏,因此在对象成员变量中存储的状态将丢失。如果一个控件想要保持状态,它就必须用别的方法来做这件事。就像我们在文本框控件中看到的那样,管理状态的方法之一是使用回送。当一个回送发生时,任何与控件相关联的回送数据都经由IPostBackData接口而对控件可用。控件因此可以重新填充它的类变量,使控件保持状态。

创建服务器控件的原因

作为一个ASP.NET开发人员,我们真正要做的决定是:是让ASP.NET自动为我们建立服务器控件,(仅仅通过使用ASP.NET页面以及(或者)用户控件建立我们的站点),还是由我们自己创建控件。在后一种情况下,我们可以综合使用ASP.NET页面、用户控件以及自定义服务器控件建立我们的站点。所以,为什么要建立服务器控件是没有绝对的答案的。但是我认为主要有一下几点原因供大家参考:

1、ASP.NET控件支持细粒度级别的黑盒复用。ASP.NET用户控件以及页面同样能够提供这项复用功能,但由于它们的粒度要粗糙得多,并且有固定的UI特征(尽管用户控件支持模版,页面却不支持),所以,它们可能提供的复用功能要少得多。

Web服务常见的问题

要通过XML和HTTP解决显示应用程序逻辑或细节信息的问题并不困难。过去,我们使用诸如ASP、JAVA或Perl这样的语言编写一个简单的应用程序,此程序可以通过XML显示数据。例如,可以使用ASP编写简单的应用程序,接受查询字符串的值,并生成代表具体数据库表的XML返回文档。应用程序可以简单地调用终点(比如,显示数据库表的URL),并从文档中获取、分析和派生值。

但是这种设计方式是与其他因素紧密联系的。客户机希望得到高度结构化的XML文档,如果提供这种文档的应用程序发生了变化,则客户机实现就很有可能中断。在大多数情况下,可以通过使用公共XML模式解决这个问题,但是为不同的应用程序分别维护和管理不同的模式国语麻烦。而且,XML文档还依赖于服务器的实现方式。

缺省线程模型

在缺省模型中,只载入servlet(或JSP)的单一实例。Servlet引擎维护线程池,当请求到达时将其设置到请求。每个线程运行适当的服务方法,典型为donget()或dopost()。在高峰活动期,许多请求可能通过同一个servlet方法在同时运行,但因为每个线程都有其自己的指令指针和本地变量栈,请求间不会发生冲突。缺省模型提供好的吞吐率,但存在一些限制。因为只有一个servlet实例,任意实例变量只存在一个副本。如果考虑不谨慎,代码允许写入变量,一个线程覆盖了另一个线程所需的值。写入和读取就可能发生重叠。还有,如果donget()或dopost()方法调用子过程,它必须将所有必要对象作为参数传递,因为从其被写入知道子过程读取它们为止,不能依赖实例变量保留其值。

XML解决的问题

早期的文本处理格式经常不会区分内容和表示。例如,RTF具有类似于表格和列表的结构化数据编码以及字体和图像编码。HTML也遇到了同样的问题。类似于table标签、tr标签和td标签具有指定宽度和长度属性的元素通常用于对web页面的物理布局产生影响,而不是以列表风格将相关条目分组。

此方法的问题是当需要新的输出格式时,包含在文档中的格式化信息变得毫无用处。更糟的是,最初设计来传送结构化信息的标签只是因为其边界影响会被无用,如使用UL标签时产生缩进。

比较起来,XML则完全基于结构。特定数据元素可被清晰标识并通过文本搜索应用抽取出来。如果一个XML文档需要交付给web浏览器,可使用XSL样式单编程将其转换为HTML。如果文档需要用于一个事务处理系统,可通过XML解析器解析它,该解析器抽取指定域完成事物处理。XML文档可作为一个树型结构加以浏览或将其压缩成关系型数据库表格。只要使用文档的应用知道其编写语言,应用就可以找到并抽取所需数据。

XML解析器

为使用应用中的XML文档,需要对其进行解析。一个XML解释器读取文档并将其分隔称为开始标签、属性、体内容和结束标签。解析器具有应用程序接口,使用户可以不必自己去解释输入流的复杂性而轻松抽取所需元素。存在两种常用的XML解析器模型:1、DOM文档对象模型。2、SAX,XML的简单API。

文档对象模型(DOM)是内存中文档的W3C标准表示法。与文本字符串不同,DOM将文档表示成一个节点树。该树可按任意次序遍历。节点可被增加和删除并且已修改DOM树可被保存为新文档。DOM规范有不同的版本,由级别指定。DOM级别1是核心特性集,提供和访问文档元素的方式。DOM级别2作为W3C推荐产品被批准,增加了对名空间的支持。