1. 数据库访问性能优化
数据库的连接和关闭
访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能。因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接限制的情况。
使用存储过程
存储过程是存储在服务器上的一组预编译的SQL语句,类似于DOS系统中的批处理文件。存储过程具有对数据库立即访问的功能,信息处理极为迅速。使用存储过程可以避免对命令的多次编译,在执行一次后其执行规划就驻留在高速缓存中,以后需要时只需直接调用缓存中的二进制代码即可。另外,存储过程在服务器端运行,独立于ASP.NET程序,便于修改,最重要的是它可以减少数据库操作语句在网络中的传输。
优化查询语句
ASP.NET中ADO连接消耗的资源相当大,SQL语句运行的时间越长,占用系统资源的时间也越长。因此,尽量使用优化过的SQL语句以减少执行时间。比如,不在查询语句中包含子查询语句,充分利用索引等。
2. 字符串操作性能优化
使用值类型的ToString方法
在连接字符串时,经常使用"+"号直接将数字添加到字符串中。这种方法虽然简单,也可以得到正确结果,但是由于涉及到不同的数据类型,数字需要通过装箱操作转化为引用类型才可以添加到字符串中。但是装箱操作对性能影响较大,因为在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建的对象中。使用值类型的ToString方法可以避免装箱操作,从而提高应用程序性能。
运用StringBuilder类
String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过ToString方法返回操作结果。
其定义及操作语句如下所示:
int num;
System.Text.StringBuilder str = new System.Text.StringBuilder(); //创建字符串
str.Append(num.ToString()); //添加数值num
Response.Write(str.ToString); //显示操作结果
3. 优化 Web 服务器计算机和特定应用程序的配置文件以符合您的特定需要
默认情况下,ASP.NET 配置被设置成启用最广泛的功能并尽量适应最常见的方案。因此,应用程序开发人员可以根据应用程序所使用的功能,优化和更改其中的某些配置,以提高应用程序的性能。下面的列表是您应该考虑的一些选项。
仅对需要的应用程序启用身份验证。
默认情况下,身份验证模式为 Windows,或集成 NTLM。大多数情况下,对于需要身份验证的应用程序,最好在 Machine.config 文件中禁用身份验证,并在 Web.config 文件中启用身份验证。根据适当的请求和响应编码设置来配置应用程序。ASP.NET 默认编码格式为 UTF-8。如果您的应用程序为严格的 ASCII,请配置应用程序使用 ASCII 以获得稍许的性能提高。
考虑对应用程序禁用 AutoEventWireup。
在 Machine.config 文件中将 AutoEventWireup 属性设置为 false,意味着页面不将方法名与事件进行匹配和将两者挂钩(例如 Page_Load)。如果页面开发人员要使用这些事件,需要在基类中重写这些方法(例如,需要为页面加载事件重写 Page.OnLoad,而不是使用 Page_Load 方法)。如果禁用 AutoEventWireup,页面将通过将事件连接留给页面作者而不是自动执行它,获得稍许的性能提升。
从请求处理管线中移除不用的模块。
默认情况下,服务器计算机的 Machine.config 文件中 节点的所有功能均保留为激活。根据应用程序所使用的功能,您可以从请求管线中移除不用的模块以获得稍许的性能提升。检查每个模块及其功能,并按您的需要自定义它。例如,如果您在应用程序中不使用会话状态和输出缓存,则可以从 列表中移除它们,以便请求在不执行其他有意义的处理时,不必执行每个模块的进入和离开代码。
4. 一定要禁用调试模式
在部署生产应用程序或进行任何性能测量之前,始终记住禁用调试模式。如果启用了调试模式,应用程序的性能可能受到非常大的影响。
5. 对于广泛依赖外部资源的应用程序,请考虑在多处理器计算机上启用网络园艺
ASP.NET 进程模型帮助启用多处理器计算机上的可缩放性,将工作分发给多个进程(每个CPU一个),并且每个进程都将处理器关系设置为其 CPU。此技术称为网络园艺。如果应用程序使用较慢的数据库服务器或调用具有外部依赖项的 COM 对象(这里只是提及两种可能性),则为您的应用程序启用网络园艺是有益的。但是,在决定启用网络园艺之前,您应该测试应用程序在网络园中的执行情况。
6. 只要可能,就缓存数据和页输出
ASP.NET 提供了一些简单的机制,它们会在不需要为每个页请求动态计算页输出或数据时缓存这些页输出或数据。另外,通过设计要进行缓存的页和数据请求(特别是在站点中预期将有较大通讯量的区域),可以优化这些页的性能。与 .NET Framework 的任何 Web 窗体功能相比,适当地使用缓存可以更好的提高站点的性能,有时这种提高是超数量级的。使用 ASP.NET 缓存机制有两点需要注意。首先,不要缓存太多项。缓存每个项均有开销,特别是在内存使用方面。不要缓存容易重新计算和很少使用的项。其次,给缓存的项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转,并且经常导致更多的代码清除和垃圾回收工作。若关心此问题,请监视与 ASP.NET Applications 性能对象关联的 Cache Total Turnover Rate 性能计数器。高周转率可能说明存在问题,特别是当项在到期前被移除时。这也称作内存压力。
7. 选择适合页面或应用程序的数据查看机制
根据您选择在 Web 窗体页显示数据的方式,在便利和性能之间常常存在着重要的权衡。例如,DataGrid Web 服务器控件可能是一种显示数据的方便快捷的方法,但就性能而言它的开销常常是最大的。在某些简单的情况下,您通过生成适当的 HTML 自己呈现数据可能很有效,但是自定义和浏览器定向会很快抵销所获得的额外功效。Repeater Web 服务器控件是便利和性能的折衷。它高效、可自定义且可编程。
8. 将 SqlDataReader 类用于快速只进数据游标
SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法。如果当创建 ASP.NET 应用程序时出现允许您使用它的情况,则 SqlDataReader 类提供比 DataSet 类更高的性能。情况之所以这样,是因为 SqlDataReader 使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。另外,SqlDataReader 类实现 IEnumerable 接口,该接口也允许您将数据绑定到服务器控件。有关更多信息,请参见 SqlDataReader 类。有关 ASP.NET 如何访问数据的信息,请参见通过 ASP.NET 访问数据。
9. 将 SQL Server 存储过程用于数据访问
在 .NET Framework 提供的所有数据访问方法中,基于 SQL Server 的数据访问是生成高性能、可缩放 Web 应用程序的推荐选择。使用托管 SQL Server 提供程序时,可通过使用编译的存储过程而不是特殊查询获得额外的性能提高。
10. 避免单线程单元 (STA) COM 组件
默认情况下,ASP.NET 不允许任何 STA COM 组件在页面内运行。若要运行它们,必须在 .aspx 文件内将 ASPCompat=true 属性包含在 @ Page 指令中。这样就将执行用的线程池切换到 STA 线程池,而且使 HttpContext 和其他内置对象可用于 COM 对象。前者也是一种性能优化,因为它避免了将多线程单元 (MTA) 封送到 STA 线程的任何调用。使用 STA COM 组件可能大大损害性能,应尽量避免。若必须使用 STA COM 组件,如在任何 interop 方案中,则应在执行期间进行大量调用并在每次调用期间发送尽可能多的信息。另外,小心不要在构造页面期间创建任何 STA COM 组件。例如下面的代码中,在页面构造时将实例化由某个线程创建的 MySTAComponent,而该线程并不是将运行页面的 STA 线程。这可能对性能有不利影响,因为要构造页面就必须完成 MTA 和 STA 线程之间的封送处理。
Dim myComp as new MySTAComponent() Public Sub Page_Load() myComp.Name = "Bob" End Sub
首选机制是推迟对象的创建,直到以后在 STA 线程下执行上述代码,如下面的例子所示。
Dim myComp Public Sub Page_Load() myComp = new MySTAComponent() myComp.Name = "Bob" End Sub
推荐的做法是在需要时或者在 Page_Load 方法中构造任何 COM 组件和外部资源。永远不要将任何 STA COM 组件存储在可以由构造它的线程以外的其他线程访问的共享资源里。这类资源包括像缓存和会话状态这样的资源。即使 STA 线程调用 STA COM 组件,也只有构造此 STA COM 组件的线程能够实际为该调用服务,而这要求封送处理对创建者线程的调用。此封送处理可能产生重大的性能损失和可伸缩性问题。在这种情况下,请研究一下使 COM 组件成为 MTA COM 组件的可能性,或者更好的办法是迁移代码以使对象成为托管对象。
11. 将调用密集型的 COM 组件迁移到托管代码
.NET Framework 提供了一个简单的方法与传统的 COM 组件进行交互。其优点是可以在保留现有投资的同时利用新的平台。但是在某些情况下,保留旧组件的性能开销使得将组件迁移到托管代码是值得的。每一情况都是不一样的,决定是否需要迁移组件的最好方法是对 Web 站点运行性能测量。建议您研究一下如何将需要大量调用以进行交互的任何COM 组件迁移到托管代码。许多情况下不可能将旧式组件迁移到托管代码,特别是在最初迁移 Web 应用程序时。在这种情况下,最大的性能障碍之一是将数据从非托管环境封送到托管环境。因此,在交互操作中,请在任何一端执行尽可能多的任务,然后进行一个大调用而不是一系列小调用。例如,公共语言运行库中的所有字符串都是 Unicode 的,所以应在调用托管代码之前将组件中的所有字符串转换成 Unicode 格式。另外,一处理完任何 COM 对象或本机资源就释放它们。这样,其他请求就能够使用它们,并且最大限度地减少了因稍后请求垃圾回收器释放它们所引起的性能问题。
12. 在 Visual Basic .NET 或 JScript. 代码中使用早期绑定
以往,开发人员喜欢使用 Visual Basic、VBScript. 和 JScript. 的原因之一就是它们所谓“无类型”的性质。变量不需要显式类型声明,并能够简单地通过使用来创建它们。当从一个类型到另一个类型进行分配时,转换将自动执行。不过,这种便利会大大损害应用程序的性能。Visual Basic 现在通过使用 Option Strict 编译器指令来支持类型安全编程。为了向后兼容,默认情况下,ASP.NET 不启用该选项。但是,为了得到最佳性能,强烈建议在页中启用该选项。若要启用 Option Strict,请将 Strict 属性包括在 @ Page 指令中,或者,对于用户控件,请将该属性包括在 @ Control 指令中。下面的示例演示了如何设置该属性,并进行了四个变量调用以显示使用该属性是如何导致编译器错误的。
JScript. .NET 也支持无类型编程,但它不提供强制早期绑定的编译器指令。若发生下面任何一种情况,则变量是晚期绑定的:被显式声明为 Object,是无类型声明的类的字段,是无显式类型声明的专用函数或方法成员,并且无法从其使用推断出类型。 最后一个差别比较复杂,因为如果 JScript. .NET 编译器可以根据变量的使用情况推断出类型,它就会进行优化。在下面的示例中,变量 A 是早期绑定的,但变量 B 是晚期绑定的。
var A;
var B;
A = "Hello";
B = "World";
B = 0;
为了获得最佳的性能,当声明 JScript. .NET 变量时,请为其分配一个类型。例如,var A : String。
13. 使请求管线内的所有模块尽可能高效
请求管线内的所有模块在每次请求中都有机会被运行。因此,当请求进入和离开模块时快速地触发代码至关重要,特别是在不使用模块功能的代码路径里。分别在使用及不使用模块和配置文件时执行吞吐量测试,对确定这些方法的执行速度非常有用。
14. 使用 HttpServerUtility.Transfer 方法在同一应用程序的页面间重定向
采用 Server.Transfer 语法,在页面中使用该方法可避免不必要的客户端重定向。
15. 必要时调整应用程序每个辅助进程的线程数
ASP.NET 的请求结构试图在执行请求的线程数和可用资源之间达到一种平衡。已知一个使用足够 CPU 功率的应用程序,该结构将根据可用于请求的 CPU 功率,来决定允许同时执行的请求数。这项技术称作线程门控。但是在某些条件下,线程门控算法不是很有效。通过使用与 ASP.NET Applications 性能对象关联的 Pipeline Instance Count 性能计数器,可以在 PerfMon 中监视线程门控。当页面调用外部资源,如数据库访问或 XML Web services 请求时,页面请求通常停止并释放 CPU。如果某个请求正在等待被处理,并且线程池中有一个线程是自由的,那么这个正在等待的请求将开始被处理。遗憾的是,有时这可能导致 Web 服务器上存在大量同时处理的请求和许多正在等待的线程,而它们对服务器性能有不利影响。通常,如果门控因子是外部资源的响应时间,则让过多请求等待资源,对 Web 服务器的吞吐量并无帮助。为缓和这种情况,可以通过更改 Machine.config 配置文件节点的 maxWorkerThreads 和 maxIOThreads 属性,手动设置进程中的线程数限制。
注意:辅助线程是用来处理 ASP.NET 请求的,而 IO 线程则是用于为来自文件、数据库或 XML Web services 的数据提供服务的。分配给这些属性的值是进程中每个 CPU 每类线程的最大数目。对于双处理器计算机,最大数是设置值的两倍。对于四处理器计算机,最大值是设置值的四倍。无论如何,对于有四个或八个 CPU 的计算机,最好更改默认值。对于有一个或两个处理器的计算机,默认值就可以,但对于有更多处理器的计算机的性能,进程中有一百或两百个线程则弊大于利。注意进程中有太多线程往往会降低服务器的速度,因为额外的上下文交换导致操作系统将 CPU 周期花在维护线程而不是处理请求上。
16. 适当地使用公共语言运行库的垃圾回收器和自动内存管理
小心不要给每个请求分配过多内存,因为这样垃圾回收器将必须更频繁地进行更多的工作。另外,不要让不必要的指针指向对象,因为它们将使对象保持活动状态,并且应尽量避免含 Finalize 方法的对象,因为它们在后面会导致更多的工作。特别是在 Finalize 调用中永远不要释放资源,因为资源在被垃圾回收器回收之前可能一直消耗着内存。最后这个问题经常会对 Web 服务器环境的性能造成毁灭性的打击,因为在等待 Finalize 运行时,很容易耗尽某个特定的资源。
17. 如果有大型 Web 应用程序,可考虑执行预批编译
每当发生对目录的第一次请求时都会执行批编译。如果目录中的页面没有被分析并编译,此功能会成批分析并编译目录中的所有页面,以便更好地利用磁盘和内存。如果这需要很长时间,则将快速分析并编译单个页面,以便请求能被处理。此功能带给 ASP.NET 性能上的好处,因为它将许多页面编译为单个程序集。从已加载的程序集访问一页比每页加载新的程序集要快。批编译的缺点在于:如果服务器接收到许多对尚未编译的页面的请求,那么当 Web 服务器分析并编译它们时,性能可能较差。为解决这个问题,可以执行预批编译。为此,只需在应用程序激活之前向它请求一个页面,无论哪页均可。然后,当用户首次访问您的站点时,页面及其程序集将已被编译。没有简单的机制可以知道批编译何时发生。需一直等到 CPU 空闲或者没有更多的编译器进程(例如 csc.exe(C# 编译器)或 vbc.exe(Visual Basic 编译器))启动。还应尽量避免更改应用程序的 /bin 目录中的程序集。更改页面会导致重新分析和编译该页,而替换 /bin 目录中的程序集则会导致完全重新批编译该目录。在包含许多页面的大规模站点上,更好的办法可能是根据计划替换页面或程序集的频繁程度来设计不同的目录结构。不常更改的页面可以存储在同一目录中并在特定的时间进行预批编译。经常更改的页面应在它们自己的目录中(每个目录最多几百页)以便快速编译。Web 应用程序可以包含许多子目录。批编译发生在目录级,而不是应用程序级。
18. 不要依赖代码中的异常
因为异常大大地降低性能,所以您不应该将它们用作控制正常程序流程的方式。如果有可能检测到代码中可能导致异常的状态,请执行这种操作。不要在处理该状态之前捕获异常本身。常见的方案包括:检查 null,分配给将分析为数字值的 String 一个值,或在应用数学运算前检查特定值。下面的示例演示可能导致异常的代码以及测试是否存在某种状态的代码。两者产生相同的结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
try
{
result = 100 / num;
}
catch
(Exception e)
{
result = 0;
}
// ...to this.
if
(num != 0)
result = 100 / num;
else
result = 0;
|
19. 使用 HttpResponse.Write 方法进行字符串串联
该方法提供非常有效的缓冲和连接服务。但是,如果您正在执行广泛的连接,请使用多个 Response.Write 调用。下面示例中显示的技术比用对 Response.Write 方法的单个调用连接字符串更快。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Response.Write(
"a"
);
Response.Write(myString);
Response.Write(
"b"
);
Response.Write(myObj.ToString());
Response.Write(
"c"
);
Response.Write(myString2);
Response.Write(
"d"
);
|
20. 除非有特殊的原因要关闭缓冲,否则使其保持打开
禁用 Web 窗体页的缓冲会导致大量的性能开销。
21. 只在必要时保存服务器控件视图状态
自动视图状态管理是服务器控件的功能,该功能使服务器控件可以在往返过程上重新填充它们的属性值(您不需要编写任何代码)。但是,因为服务器控件的视图状态在隐藏的窗体字段中往返于服务器,所以该功能确实会对性能产生影响。您应该知道在哪些情况下视图状态会有所帮助,在哪些情况下它影响页的性能。例如,如果您将服务器控件绑定到每个往返过程上的数据,则将用从数据绑定操作获得的新值替换保存的视图状态。在这种情况下,禁用视图状态可以节省处理时间。默认情况下,为所有服务器控件启用视图状态。若要禁用视图状态,请将控件的EnableViewState 属性设置为 false,如下面的 DataGrid 服务器控件示例所示。
您还可以使用 @ Page 指令禁用整个页的视图状态。当您不从页回发到服务器时,这将十分有用:
注意:@ Control 指令中也支持 EnableViewState 属性,该指令允许您控制是否为用户控件启用视图状态。若要分析页上服务器控件使用的视图状态的数量,请(通过将 trace="true" 属性包括在 @ Page 指令中)启用该页的跟踪并查看 Control Hierarchy 表的 Viewstate 列。有关跟踪和如何启用它的信息,请参见 ASP.NET 跟踪。
22. 避免到服务器的不必要的往返过程
虽然您很可能希望尽量多地使用 Web 窗体页框架的那些节省时间和代码的功能,但在某些情况下却不宜使用 ASP.NET 服务器控件和回发事件处理。通常,只有在检索或存储数据时,您才需要启动到服务器的往返过程。多数数据操作可在这些往返过程间的客户端上进行。例如,从 HTML 窗体验证用户输入经常可在数据提交到服务器之前在客户端进行。通常,如果不需要将信息传递到服务器以将其存储在数据库中,那么您不应该编写导致往返过程的代码。如果您开发自定义服务器控件,请考虑让它们为支持 ECMAScript. 的浏览器呈现客户端代码。通过以这种方式使用服务器控件,您可以显著地减少信息被不必要的发送到 Web 服务器的次数。
使用 Page.IsPostBack 避免对往返过程执行不必要的处理
如果您编写处理服务器控件回发处理的代码,有时可能需要在首次请求页时执行其他代码,而不是当用户发送包含在该页中的 HTML 窗体时执行的代码。根据该页是否是响应服务器控件事件生成的。
使用 Page.IsPostBack 属性有条件地执行代码
例如,下面的代码演示如何创建数据库连接和命令,该命令在首次请求该页时将数据绑定到 DataGrid 服务器控件。
1
|
void
Page_Load(Object sender, EventArgs e) {
// Set up a connection and command here. if (!Page.IsPostBack) { String query = "select * from Authors where FirstName like '%JUSTIN%'"; myCommand.Fill(ds, "Authors"); myDataGrid.DataBind(); } }
|
由于每次请求时都执行 Page_Load 事件,上述代码检查 IsPostBack 属性是否设置为 false。如果是,则执行代码。如果该属性设置为 true,则不执行代码。注意 如果不运行这种检查,回发页的行为将不更改。Page_Load 事件的代码在执行服务器控件事件之前执行,但只有服务器控件事件的结果才可能在输出页上呈现。如果不运行该检查,仍将为 Page_Load 事件和该页上的任何服务器控件事件执行处理。
23. 当不使用会话状态时禁用它
并不是所有的应用程序或页都需要针对于具体用户的会话状态,您应该对任何不需要会话状态的应用程序或页禁用会话状态。 若要禁用页的会话状态,请将 @ Page 指令中的 EnableSessionState 属性设置为 false。例如:
注意:如果页需要访问会话变量,但不打算创建或修改它们,则将@ Page 指令中的 EnableSessionState 属性设置为ReadOnly。还可以禁用 XML Web services 方法的会话状态。有关更多信息,请参见使用 ASP.NET 和 XML Web services 客户端创建的 XML Web services。若要禁用应用程序的会话状态,请在应用程序 Web.config 文件的 sessionstate 配置节中将 mode 属性设置为 off。例如:
24. 仔细选择会话状态提供程序
ASP.NET 为存储应用程序的会话数据提供了三种不同的方法:进程内会话状态、作为 Windows 服务的进程外会话状态和 SQL Server 数据库中的进程外会话状态。每种方法都有自己的优点,但进程内会话状态是迄今为止速度最快的解决方案。如果只在会话状态中存储少量易失数据,则建议您使用进程内提供程序。进程外解决方案主要用于跨多个处理器或多个计算机缩放应用程序,或者用于服务器或进程重新启动时不能丢失数据的情况。有关更多信息,请参见 ASP.NET 状态管理。
25. 不使用不必要的Server Control
ASP.net中,大量的服务器端控件方便了程序开发,但也可能带来性能的损失,因为用户每操作一次服务器端控件,就产生一次与服务器端的往返过程。因此,非必要,应当少使用Server Control。
26. ASP.NET应用程序性能测试
在对ASP.NET应用程序进行性能测试之前,应确保应用程序没有错误,而且功能正确。具体的性能测试可以采用以下工具进行:Web Application Strees Tool (WAS)是Microsoft发布的一个免费测试工具,可以从http://webtool.rte.microsoft.com/上下载。它可以模拟成百上千个用户同时对web应用程序进行访问请求,在服务器上形成流量负载,从而达到测试的目的,可以生成平均TTFB、平均TTLB等性能汇总报告。Application Center Test (ACT) 是一个测试工具,附带于Visual Studio.NET的企业版中,是Microsoft正式支持的web应用程序测试工具。它能够直观地生成图表结果,功能比WAS多,但不具备多个客户机同时测试的能力。服务器操作系统"管理工具"中的"性能"计数器,可以对服务器进行监测以了解应用程序性能。
结论:
对于网站开发人员来说,在编写ASP.NET应用程序时注意性能问题,养成良好的习惯,提高应用程序性能,至少可以推迟必需的硬件升级,降低网站的成本。
Asp.NET细节性问题技巧精萃
1.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法
答: < %#... %>: 是在绑定控件DataBind()方法执行时被执行,用于数据绑定
如: < %# Container.DataItem("tit") %>
< %= %>: 在程序执行时被调用,可以显示后台变量值
如:
*.aspx中: < %= aaa %>
*.cs中: protected string aaa="姓名";
< % %>: 内联代码块里面可以在页面文件*.aspx或*.ascx文件里面嵌入后台代码
如:
< %
for(int i=0;i<100;i++)
{
Reaponse.Write(i.ToString());
}
%>
< %@ %>是在*.aspx页面前台代码导入命名空间,
如:
< %@ Import namespace="System.Data"%>
2.控件接收哪些类型数据?
答:接收Bind的控件,一般有DropDownList,DataList,DataGrid,ListBox这些集合性质的控件,而被捆绑 的主要是ArrayList(数组),Hashtable(哈稀表),DataView(数据视图),DataReader这四个,以后我们就可以 对号入座,不会出现DataTable被捆绑的错误了:)
DropDownList------ArrayList(数组)
DataList-------Hashtable(哈稀表)
DataGrid-------DataView(数据视图)
ListBox-------DataView(数据视图)
3.DataBind,获得的数据,系统会将其默认为String,怎样转化为其它的类型?
DataBinder.Eval(Container.DataItem,"转换的类型","格式")
最后一个"格式"是可选的,一般不用去管他,Container.DataItem是捆绑的数据项,"转换类型"指的是 Integer,String,Boolean这一类东西.
4.主要命名空间:
< % @ Import Namespace="System.Data" %> 处理数据时用到
< % @ Import Namespace="System.Data.ADO" % > 使用ADO.net ; 时用到
< % @ Import Namespace="System.Data.SQL" %> SQL Server 数据库专用
< % @ Import Namespace="System.Data.XML" %> 不用看处理XML用到
< % @ Import Namespace="System.IO" %> 处理文件时用到
< % @ Import Namespace="System.Web.Util" %> 发邮件时大家会用到
< % @ Import Namespace="System.Text" %> 文本编码时用到
5.Connections(SQLConection 或者 ADOConnection)的常用属性和方法:
| ConnectionString 取得或设置连结数据库的语句
| ConnectionTimeout 取得或设置连结数据库的最长时间,也是就超时时间
| DataBase 取得或设置在数据库服务器上要打开的数据库名
| DataSource 取得或设置DSN,大家不会陌生吧:)
| Password 取得或设置密码
| UserID 取得或设置登陆名
| State 取得目前联结的状态
| Open() 打开联结
| Close() 关闭联结
| Clone() 克隆一个联结。(呵呵,绵羊可以Connection我也可以)
示例:
SQLConnection myConnection = new SQLConnection();
myConnection.DataSource = "mySQLServer";
myConnection.Password = "";
myConnection.UserID = "sa";
myConnection.ConnectionTimeout = 30;
myConnection.Open();
myConnection.Database = "northwind";
myConnection.IsolationLevel = IsolationLevel.ReadCommitted
6.Command常用的方法和属性
| ActiveConnection 取得或设置联结Connections
| CommandText 执行的SQL语句或储存过程(StoredProcedure)名
| CommandTimeout 执行的最长时间
| CommandType Command操作的类型(StoredProcedure,Text,TableDirect)三种,默认Text
| Parameters 操作储存过程时使用
| Execute() 执行SQL语句或储存过程
| ExecuteNonQuery() 同上,区别在于不返回记录集
| Clone() 克隆Command
示例:
string mySelectQuery = "SELECT * FROM Categories ORDER BY CategoryID";
stringmyConnectString="userid=sa;password=;database=northwind;server=mySQLServer";
SQLCommand myCommand = new SQLCommand(mySelectQuery);
myCommand.ActiveConnection = new SQLConnection(myConnectString);
myCommand.CommandTimeout = 15;
myCommand.CommandType = CommandType.Text;< /FONT >
7.打开和关闭数据库两种方法:
1.MyConnection.Open(); //打开联结
MyConnection.Close();
2.MyCommand.ActiveConnection.Open();
MyCommand.ActiveConnection.Close()
8.使用DataSet,在数据库中增加、修改、删除一个数据
a.添加数据
DataRow dr=MyDataSet.Tables["UserList"].NewRow();
dr["UserName"] = "周讯";
dr["ReMark"] = "100";
dr["Comment"] = "漂亮MM";
MyDataSet.Tables.Rows.Add(dr);
b.修改数据
MyDataSet.Tables["UserList"].Rows[0]["UserName"]="飞刀大哥";
c.删除数据
MyDataSet.Tables["UserList"],Rows[0].Delete();
d.恢复数据
if(MyDataSet.HasErrors)
{
MyDataSet.RejectChanges();
}
e.探测DataSet是否有改动
if(MyDataSet.HasChanges)
{
//保存代码
}else{
//因为没有变化,所以不用保存,以节省时间
}
f.更新数据库
MyComm.Update(MyDataSet); //更新数据库中所有的表
MyComm.Update(MyDataSet,"UserList"); //更新某个表
9.DataGrid实现分页功能
AllowPaging="True" //是指允许分页,这个是最主要的。有了它,我们才能分页。
PageSize="5" //是指定每页显示的记录数,如果不写,就会默认为10条。
PagerStyle-HorizontalAlign="Right" //是指定分面显示的定位,默认是Left
PagerStyle-NextPageText="下一页" //把<>改为上一页和下一页字符串
PagerStyle-PrevPageText="上一页"
PagerStyle-Mode="NumericPages" //把<>改为123数字显示
10.显示一共有多少页,并且报告当前为第几页
当前页是:< %=DataGrid1.CurrentPageIndex+1%>
总页数是:< %=DataGrid1.PageCount%>
11.个性化分页
程序员大本营之"亲密接触ASP.Net(14)"有完整代码
12.要将页面重置为有效的状态
IValidator val;
foreach(val in Validators)
{
Val.IsValid = true;
}
13.重新执行整个验证序列
IValidator val;
foreach(val in Validators)
{
Val.Validate();
}
14.禁用客户端验证
< %@ Page Language="c#" clienttarget=downlevel %>
15.Repeater、DataList和DataGrid控件用途"
这些控件可以简化几种常见的 Web 应用程序方案,包括报表、购物车、产品列表、查询
结果和导航菜单。 Repeater是唯一允许在其模板中存在 HTML片段的控件.
16.Server.Execute("another.aspx")和Server.Transfer("another.aspx")区别:
Execute是从当前页面转移到指定页面,并将执行返回到当前页面
Transfer是将执行完全转移到指定页面
17.XML文件中可以自己存有架构,也可以存在于*.xsl文件中,但必须通过xmlns属性在xml文档的根节点中指定该信息,如下所示:
18.XML文件的读取
FileStream myfs=new Filestream(Server.MapPath("xmldtagrid.xml"),FileMode.Open,FileAccess.Read);
StreamReader myreader=new StreamReader(myfs);
DataSet myds=new DataSet();
myds.ReadXml(myreader);
19.正则表达式 控件RegularExpressionValidator
符号 含义
^ 指定检查开始处
$ 指定检查结束处
[] 检查输入的值是否与方括弧中的字符之一相匹配
/W 允许输入任何值
/d{} "/d"指定输入的值是一个数字,{}表示已指定数据类型的出现次数
+ 表明一个或多个元素将被添加到正在检查的表达式
示例:电子邮件格式(具有@号,且以.com/.net/.org/.edu结尾)
validationexpression="^[/w-]+@[/w-]+/.(com|net|org|edu)$"
20.DataGrid控件中数据操作重要语句:
属性:DataKeyField="userid" //设userid为表的主键,无法将该字段的值更新到数据库,最好设表的主键为DataGrid的主键
SqlCommand.Parameters["@userid"].Value=dg.DataKeys[(int)e.Item.ItemIndex]; //检索所要更新的行的主键(将当前选定的行的 主键值赋给命令的一个参)数
SqlCommand.Parameters["@fname"].Value=((TextBox)e.Item.Cells[2].Controls[0]).Text; //为参数赋予已修改的行值
21.自定义控件:
a.用户控件(ASP创建页面一样)
(I). 创建页面,拖入控件,设置属性/方法. < % @Control Language="C#" Debug="True" %>中的@Control指令来定义此页 将包含控件代码
(II) 保存为*.ascx文件,如a.ascx.
(III).使用: 头<%@Register Tagprefix="MyFirstControl" TagName="MyLbl" Src="a.axcs" %>
//Tagprefix为控件的前缀,像ASP:TextBox中的ASP
//TagName用于指定自定义控件的名称
//Src指定控件文件源
身体:
b.使用C#创建自定义控件
(I). 创建纯代码文件,继承基类Control,并保存为*.cs,如a.cs.
(II).将代码编译生成程序集: csc /t:library /r:System.dll,System.Web.Dll a.cs
//library告诉C#编译器生成程序集
// /r:System.dll System.Web.Dll告诉C#编译器引用指定的程序集
(III).将生成dll文件放在bin目录中
(IV).使用: < % @Register TagPrefix="Mine" Namespace="MyOwnControls" Assembly="a" %>
22.复合控件注意事项:
public class MyCompositin:Control,INamingContainer //INamingContainer:如果在页面上有多个此控件实例,则此结口可以给每 {} //个实例有唯一标志
this.EnsureChildControls();//表示将复合控件的子控件都呈现到页面上,此方法检查服务器控件是否包含子控件
CreateChildControls
23.Button/LinkButton/ImageButton/HyperLink什么时候用?
1.Button和ImageButton用于将数据传递回服务器.
2.Hyperlink用于在页面之间导航
3.LinkButton用于将数据保存到服务器或访问服务器上的数据
24.跟踪调试
跟踪:
1.页级别跟踪: 在页的开头包括如下的页指令< %@ Page Trace="True" TraceMode="SortByCategory/SortByTime" %>
自定义消息:
Trace.Write("这里为要显示的字符串");
Trace.Warn("这里为要显示的字符串"); //与Trace.Write相同,只是字体为红色
检查是否使用了跟踪
例句: if(Trace.IsEnabled) { Trace.Warn("已启用跟踪")}
2.应用程序级别跟踪: 在Web.config文件的节中
25.设置缓存:
1.输出缓存:
I.页面设置: 将 < %@ OutputCache Duration="120" VaryByParam="none" %> 加在需要缓存页的开头
注释:在请求该页的后两分钟之内,输出内容不变
II.编程方式设置:
主要使用类System.Web.HttpCachePolicy类下的方法
(1). Response.Cache.SetExpires(DateTime.Now.AddSeconds(120)); //在此方法中必须指定到期时间,如本语 //句为两分钟
(2). Response.Cache.SetExpires(DateTime.Now.AddSeconds(120));
Response.Cache.SetSlidingExpiration(true); //"可调到期",主要用于那些开始访问量大,但随后访问 //量平衡的情况
功能:第一句设置缓存到期时间,第二行打开 sliding expiration(可调到期).
2.数据缓存:
(1).DataView mySource; (2).给mySource赋值;
(3).Cache["myCache"]=mySource; (4).mySource=(DataView)Cache["myCache"]
26.部署: 直接复制到产品服务器即可 复制语句: XCOPY //XOPY只接受物理路径,不接受虚拟路径
26.自定义分页按钮
1.
protected void ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
System.Web.UI.WebControls.ListItemType elemType = e.Item.ItemType;
if (elemType == System.Web.UI.WebControls.ListItemType.Pager)
{
TableCell pager = (TableCell) e.Item.Controls[0];
for (int i=0; i {
Object o = pager.Controls[i];
if (o is LinkButton)
{
LinkButton h = (LinkButton) o;
h.Text = " " + h.Text + " ";
}
else
{
Label l = (Label) o;
l.Text = String.Format("[第{0}页]", l.Text);
}
}
}
}
2. 引用:zhangzs8896(小二)
private void MyDataGrid_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
ListItemType lit_item=e.Item.ItemType;
TableCell tc_item=(TableCell)e.Item.Controls[0];
if (lit_item==ListItemType.Pager)
{
for (int i=0;i {
object obj_item=tc_item.Controls[i];
if (obj_item is LinkButton)
{
LinkButton lbn_item=(LinkButton)obj_item;
lbn_item.Text=lbn_item.Text;
lbn_item.Font.Size=10;
lbn_item.ForeColor=Color.FromName("#666666");
lbn_item.Attributes.Add ("onmouseover","currentcolor=this.style.color;this.style.color='#14AC05'");
lbn_item.Attributes.Add("onmouseout","this.style.color=currentcolor");
}
else
{
Label lbl_item=(Label)obj_item;
lbl_item.ForeColor=Color.Blue;
lbl_item.Font.Bold=true;
lbl_item.Font.Underline=true;
lbl_item.Text="" + lbl_item.Text + "";
lbl_item.Font.Size=10;
}
}
}
}
滚动条样式 BODY { SCROLLBAR-FACE-COLOR: #dff4fd; SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-SHADOW-COLOR: #ffffff; SCROLLBAR-3DLIGHT-COLOR: #a8cbf1; SCROLLBAR-ARROW-COLOR: #a8cbf1; SCROLLBAR-TRACK-COLOR: #ffffff; SCROLLBAR-DARKSHADOW-COLOR: #a8cbf1; SCROLLBAR-BASE-COLOR: #a8cbf1 }
SCROLLBAR-ARROW-COLOR:三角的颜色 SCROLLBAR-SHADOW-COLOR:右边的颜色 SCROLLBAR-HIGHLIGHT-COLOR:左边的颜色 SCROLLBAR-FACE-COLOR:可拖动区域的背景色 SCROLLBAR-TRACK-COLOR:不能动的颜色 scrollbar-3dlight-color:color;设置或检索滚动条亮边框颜色; scrollbar-highlight-color:color;设置或检索滚动条3D界面的亮边颜色; scrollbar-face-color:color;设置或检索滚动条3D表面的颜色; scrollbar-arrow-color:color;设置或检索滚动条方向箭头的颜色;当滚动条出现但不可用时,此属性失效; scrollbar-shadow-color:color;设置或检索滚动条3D界面的暗边颜色; scrollbar-darkshadow-color:color;设置或检索滚动条暗边框颜色; scrollbar-base-color:color;设置或检索滚动条基准颜色。其它界面颜色将据此自动调整。 scrollbar-track-color:color;设置或检索滚动条的拖动区域颜色
ASP.NET 的缓存机制相比ASP有很大的改进,本文档除对常用优化方法进行总结介绍外,强调了如何使用ASP.NET的缓存来获得最佳性能。
1:不要使用不必要的session
和ASP中一样,在不必要的时候不要使用Session。
可以针对整个应用程序或者页面禁用会话状态:
l 禁用页面的会话状态
l 禁用应用程序的会话状态
在应用程序的Web.Config文件的sessionstate配置节中,将mode属性设置为off。
即:。
2:不使用不必要的Server Control
ASP.net中,大量的服务器端控件方便了程序开发,但也可能带来性能的损失,因为用户每操作一次服务器端控件,就产生一次与服务器端的往返过程。因此,非必要,应当少使用Server Control。
3:不使用不必要的ViewState
默认情况下,ASP.Net对所有的Server Control都启用了ViewState(视图状态)。但ViewState需要在客户端保存一些信息,这会造成性能的消耗。当必须使用Server Control时,可以考虑禁止ViewState。
有两种方式禁止ViewState:针对整个页面或者单个控件禁用ViewState。
l 针对控件
l 针对页面
4:不要用Exception控制程序流程
有些程序员可能会使用异常来实现一些流程控制。例如:
try{
result=100/num;
}
Catch(Exception e)
{
result=0;
}
但实际上,Exception是非常消耗系统性能的。除非必要,不应当使用异常控制来实现程序流程。
上面的代码应当写为:
if(num!=0)
result=100/num;
else
result=0;
5:禁用VB和Jscript动态数据类型
应当始终显示地申明变量数据类型,这能够节约程序的执行时间。为此,可以在页面前面写明:
6:使用存储过程完成数据访问
7:只读数据访问不要使用DataSet。
DataSet作为一个功能强大的、支持离线的数据库,其对性能的开销也相对较大。在特定的场合可以使用.Net中的其它数据集作为替代。
n 使用SqlDataReader代替DataSet;
n SqlDataReader是read-only,forward-only。
8:关闭ASP.NET的Debug模式
为了方便开发调试,VS.net中对于Debug模式默认是开启的,在部署应用程序时,应该关闭Debug模式,这将有效提高应用程序性能。
9:使用ASP.Net Output Cache缓冲数据;
提供缓冲功能是ASP.net中非常强大的一种功能。曾看到过某些评测说:ASP.net程序的性能比SUN的JSP应用程序性能快上几倍,实际上,该评测程序非常重要的一点就是使用了很多ASP.net的缓冲功能。
ASP.net中常用的缓冲方式有:
n 页面缓冲
一个例子:查询北京市的天气。因为天气数据在一定的时间内是相对规定的。
当Web程序中第一次查询北京市的天气时,应用程序可能是调用一个远程的WebService获取天气信息。而其后的用户就可以从缓冲中得到当前的天气信息。这将大大提高性能,减少服务器的压力。
方式:
u :指明页面使用缓冲
u Duration:控制缓冲有效的时间,单位为分钟。
u VaryByParam:用于指明是否缓冲的判断依据。例如,如果第一个用户查询的是北京的天气,则缓冲中存储了北京市的天气。当第二个用户查询上海的天气时,为避免读取到错误的缓冲,可以用这样的代码缓冲多个城市的天气:
这就指明了根据页面URL中的cityName参数来缓冲多份数据。
n 片断缓冲
在ASP.net中,除了在页面范围内使用缓冲,也还可以针对User Control使用Output Cache参数实现对用户控件的缓冲。同样的,一个页面中相同类型的控件也可以有多个不同的缓冲。可以根据参数来实现不同的缓冲。
例如:对于控件可以根据Control 的C属性的不同实现不同的缓冲。
n 数据缓冲
n 缓冲的过期依赖条件
某种意义上,Cache和Application是一样的,都是一种公有的对象。为了取得缓冲与数据有效性之间的平衡,可以根据需要对缓冲过期策略进行合理的设置。
u 文件依赖
Cache.Insert (“Mydata”, Source
, New CacheDependency(Server.MapPath(“authors.xml”)))
此代码的含义是当authors.xml文件不发生变化的时候,缓冲MyData始终有效。
u 时间依赖
设定1小时后过期,这是一种绝对过期。
Cache.Insert(“Mydata”,Source,null
,DateTime.Now.AddHours(1),TimeSpan.Zero);
u 相对过期依赖
当DataSet不再发生变化20分钟以后,缓冲过期。
Cache.Insert(“MyData”,Source,null
,DateTime.MaxValue,TimeSpan.FromMinutes(20));
<SCRIPT LANGUAGE="JavaScript">
function f_frameStyleResize(targObj){
var targWin = targObj.parent.document.all[targObj.name];
if(targWin != null) {
var HeightValue = targObj.document.body.scrollHeight
if(HeightValue < 600){HeightValue = 600} file://不小于600
targWin.style.pixelHeight = HeightValue;
}
}
function f_iframeResize(){
bLoadComplete = true; f_frameStyleResize(self);
}
var bLoadComplete = false;
window.onload = f_iframeResize;
</SCRIPT>
注意:iframe必须要有name属性,否则无效。
您的个人网站即使做得再精彩,在“浩瀚如海”的网络空间中,也如一叶扁舟不易为人发现,如何推广
个人网站,人们首先想到的方法无外乎以下几种:
● 在搜索引擎中登录自己的个人网站
● 在知名网站加入你个人网站的链接
● 在论坛中发帖子宣传你的个人网站
很多人却忽视了HTML标签META的强大功效,一个好的META标签设计可以大大提高你的个人网站被搜索到的可能性,有兴趣吗,谁我来重新认识一下META标签吧!
META标签是HTML语言HEAD区的一个辅助性标签,它位于HTML文档头部的<HEAD>标记和<TITLE>标记之间,它提供用户不可见的信息。meta标签通常用来为搜索引擎robots定义页面主题,或者是定义用户浏览器上的cookie;它可以用于鉴别作者,设定页面格式,标注内容提要和关键字;还可以设置页面使其可以根据你定义的时间间隔刷新自己,以及设置RASC内容等级,等等。
详细介绍
下面介绍一些有关 标记的例子及解释。
META标签分两大部分:HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME)。
★HTTP-EQUIV
HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和精确地显示网页内容。常用的HTTP-EQUIV类型有:
1、Content-Type和Content-Language (显示字符集的设定)
说明:设定页面使用的字符集,用以说明主页制作所使用的文字已经语言,浏览器会根据此来调用相应的字符集显示page内容。
用法:<Meta http-equiv="Content-Type" Content="text/html; Charset=gb2312">
<Meta http-equiv="Content-Language" Content="zh-CN">
注意: 该META标签定义了HTML页面所使用的字符集为GB2132,就是国标汉字码。如果将其中的“charset=GB2312”替换成“BIG5”,则该页面所用的字符集就是繁体中文Big5码。当你浏览一些国外的站点时,IE浏览器会提示你要正确显示该页面需要下载xx语支持。这个功能就是通过读取HTML页面META标签的Content-Type属性而得知需要使用哪种字符集显示该页面的。如果系统里没有装相应的字符集,则IE就提示下载。其他的语言也对应不同的charset,比如日文的字符集是“iso-2022-jp ”,韩文的是“ks_c_5601”。
Content-Type的Content还可以是:text/xml等文档类型;
Charset选项:ISO-8859-1(英文)、BIG5、UTF-8、SHIFT-Jis、Euc、Koi8-2、us-ascii, x-mac-roman, iso-8859-2, x-mac-ce, iso-2022-jp, x-sjis, x-euc-jp,euc-kr, iso-2022-kr, gb2312, gb_2312-80, x-euc-tw, x-cns11643-1,x-cns11643-2等字符集;Content-Language的Content还可以是:EN、FR等语言代码。
2、Refresh (刷新)
说明:让网页多长时间(秒)刷新自己,或在多长时间后让网页自动链接到其它网页。
用法:<Meta http-equiv="Refresh" Content="30">
<Meta http-equiv="Refresh" Content="5; Url=http://www.xia8.net">
注意:其中的5是指停留5秒钟后自动刷新到URL网址。
3、Expires (期限)
说明:指定网页在缓存中的过期时间,一旦网页过期,必须到服务器上重新调阅。
用法:<Meta http-equiv="Expires" Content="0">
<Meta http-equiv="Expires" Content="Wed, 26 Feb 1997 08:21:57 GMT">
注意:必须使用GMT的时间格式,或直接设为0(数字表示多少时间后过期)。
4、Pragma (cach模式)
说明:禁止浏览器从本地机的缓存中调阅页面内容。
用法:<Meta http-equiv="Pragma" Content="No-cach">
注意:网页不保存在缓存中,每次访问都刷新页面。这样设定,访问者将无法脱机浏览。
5、Set-Cookie (cookie设定)
说明:浏览器访问某个页面时会将它存在缓存中,下次再次访问时就可从缓存中读取,以提高速度。当你希望访问者每次都刷新你广告的图标,或每次都刷新你的计数器,就要禁用缓存了。通常HTML文件没有必要禁用缓存,对于ASP等页面,就可以使用禁用缓存,因为每次看到的页面都是在服务器动态生成的,缓存就失去意义。如果网页过期,那么存盘的cookie将被删除。
用法:<Meta http-equiv="Set-Cookie" Content="cookievalue=xxx; expires=Wednesday,
21-Oct-98 16:14:21 GMT; path=/">
注意:必须使用GMT的时间格式。
6、Window-target (显示窗口的设定)
说明:强制页面在当前窗口以独立页面显示。
用法:<Meta http-equiv="Widow-target" Content="_top">
注意:这个属性是用来防止别人在框架里调用你的页面。Content选项:_blank、_top、_self、_parent。
7、Pics-label (网页RSAC等级评定)
说明:在IE的Internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级
别就是通过该参数来设置的。
用法:<META http-equiv="Pics-label" Contect=
"(PICS-1.1'http://www.rsac.org/ratingsv01.html'
I gen comment 'RSACi North America Sever' by '[email protected]'
for 'http://www.microsoft.com' on '1997.06.30T14:21-0500' r(n0 s0 v0 l0))">
注意:不要将级别设置的太高。RSAC的评估系统提供了一种用来评价Web站点内容的标准。用户可以设置Microsoft Internet Explorer(IE3.0以上)来排除包含有色情和暴力内容的站点。上面这个例子中的HTML取自Microsoft的主页。代码中的(n 0 s 0 v 0 l 0)表示该站点不包含不健康内容。级别的评定是由RSAC,即美国娱乐委员会的评级机构评定的,如果你想进一步了解RSAC评估系统的等级内容,或者你需要评价自己的网站,可以访问RSAC的站点:http://www.rsac.org/。
8、Page-Enter、Page-Exit (进入与退出)
说明:这个是页面被载入和调出时的一些特效。
用法:<Meta http-equiv="Page-Enter" Content="blendTrans(Duration=0.5)">
<Meta http-equiv="Page-Exit" Content="blendTrans(Duration=0.5)">
注意:blendTrans是动态滤镜的一种,产生渐隐效果。另一种动态滤镜RevealTrans也可以用于页面进入与退出效果:
<Meta http-equiv="Page-Enter" Content="revealTrans(duration=x, transition=y)">
<Meta http-equiv="Page-Exit" Content="revealTrans(duration=x, transition=y)">
Duration 表示滤镜特效的持续时间(单位:秒)
Transition 滤镜类型。表示使用哪种特效,取值为0-23。
0 矩形缩小
1 矩形扩大
2 圆形缩小
3 圆形扩大
4 下到上刷新
5 上到下刷新
6 左到右刷新
7 右到左刷新
8 竖百叶窗
9 横百叶窗
10 错位横百叶窗
11 错位竖百叶窗
12 点扩散
13 左右到中间刷新
14 中间到左右刷新
15 中间到上下
16 上下到中间
17 右下到左上
18 右上到左下
19 左上到右下
20 左下到右上
21 横条
22 竖条
23 以上22种随机选择一种
9、MSThemeCompatible (XP主题)
说明:是否在IE中关闭 xp 的主题
用法:<Meta http-equiv="MSThemeCompatible" Content="Yes">
注意:关闭 xp 的蓝色立体按钮系统显示样式,从而和win2k 很象。
10、IE6 (页面生成器)
说明:页面生成器generator,是ie6
用法:<Meta http-equiv="IE6" Content="Generator">
注意:用什么东西做的,类似商品出厂厂商。
11、Content-Script-Type (脚本相关)
说明:这是近来W3C的规范,指明页面中脚本的类型。
用法:<Meta http-equiv="Content-Script-Type" Content="text/javascript">
注意:
★NAME变量
name是描述网页的,对应于Content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。
name的value值(name="")指定所提供信息的类型。有些值是已经定义好的。例如description(说明)、keyword(关键字)、refresh(刷新)等。还可以指定其他任意值,如:creationdate(创建日期) 、
document ID(文档编号)和level(等级)等。
name的content指定实际内容。如:如果指定level(等级)为value(值),则Content可能是beginner(初级)、intermediate(中级)、advanced(高级)。
1、Keywords (关键字)
说明:为搜索引擎提供的关键字列表
用法:<Meta name="Keywords" Content="关键词1,关键词2,关键词3,关键词4,……">
注意:各关键词间用英文逗号“,”隔开。META的通常用处是指定搜索引擎用来提高搜索质量的关键词。当数个META元素提供文档语言从属信息时,搜索引擎会使用lang特性来过滤并通过用户的语言优先参照来显示搜索结果。例如:
<Meta name="Kyewords" Lang="EN" Content="vacation,greece,sunshine">
<Meta name="Kyewords" Lang="FR" Content="vacances,grè:ce,soleil">
2、Description (简介)
说明:Description用来告诉搜索引擎你的网站主要内容。
用法:<Meta name="Description" Content="你网页的简述">
注意:
3、Robots (机器人向导)
说明:Robots用来告诉搜索机器人哪些页面需要索引,哪些页面不需要索引。Content的参数有all、none、index、noindex、follow、nofollow。默认是all。
用法:<Meta name="Robots" Content="All|None|Index|Noindex|Follow|Nofollow">
注意:许多搜索引擎都通过放出robot/spider搜索来登录网站,这些robot/spider就要用到meta元素的一些特性来决定怎样登录。
all:文件将被检索,且页面上的链接可以被查询;
none:文件将不被检索,且页面上的链接不可以被查询;(和 "noindex, no follow" 起相同作用)
index:文件将被检索;(让robot/spider登录)
follow:页面上的链接可以被查询;
noindex:文件将不被检索,但页面上的链接可以被查询;(不让robot/spider登录)
nofollow:文件将不被检索,页面上的链接可以被查询。(不让robot/spider顺着此页的连接往下探找)
4、Author (作者)
说明:标注网页的作者或制作组
用法:<Meta name="Author" Content="张三,[email protected]">
注意:Content可以是:你或你的制作组的名字,或Email
5、Copyright (版权)
说明:标注版权
用法:<Meta name="Copyright" Content="本页版权归Zerospace所有。All Rights Reserved">
注意:
6、Generator (编辑器)
说明:编辑器的说明
用法:<Meta name="Generator" Content="PCDATA|FrontPage|">
注意:Content="你所用编辑器"
7、revisit-after (重访)
说明:
用法:<META name="revisit-after" CONTENT="7 days" >
注意:
★Head中的其它一些用法
1、scheme (方案)
说明:scheme can be used when name is used to specify how the value of content should
be interpreted.
用法:<meta scheme="ISBN" name="identifier" content="0-14-043205-1" />
注意:
2、Link (链接)
说明:链接到文件
用法:<Link href="soim.ico" rel="Shortcut Icon">
注意:很多网站如果你把她保存在收件夹中后,会发现它连带着一个小图标,如果再次点击进入之后还会发现地址栏中也有个小图标。现在只要在你的页头加上这段话,就能轻松实现这一功能。<LINK> 用来将目前文件与其它 URL 作连结,但不会有连结按钮,用於 <HEAD> 标记间, 格式如下:
<link href="URL" rel="relationship">
<link href="URL" rev="relationship">
3、Base (基链接)
说明:插入网页基链接属性
用法:<Base href="http://www.xia8.net/" target="_blank">
注意:你网页上的所有相对路径在链接时都将在前面加上“http://www.cn8cn.com/”。其中target="_blank"是链接文件在新的窗口中打开,你可以做其他设置。将“_blank”改为“_parent”是链接文件将在当前窗口的父级窗口中打开;改为“_self”链接文件在当前窗口(帧)中打开;改为“_top”链接文件全屏显示。
以上是META标签的一些基本用法,其中最重要的就是:Keywords和Description的设定。为什么呢?道理很简单,这两个语句可以让搜索引擎能准确的发现你,吸引更多的人访问你的站点!根据现在流行搜索引擎(Google,Lycos,AltaVista等)的工作原理,搜索引擎先派机器人自动在WWW上搜索,当发现新的网站时,便于检索页面中的Keywords和Description,并将其加入到自己的数据库,然后再根据关键词的密度将网站排序。
由此看来,我们必须记住添加Keywords和Description的META标签,并尽可能写好关键字和简介。否则,
后果就会是:
● 如果你的页面中根本没有Keywords和Description的META标签,那么机器人是无法将你的站点加入数
据库,网友也就不可能搜索到你的站点。
● 如果你的关键字选的不好,关键字的密度不高,被排列在几十甚至几百万个站点的后面被点击的可
能性也是非常小的。
写好Keywords(关键字)要注意以下几点:
● 不要用常见词汇。例如www、homepage、net、web等。
● 不要用形容词,副词。例如最好的,最大的等。
● 不要用笼统的词汇,要尽量精确。例如“爱立信手机”,改用“T28SC”会更好。
“三人之行,必有我师”,寻找合适关键词的技巧是:到Google、Lycos、Alta等著名搜索引擎,搜索与
你的网站内容相仿的网站,查看排名前十位的网站的META关键字,将它们用在你的网站上,效果可想而知了。
★小窍门
为了提高搜索点击率,这里还有一些“捷径”可以帮得到你:
● 为了增加关键词的密度,将关键字隐藏在页面里(将文字颜色定义成与背景颜色一样)。
● 在图像的ALT注释语句中加入关键字。如:<IMG SRC="xxx.gif" Alt="Keywords">
● 利用HTML的注释语句,在页面代码里加入大量关键字。用法: <!-- 这里插入关键字 -->
<head> <title>文件头,显示在浏览器标题区</title> <meta http-equiv="Content-Language" content="zh-cn"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <meta name="制作人" content="唐蓉生"> <meta name="主题词" content="HTML 网页制作 课件"></head>
By default, access is restricted to certain e-mail message attachments in Microsoft® Outlook®. In determining which attachments are blocked, Outlook checks the file type of the attachment. Files with certain file types can be completely blocked (Level 1) or the user may be required to save a file to disk before opening the file (Level 2).
By default, Outlook classifies a number of file type extensions as Level 1 and blocks files with those extensions from being received by the users. There are no Level 2 file types by default, but you can create a list of Level 2 file types by using the Outlook Security template. You can demote file types from being categorized as Level 1 to being Level 2, or you can add other file types to create a Level 2 list.
Note To learn more about why some attachments are blocked, see Blocked attachments: The Outlook feature you love to hate. In addition, users can find methods for sharing files that are blocked by Outlook by reading About unblocking attachments.
The following table lists the Level 1 file types that are blocked under a default installation of Microsoft Office Outlook 2003. You can add or remove items from the default list through the Outlook Security Settings tab of the Outlook Security template.
File extension | File type |
---|---|
.ade | Access Project Extension (Microsoft) |
.adp | Access Project (Microsoft) |
.app | Executable Application |
.asp | Active Server Page |
.bas | BASIC Source Code |
.bat | Batch Processing |
.cer | Internet Security Certificate File |
.chm | Compiled HTML Help |
.cmd | DOS CP/M Command File, Command File for Windows NT |
.com | Command |
.cpl | Windows Control Panel Extension (Microsoft) |
.crt | Certificate File |
.csh | csh Script |
.exe | Executable File |
.fxp | FoxPro Compiled Source (Microsoft) |
.hlp | Windows Help File |
.hta | Hypertext Application |
.inf | Information or Setup File |
.ins | IIS Internet Communications Settings (Microsoft) |
.isp | IIS Internet Service Provider Settings (Microsoft) |
.its | Internet Document Set, Internation Translation |
.js | JavaScript Source Code |
.jse | JScript Encoded Script File |
.ksh | UNIX Shell Script |
.lnk | Windows Shortcut File |
.mad | Access Module Shortcut (Microsoft) |
.maf | Access (Microsoft) |
.mag | Access Diagram Shortcut (Microsoft) |
.mam | Access Macro Shortcut (Microsoft) |
.maq | Access Query Shortcut (Microsoft) |
.mar | Access Report Shortcut (Microsoft) |
.mas | Access Stored Procedures (Microsoft) |
.mat | Access Table Shortcut (Microsoft) |
.mau | Media Attachment Unit |
.mav | Access View Shortcut (Microsoft) |
.maw | Access Data Access Page (Microsoft) |
.mda | Access Add-in (Microsoft), MDA Access 2 Workgroup (Microsoft) |
.mdb | Access Application (Microsoft), MDB Access Database (Microsoft) |
.mde | Access MDE Database File (Microsoft) |
.mdt | Access Add-in Data (Microsoft) |
.mdw | Access Workgroup Information (Microsoft) |
.mdz | Access Wizard Template (Microsoft) |
.msc | Microsoft Management Console Snap-in Control File (Microsoft) |
.msi | Windows Installer File (Microsoft) |
.msp | Windows Installer Patch |
.mst | Windows SDK Setup Transform Script |
.ops | Office Profile Settings File |
.pcd | Visual Test (Microsoft) |
.pif | Windows Program Information File (Microsoft) |
.prf | Windows System File |
.prg | Program File |
.pst | MS Exchange Address Book File, Outlook Personal Folder File (Microsoft) |
.reg | Registration Information/Key for W95/98, Registry Data File |
.scf | Windows Explorer Command |
.scr | Windows Screen Saver |
.sct | Windows Script Component, Foxpro Screen (Microsoft) |
.shb | Windows Shortcut into a Document |
.shs | Shell Scrap Object File |
.tmp | Temporary File/Folder |
.url | Internet Location |
.vb | VBScript File or Any VisualBasic Source |
.vbe | VBScript Encoded Script File |
.vbs | VBScript Script File, Visual Basic for Applications Script |
.vsmacros | Visual Studio .NET Binary-based Macro Project (Microsoft) |
.vss | Visio Stencil (Microsoft) |
.vst | Visio Template (Microsoft) |
.vsw | Visio Workspace File (Microsoft) |
.ws | Windows Script File |
.wsc | Windows Script Component |
.wsf | Windows Script File |
.wsh | Windows Script Host Settings File |
There are no Level 2 file types by default, but you can create a list of Level 2 file types for your deployment. Level 2 file types are restricted (under a default installation of Outlook 2003) and you must first save a Level 2 file to disk before you can open it —Level 2 file types cannot be opened directly from an item in an e-mail message.
As an administrator, you can add or remove attachment types from the list of Level 2 file types through the Outlook Security Settings tab of the Outlook Security form. Also, you can demote attachment file types from Level 1 to Level 2 by using the Level1Remove registry key. For more information about setting the Level1Remove registry key, see Administrator-Controlled Settings vs. User-Controlled Settings.
In general, security settings defined by the user through the Microsoft® Office Outlook® 2003 user interface work as if they were added to the settings defined by the administrator. When there is a conflict between the two, the settings with a higher security level will override settings with a lower level of security.
Note If you are a user who wants to learn more about why some Outlook attachments are blocked, see Blocked attachments: The Outlook feature you love to hate. In addition, you can find methods for sharing files that are blocked by Outlook by reading About unblocking attachments.
The following list describes some specific interactions between administrator security settings defined by using the Outlook Security template and security settings that a user defines in Outlook.
Show Level 1 attachments. When this option is set on the Outlook Security Settings tab in the Outlook Security template, all file types that were set to Level 1 security are set to Level 2 security. If a user wants to block a file type, the user can customize the list to block access to specific types of attachments.
Level 1 file extensions — Add. When set by the administrator, this list overrides the user's settings. Even if users are allowed to remove extensions from the default Level 1 group of excluded extensions, they cannot remove any extensions that were added to the list by using the Security template. For example, if the user wants to remove EXE, REG, and COM from the Level 1 group, but the administrator explicitly adds EXE into the Level 1 Add box, then the user would only be able to remove REG and COM files from the Level 1 group.
Level 1 file extensions — Remove. The user's list is combined with the list set by the administrator to determine which Level 1 items are set to Level 2.
Level 2 file extensions — Add. If a user turns Level 1 files into Level 2 files, and those file types are listed in the Add box, the files are treated as Level 2 attachments.
Level 2 file extensions — Remove. There is no interaction with this setting.
Allow users to lower attachments to Level 2. This setting allows a user to demote a Level 1 attachment to Level 2. If this option is unchecked, the user's list is ignored and the administrative settings help to control the security.
The option to help prevent users from customizing their security settings is controlled either by a policy or by an option in the security template.
If the following registry key and value name are present, users cannot customize their security settings:
HKCU/Software/Policies/Microsoft/Office/11.0/Outlook
Value name: DisallowAttachmentCustomization
If the policy is present, end-user customization is disallowed. If the policy is not set on the computer, end-user customization is allowed only if it's not prohibited by an option in the Outlook Security template. The value of the key has no effect.
The registry key to set the exception list contains a semicolon-delimited list of file extensions. The value of the key is as follows:
HKCU/Software/Policies/Microsoft/Office/11.0/Outlook/Security
Value name: Level1Remove
If the value of the key is formatted incorrectly, the restrictions are ignored.
After you configure customized Microsoft® Outlook® client security features by using the Microsoft Outlook security template and saving the settings in the special Microsoft Exchange public folder, you must enable the customized settings for your users. To enable the changed settings, you might need to deploy a new registry key to the client computers.
To enable the customized security settings, you create the following registry subkey, which is of type DWORD:
HKEY_CURRENT_USER/Software/Policies/Microsoft/Security/CheckAdminSettings
The following table describes the subkey values.
Key value | Description |
---|---|
No key | Outlook uses default security settings. |
Set to 0 | Outlook uses default security settings. |
Set to 1 | Outlook looks for custom administrative settings in the Outlook Security Settings folder. |
Set to 2 | Outlook looks for custom administrative settings in the Outlook 10 Security Settings folder. |
Set to anything else | Outlook uses default administrative settings. |
To create a new registry subkey for distribution to client computers
HKEY_CURRENT_USER/Software/Policies/Microsoft/Security
The value name for the key must be CheckAdminSettings.
Registry files have an .reg extension.
The Microsoft® Outlook® Security template has three tabs: Outlook Security Settings, Outlook Programmatic Settings, and Trusted Code. The following sections describe the configurations you can specify on each of these tabs.
Note If you are a user who wants to learn more about why some Outlook attachments are blocked, see Blocked attachments: The Outlook feature you love to hate. In addition, you can find methods for sharing files that are blocked by Outlook by reading About unblocking attachments.
The Outlook Security Settings tab enables you to configure settings related to attachments, the types of files to which users can gain access, and scripting.
You can specify one or more groups of users whose members will have the same security settings. The following table describes the settings that specify security groups and members on the Outlook Security Settings tab.
Item | Description |
---|---|
Default Security Settings for All Users | Applies the default Outlook security settings to everyone. |
Security Settings for Exception Group | Enables you to create custom Outlook security settings for some users. |
Security Group Name | Specifies a name for the security group to which these customizations will apply; for example: Object model access approved. |
Members | Lists the names of members in this security group. If you are using an Exchange 2000 or later server, you can use distribution lists (that is, server-based security groups). You must type names individually, separating each name by a semicolon. If a user's name is entered as a member of more than one security group, the settings of the most recently created group will apply, because Outlook looks for the first item that has the user's name in the To field. Administrators should not use the address book to enter an alias into the Members field when creating a security form. The only way to enter an alias into the Members field is by directly entering it into the field. |
You can specify how users will experience access to restricted (Level 1 and Level 2) e-mail message attachments. For example, you might allow users to change an attachment they receive that is specified as Level 1 (user cannot view the file) to Level 2 (user can open the file after saving it to disk).
The following table describes the security options for e-mail attachments.
Item | Description |
---|---|
Show Level 1 attachments | Enables users to gain access to attachments with Level 1 file types. |
Allow users to lower attachments to Level 2 |
Enables users to demote a Level 1 attachment to Level 2. |
Do not prompt about Level 1 attachments when sending an item | Prevents users from receiving a warning when they send an item containing a Level 1 attachment. This option affects only the warning. Once the item is sent, the user will not be able to view or gain access to the attachment. If you want users to be able to post items to a public folder without receiving this prompt, you must select both this check box and the Do not prompt about Level 1 attachments when closing an item check box. |
Do not prompt about Level 1 attachments when closing an item | Prevents users from receiving a warning when they close an e-mail message, appointment, or other item containing a Level 1 attachment. This option affects only the warning. Once the item is closed, the user will not be able to see or gain access to the attachment. If you want users to be able to post items to a public folder without receiving this prompt, you must select both this check box and the Do not prompt about Level 1 attachments when sending an item check box. |
Allow in-place activation of embedded OLE objects | Allows users to double-click an embedded object, such as a Microsoft Excel spreadsheet, and open it in the program. However, if you are using Microsoft Word as your e-mail editor, clearing this check box will still allow OLE objects to be opened when the embedded object is double-clicked. |
Show OLE package objects | Displays OLE objects that have been packaged. A package is an icon that represents an embedded or linked OLE object. When you double-click the package, the program used to create the object either plays the object (for example, if it's a sound file) or opens and displays the object. Caution should be used in displaying OLE package objects, because the icon can easily be changed and used to disguise malicious files. |
Level 1 files are hidden from the user in all items. The user cannot open, save, or print a Level 1 attachment. (If you specify that users can demote a Level 1 attachment to a Level 2 attachment, then Level 2 restrictions apply to the file.) The InfoBar at the top of the item will display a list of the blocked files. The InfoBar does not appear on a custom form. For information on a default list of Level 1 file types, see the topic Attachment File Types Restricted by Outlook 2003.
When you remove a file extension from the Level 1 list, attachments with that file extension will no longer be blocked.
The following table describes how to add or remove Level 1 file extensions from the default list.
Action | Description |
---|---|
Add | Specifies the file extensions (usually three letters) of the file types you want to add to the Level 1 file list. Do not enter a period before each file extension. If you enter multiple extensions, separate them with semicolons. |
Remove | Specifies the file extensions (usually three letters) of file types you want to remove from the Level 1 file list. Do not enter a period before each file extension. If you enter multiple extensions, separate them with semicolons. |
With a Level 2 file, the user is required to save the file to the hard disk before opening it. A Level 2 file cannot be opened directly from an item in an e-mail message. The following table describes how to add or remove Level 2 file extensions from the default list.
When you remove a file extension from the Level 2 list, it becomes a normal file type. You can open it, print it, and so on in Outlook; there are no restrictions on the file.
Action | Description |
---|---|
Add | Specifies the file extensions (usually three letters) of the file types you want to add to the Level 2 file list. Do not enter a period before each file extension. If you enter multiple extensions, separate them with semicolons. |
Remove | Specifies the file extensions (usually three letters) of file types you want to remove from the Level 2 file list. Do not enter a period before each file extension. If you enter multiple extensions, separate them with semicolons. |
You can specify security settings for scripts, custom controls, and custom actions. For example, you can specify that when a program tries to run a custom action, users can decide whether to allow programmatic access for sending an e-mail message.
The following table describes the security settings for scripts, custom controls, and custom actions. (Scroll down in the Outlook Security template to see the full set of options.)
Item | Description |
---|---|
Enable scripts in one-off Outlook forms | Select this check box to run scripts in forms where the script and the layout are contained in the message itself. If users receive a one-off form that contains script, users will be prompted to ask if they want to run the script. |
When executing a custom action via the Outlook object model | Specifies what happens when a program attempts to run a custom action using the Outlook object model. A custom action can be created to reply to a message and circumvent the programmatic send protections just described. Select one of the following: Prompt user enables the user to receive a message and decide whether to allow programmatic send access. Automatically approve always allows programmatic send access without displaying a message. Automatically deny always denies programmatic send access without displaying a message. |
When accessing the ItemProperty property of a control on an Outlook custom form | Specifies what happens when a user adds a control to a custom Outlook form and then binds that control directly to any of the Address Information fields. By doing this, code can be used to indirectly retrieve the value of the Address Information field by getting the Value property of the control. Select one of the following: Prompt user enables the user to receive a message and decide whether to allow access to Address Information fields. Automatically approve always allows access to Address Information fields without displaying a message. Automatically deny always denies access to Address Information fields without displaying a message. |
The Programmatic Settings tab enables you to configure settings related to your use of the Outlook object model, Collaboration Data Objects (CDO), and Simple MAPI. These technologies are defined as follows:
The following table lists descriptions for each option on the Programmatic Settings tab. For each item, you can choose one of the following settings:
The following table describes the available options. You will need to scroll down in the template to see the full set of options.
Item | Description |
---|---|
When sending items via Outlook object model | Specifies what happens when a program attempts to send mail programmatically by using the Outlook object model. |
When sending items via CDO | Specifies what happens when a program attempts to send mail programmatically by using CDO. |
When sending items via Simple MAPI | Specifies what happens when a program attempts to send mail programmatically by using Simple MAPI. |
When accessing the address book via Outlook object model | Specifies what happens when a program attempts to gain access to an address book by using the Outlook object model. |
When accessing the address book via CDO | Specifies what happens when a program attempts to gain access to an address book by using CDO. |
When resolving names via Simple MAPI | Specifies what happens when a program attempts to gain access to an address book by using Simple MAPI. |
When accessing address information via the Outlook object model | Specifies what happens when a program attempts to gain access to a recipient field, such as To, by using the Outlook object model. |
When accessing address information via CDO | Specifies what happens when a program attempts to gain access to a recipient field, such as To, by using CDO. |
When opening messages via Simple MAPI | Specifies what happens when a program attempts to gain access to a recipient field, such as To, by using Simple MAPI. |
When responding to meeting and task requests via the Outlook object model | Specifies what happens when a program attempts to send mail programmatically by using the Respond method on task requests and meeting requests. This method is similar to the Send method on mail messages. |
When executing Save As via the Outlook object model | Specifies what happens when a program attempts to programmatically use the Save As command on the File menu to save an item. Once an item has been saved, a malicious program could search the file for e-mail addresses. |
When accessing the Formula property of a UserProperty object in the Outlook object model | Specifies what happens when a user adds a Combination or Formula custom field to a custom form and binds it to an Address Information field. By doing this, code can be used to indirectly retrieve the value of the Address Information field by getting the Value property of the field. |
When accessing address information via UserProperties.Find in the Outlook object model | Specifies what happens when a program attempts to search mail folders for address information using the Outlook object model. |
The Trusted Code tab is used to specify which Component Object Model (COM) add-ins are trusted and can be run without encountering the Outlook object model blocks. The following procedure describes how to use this feature.
Note Before you can use the Trusted Code tab, you must first install the Trusted Code Control on the computer you are using to modify the security settings. For more information, see Installing the Outlook Trusted Code Control. You can obtain the Trusted Code Control from the Office Resource Kit. Details are included in “Obtaining the files required to customize security settings” in Configuring Outlook Security Features to Help Prevent Viruses.
To specify a trusted add-in
This file must be the same file used on the client computers that will run the COM add-in.
The COM add-in can now run without prompts for Microsoft Office Outlook 2003 users who use this security setting. To remove a file from the Trusted Code list on the Trusted Code tab, select the file name and click Remove.
Note The COM add-in must be coded to take advantage of the Outlook trust model in order for the add-in to run without prompts after being included in the Trusted Code list. If an add-in shows security prompts to users after being added to the Trusted Code list, you must work with the COM add-in developer to resolve the problem.
You can modify default security settings for the Microsoft® Office Outlook® 2003 client by using the Outlook Security template, which you install as a form in Outlook. The template contains three tabs:
The settings on each of these tabs are described in Outlook Security Template Settings.
Note If you are a user who wants to learn more about why some Outlook attachments are blocked, see Blocked attachments: The Outlook feature you love to hate. In addition, you can find methods for sharing files that are blocked by Outlook by reading About unblocking attachments.
When you first load the template, the settings are configured to enforce default security settings on the client.
Before modifying the security settings, you must create a public folder named Outlook Security Settings or Outlook 10 Security Settings on the Microsoft Exchange server on which you keep public folders. You create this folder by using one of those names exactly, in the root folder of the Public Folder tree. You must set the folder access control lists (ACLs) so that all users can read all items in the folder. However, only those users for whom you want to create or change security settings should have permission to create, edit, or delete items in the folder.
If you want multiple users to be able to edit or create items, and if the list of users can change at any time, you must create a security group that includes all users for whom you want to give permission to create or change security settings. This security group should have Owner permissions on the security folder.
After you create the folder, you can install the Outlook Security template and then make the changes you need.
Before you can modify security settings by using the Outlook Security template, you must publish the template as a form in the special public folder you created.
To install the Outlook Security template
The template opens in Compose mode.
The folder selected should be your current folder: Outlook Security Settings or Outlook 10 Security Settings.
If you are using the security form from Outlook 2000, and if you are updating the form by publishing the newer form to the Outlook Security Settings folder, then in the Form Name box, type the same name as the previous security form (that is, you overwrite the previous security form). For more information about publishing a new security form over a previous one, see the next section.
You can now close the Outlook Security template. Do not save when prompted to save while closing the template.
There are two versions of the Outlook security form. The first version was released with the Outlook 2000 SR-1 security patch. The second version was released with later versions of Outlook, starting with Outlook 2002.
If you installed the security update for Outlook 2000, you may have an earlier version of the security form already published to the security folder. In this scenario, you should overwrite the previous form with the new copy, using the same name and message class. This installs the new form in place of the old one in the security folder.
If there are other forms in the security folder, you must open these forms and close them by using the Close button to correctly register any changes.
Use one of the following procedures to modify the default security settings in Outlook and store the new settings configuration in the special public folder you created for saving the settings. You can create a configuration for all Outlook users, or you can set up a configuration for a specific set of users.
To specify a default Outlook security setting for all users by using the Outlook Security template
Alternatively, you may choose to create a group of customized security settings for a specific set of Outlook users.
To specify a group of custom security settings for a set of Outlook users by using the Outlook Security template
If the Exchange server you are running is an Exchange 2000 or later server, you can use distribution lists (only server-created security groups, not Outlook Contacts distribution lists) in the Members box. Otherwise, you cannot use distribution lists, and adding users from the Contacts Address Book is not supported.
Note For a security setting to apply to a user who is an administrator of the security settings public folder, the user (administrator) must be added to the member list of the security setting. It is not sufficient to have the administrator be a member of a distribution list that is listed in the member's box of the setting. You must add each administrator's name to the security setting. If you are using only a single default security group, you do not need to add the administrators' names.
The method that Outlook uses to determine which security settings to apply depends on the version of the Exchange server. Note that in all versions, however, Outlook finds custom security settings items based on the time the item was created, not the time it was last modified. If a user's name is entered as a member of more than one security group, the settings of the most recently created group apply.
If you are using Microsoft Exchange 5.5, item-level permissions are not applied to the custom security settings, so every user sees all of the custom security settings in the folder. When Outlook determines which item to use, it selects the most recently created item that applies for that user. Note that if the Default Security Settings item is the last item created, it is applied to the user even if the user is a member of an exception item. So that this problem does not occur, make sure that the Default Security Settings item is always the first item created in the folder. Any exception items—created later— take precedence over the Default Security Settings item.
If you are using Microsoft Exchange 2000 or later, item-level permissions are applied to the custom security settings, so users only see those items that apply to them. Unlike with Exchange 5.5, Outlook used with Exchange 2000 and later finds the correct custom security settings item, regardless of when the Default Security Settings item was created.
Details on all fields, values, and settings for the template can be found in the topic Outlook Security Template Settings.
In previous versions of Outlook, every time a setting was created you were prompted twice for credentials. This is no longer the case. In Outlook 2003, you are prompted for credentials only the first time you save a setting. You are not prompted for credentials on subsequent saves until you shut down and restart Outlook. Also, Outlook must be running in classic online mode, not cached mode or offline mode, in order to save security settings.
If no credentials are entered or if the wrong credentials are entered, an Operation Failed error message appears. At this point, the security setting has been created but does not work correctly because item-level permissions have not been applied. You must delete the security item and re-create it. If the item created is not deleted, the item is applied to everybody, including users to whom you did not intend to apply the item.
If you add a user to the Members field of an existing security form, make sure that all aliases already present in the form are current and active.
Note If you add the alias of a new member to an existing security form, the change may not be correctly registered unless you make other changes to the form as well. For example, you might toggle another setting on and off, or otherwise activate the form through some interaction. After you have added the new alias and activated the form, you can select Save from the File menu of the form to save your changes.
In Microsoft® Office Outlook® 2003, administrators can specify COM add-ins that are trusted by Outlook's security features and can be run without encountering the Outlook Object Model security blocks. In order to specify a COM add-in, administrators must first install the Trusted Code Control on the computer they are using to modify the security settings. The control does not need to be installed on client computers.
Note You can obtain the Trusted Code Control from the Office Resource Kit. Details are included in “Obtaining the files required to customize security settings” in Configuring Outlook Security Features to Help Prevent Viruses.
To install and register the Trusted Code Control
regsvr32 hashctl.dll
regsvr32 comdlg32.ocx
Configuring Outlook Security Features to Help Prevent Viruses |
|
The Microsoft® Outlook® security model includes a number of features to help protect users against viruses and worms that can be propagated through e-mail messages. The security-related features include object model blocks (such as limiting automated address book access), access to attachments, and so on. Security-related features are included in the product, but they can be customized. You can customize most of the features relating to security by using the Outlook security template. Your users must be using Outlook with an Exchange server to take advantage of the customizations that are modified by using the security template. Note You can also customize several features by using the registry instead of the Exchange Server security template. These features include the following: read as plain text, automatic picture download, and HTML mail zones. You can also lock down the settings by using policies. For more information about modifying these settings, see Helping Users Avoid Junk E-mail Messages in Outlook 2003. You can also customize how Outlook loads ActiveX controls in one-off forms. More information is provided later in this topic under Customizing how ActiveX controls behave in one-off forms. Security settings are controlled by a custom form that is stored in a designated folder on the Microsoft Exchange server. After the form is published in the folder, you can use it create items in the folder to store the security settings. You can use a registry key setting to cause Outlook to reference these settings. To update these settings, you must be an authorized administrator. The settings that you can configure by using the template can help provide a high level of security. However, the higher the level of security, the more limitations there are to Outlook functionality. Restrictions enforced by the Outlook security form include limits to specific types of attachments, heightened default security settings, and controlled access to the Outlook automation code. Note To learn more about how Outlook virus protection features work, see How Outlook helps to protect your computer from viruses. Requirements for customized security settingsAs an administrator, you can use the template to customize the Outlook security settings to help meet your organization's needs. For example, you can help control the types of attached files blocked by Outlook, modify the Outlook object model security and warning levels, and specify user or group security levels. However, to customize these settings, your users must have the appropriate Outlook configuration. To enable custom security settings, your users must be using Outlook with an Exchange server. You cannot modify most of these settings if your organization is using Outlook with a third-party e-mail service. (The exception is for attachment-blocking settings, which can be configured when using a third-party e-mail service.) Caution Lowering any default security settings may increase your risk of virus execution or propagation. Use caution and read the documentation before you modify these settings. Enabling customized security settings for usersWhen you create custom security settings for Outlook by using the Outlook security template, the settings are stored in messages in a top-level folder in the Public Folders tree. Users who need these settings must have a special registry key set on their computers for the settings to apply. When the key is present, Outlook searches the Exchange server for custom security settings to apply to a user. If these settings are found, they are applied. Otherwise, the default security settings in Outlook are used. Users without the special key have the default Outlook security settings that are in the product. Note that in some cases, administrator-defined security settings may interact with security settings defined by the user. Specifically, users can customize attachment-blocking behavior, if you, as administrator, have given permission. Obtaining the files required to customize security settingsThe files you need to configure the security settings and publish the form to enforce the settings are included in a self-extracting executable named Admpack.exe. You can find this downloadable file on the Office XP Resource Kit Downloads page. It is not installed by default from the Office Resource Kit Setup program. The four administrative files are as follows:
Customized security settings caveatsThere are a couple caveats to keep in mind when deploying customized security settings for Outlook 2003:
Customizing how ActiveX controls behave in one-off formsWhen Outlook receives a message containing a form definition, the item is considered to be a one-off form. To help prevent unwanted script and controls from running in one-off forms, Outlook does not load ActiveX® controls in one-off forms by default. You can control this behavior by setting a registry key or policy in HKCU/Software/Policies/Microsoft/Office/11.0/Outlook/Security or HKCU/Software/Microsoft/Office/11.0/Outlook/Security. Note This policy is not provided in the Outlk11.adm file in the original retail product but is included in the updated ADM files released later. You can download the updated Office 2003 Policy Template Files and Deployment Planning Tools (Office-2003-SP1-ADMs-OPAs-and-Explain-Text.exe). You can find this downloadable file on the Office 2003 Resource Kit Downloads page. Value name: AllowActiveXOneOffForms Value type: DWORD Value data: [ 0 | 1 | 2 ] 0 - Only load controls that are in the following list. 1 - Allow only safe controls. 2 - Allow all ActiveX controls. If the registry key is not present, Outlook loads only controls listed here. This is the default behavior. The following controls can be used in one-off forms:
|
asc码对照表
asp.net数据格式的Format-- DataFormatString |
转自: 编辑:dagger |
我们在呈现数据的时候,不要将未经修饰过的数据呈现给使用者。例如金额一万元,如果我们直接显示「10000」,可能会导致使用者看成一千或十万,造成使用者阅读数据上的困扰。若我们将一万元润饰后输出为「NT$10,000」,不但让使比较好阅读,也会让使用者减少犯错的机会。 下列画面为润饰过的结果: 上述数据除了将DataGrid Web 控件以颜色来区隔记录外,最主要将日期、单价以及小计这三个计字段的数据修饰的更容易阅读。要修饰字段的输出,只要设定字段的DataFormatString 属性即可;其使用语法如下: DataFormatString="{0:格式字符串}" 我们知道在DataFormatString 中的 {0} 表示数据本身,而在冒号后面的格式字符串代表所们希望数据显示的格式;另外在指定的格式符号后可以指定小数所要显示的位数。例如原来的数据为「12.34」,若格式设定为 {0:N1},则输出为「12.3」。其常用的数值格式如下表所示: 格式字符串 资料 结果 "{0:C}" 12345.6789 $12,345.68 "{0:C}" -12345.6789 ($12,345.68) "{0:D}" 12345 12345 "{0:D8}" 12345 00012345 "{0:E}" 12345.6789 1234568E+004 "{0:E10}" 12345.6789 1.2345678900E+004 "{0:F}" 12345.6789 12345.68 "{0:F0}" 12345.6789 12346 "{0:G}" 12345.6789 12345.6789 "{0:G7}" 123456789 1.234568E8 "{0:N}" 12345.6789 12,345.68 "{0:N4}" 123456789 123,456,789.0000 "Total: {0:C}" 12345.6789 Total: $12345.68 其常用的日期格式如下表所示: 格式 说明 输出格式 d 精简日期格式 MM/dd/yyyy D 详细日期格式 dddd, MMMM dd, yyyy f 完整格式 (long date + short time) dddd, MMMM dd, yyyy HH:mm F 完整日期时间格式 (long date + long time) dddd, MMMM dd, yyyy HH:mm:ss g 一般格式 (short date + short time) MM/dd/yyyy HH:mm G 一般格式 (short date + long time) MM/dd/yyyy HH:mm:ss m,M 月日格式 MMMM dd s 适中日期时间格式 yyyy-MM-dd HH:mm:ss t 精简时间格式 HH:mm T 详细时间格式 HH:mm:ss |
作者:微软架构与模式小组
http://editblog.csdn.net/msdncolumn/archive/2004/12/30/1101.aspx
软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的标准观点。
ANSI/IEEE 610.12-1990软件工程标准词汇对于体系结构定义是:“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构以及知道上述内容设计与演化的原理(principle)”。
Mary Shaw和David Garlan认为软件体系结构是软件设计过程中,超越计算中的算法设计和数据结构设计的一个层次。体系结构问题包括各个方面的组织和全局控制结构,通信协议、同步,数据存储,给设计元素分配特定功能,设计元素的组织,规模和性能,在各设计方案之间进行选择。Garlan & Shaw模型[1]的基本思想是:软件体系结构={构件(component),连接件(connector),约束(constrain)}.其中构件可以是一组代码,如程序的模块;也可以是一个独立的程序,如数据库服务器。连接件可以是过程调用、管道、远程过程调用(RPC)等,用于表示构件之间的相互作用。约束一般为对象连接时的规则,或指明构件连接的形式和条件,例如,上层构件可要求下层构件的服务,反之不行;两对象不得递规地发送消息;代码复制迁移的一致性约束;什么条件下此种连接无效等。
关于架构的定义还有很多其他观点,比如Bass定义、Booch & Rumbaugh &Jacobson定义、Perry & Wolf模型[7]、Boehm模型等等,虽然各种定义关键架构的角度不同,研究对象也略有侧重,但其核心的内容都是软件系统的结构,其中以Garlan & Shaw模型为代表,强调了体系结构的基本要素是构件、连接件及其约束(或者连接语义),这些定义大部分是从构造的角度来甚至软件体系结构,而IEEE的定义不仅强调了系统的基本组成,同时强调了体系结构的环境即和外界的交互。
模式(Pattern)的概念最早由建筑大师Christopher Alexander于二十世纪七十年代提出,应用于建筑领域,八十年代中期由Ward Cunningham和Kent Beck将其思想引入到软件领域,Christopher Alexander将模式分为三个部分:首先是周境(Context,也可以称着上下文),指模式在何种状况下发生作用;其二是动机(System of Forces),意指问题或预期的目标;其三是解决方案(Solution),指平衡各动机或解决所阐述问题的一个构造或配置(Configuration)。他提出,模式是表示周境、动机、解决方案三个方面关系的一个规则,每个模式描述了一个在某种周境下不断重复发生的问题,以及该问题解决方案的核心所在,模式即是一个事物(thing)又是一个过程(process),不仅描述该事物本身,而且提出了通过怎样的过程来产生该事物。这一定义已被软件界广为接受。
软件模式的应用对软件开发产生了重大的作用,主要表现在:
因为架构(Architecture)和模式(Pattern)在当前的软件开发中经常地被提及,可是很多人容易混淆这两个术语,而对此,学术界也没有一个非常统一的定义。
架构和模式应该是一个属于相互涵盖的过程,但是总体来说Architecture更加关注的是所谓的High-Level Design,而模式关注的重点在于通过经验提取的“准则或指导方案”在设计中的应用,因此在不同层面考虑问题的时候就形成了不同问题域上的Pattern。模式的目标是,把共通问题中的不变部分和变化部分分离出来。不变的部分,就构成了模式,因此,模式是一个经验提取的“准则”,并且在一次一次的实践中得到验证,在不同的层次有不同的模式,小到语言实现(如Singleton)大到架构。在不同的层面上,模式提供不同层面的指导。根据处理问题的粒度不同,从高到低,模式分为3个层次:架构模式(Architectural Pattern)、设计模式(Design Pattern)、实现模式(Implementation Pattern).架构模式是模式中的最高层次,描述软件系统里的基本的结构组织或纲要,通常提供一组事先定义好的子系统,指定它们的责任,并给出把它们组织在一起的法则和指南。比如,用户和文件系统安全策略模型,N-层结构,组件对象服务等,我们熟知的MVC结构也属于架构模式的层次。一个架构模式常常可以分解成很多个设计模式的联合使用。设计模式是模式中的第二层次,用来处理程序设计中反复出现的问题。例如,[GOF95][2]总结的23个基本设计模式——Factory Pattern, Observer Pattern等等。实现模式是最低也是最具体的层次,处理具体到编程语言的问题。比如,类名,变量名,函数名的命名规则;异常处理的规则等等。
相对于系统分析或者设计模式来说,体系结构从更高的层面去考虑问题,所以关注的问题就体现在“不变”因素上,比如系统部署中,更加关心应用程序的分层分级设计,而在这个基础之上提出的部署方案,才是架构考虑的重点。体系结构关心应用程序模式,更加体现在通过技术去解决这些业务差异带来的影响,关心是否是分布式应用程序,关心系统分层是如何设计,也关心性能和安全,因此在这样的情况之下,会考虑集群,负载平衡,故障迁移等等一系列技术。
希望通过定义的方式来区分架构和模式是不太可能的,因为本来就是交互交叉和提供服务的,它实际上是架构模式,而不是设计模式。在大部份情况下,表现为下面几个设计模式之一:Strategy模式、Mediator模式、Composite模式、Observer模式。对于熟悉架构设计的系统架构师而言,似乎可以用如下来解释架构和模式之间的关系:架构是Hight-Level Design,着眼于不同业务中共性的解决方案,而模式是General Principle(通用原理)。
企业级业务解决方案是公司实现其业务的赌注,它们通常极其复杂,而且性能必须不负众望。它们不仅必须具有高可用性和伸缩性以应对不可预知的使用,而且还必须具有适应性和预见性以适应快速变化的业务要求。最佳解决方案是那些由一组更小的、简单的、能够可靠且有效地解决简单问题的机制组成的解决方案。在构建更大、更复杂的系统过程中,将这些简单的机制组合在一起,从而形成更大的系统。对这些简单机制的认识来之不易。它通常存在于有经验的开发人员和体系结构设计者的头脑中,并且是他们潜意识中自然带到项目中的重要知识。
模式对于开发人员和体系结构设计者非常有用,因为它们:
模式描述给定上下文中反复出现的问题,并基于一组指导性影响因素来建议解决方案。解决方案通常是一种简单的机制,是为了解决模式中所标示出的问题而一起工作的两个或多个类、对象、服务、进程、线程、组件或节点之间的协作。
您正在构建一个报价应用程序,其中有一个类负责管理系统中的所有报价。很重要的一点是,所有报价都应与该类的一个(而且只与一个)实例进行交互。如何构造您的设计,以便从该应用程序中只能访问该类的一个实例?
解决该问题最简单的方案就是创建一个具有私用构造函数的QuoteManager类,以便任何其他类都不能实例化它。此类包含QuoteManager的一个静态实例,并使用名为GetInstance()的静态方法返回。此代码大体如下所示:
public class QuoteManager
{
//注意:仅适用于单线程应用程序
private static QuoteManager _Instance = null;
private QuoteManager() {}
public static QuoteManager GetInstance()
{
if (_Instance==null)
{
_Instance = new QuoteManager ();
}
return _Instance;
}
//... QuoteManager提供的函数
}
您可能已经像其他许多开发人员那样通过类似的方式解决过类似的问题。实际上,注意反复出现的问题并寻求解决方案的模式作者已经屡次发现了这种实现,提取出了通用解决方案并将这种问题-解决方案对称为Singleton模式[GOF95]。
图1 简化的Singleton模式
通过将图1中简化的模式示例与QuoteManager源代码进行比较,阐明了模式(通用问题-解决方案对)和模式应用程序(针对非常具体的问题的具体解决方案)之间的区别。模式级别的解决方案是多个类之间简单但极其顺畅的协作。模式中的通用协作专门适用于QuoteManager类,提供了用来控制报价应用程序中实例化的机制。显然,您可以稍微修改一下某种模式以满足局部的特定要求,所以同一种模式可以应用于无数个应用程序。
所编写的模式提供了一种记录简单且经过证实的机制的有效方法。模式是以特定格式编写的,这一点对于装载复杂思想的容器非常有用。这些模式在被记载和起名之前,就早已存在于开发人员的大脑及其代码中。
模式存在于多个不同的抽象级别中。考虑另一个示例(这次所处的抽象级别比源代码要高一级):
您要设计一个基于Web的报价应用程序,其中包含大量业务和表示逻辑,这些逻辑反过来依赖大量平台软件组件来提供适当的执行环境。如何在高级别组织系统以使其在具有灵活、松耦合性的同时仍具有高内聚性?
此问题的解决方案之一涉及到按一系列层来组织系统,每层包含大致位于同一抽象级别的元素。随后,确定每一层中的依赖性,并确定采用严格还是宽松的分层策略。接着,决定是打算创建自定义的分层方案,还是采用以前由其他人记录的分层方案。在本例中,假设您决定使用众所周知的分层策略:表示、业务逻辑和数据访问各占一层。图2显示了分层方案的可能外观。
图2 报价应用程序的层
如果您总是按这种方式设计系统,说明您已经在不依赖于任何广义模式的情况下使用该模式。即便如此,您还可能因多种原因而希望了解支撑这种设计方法的模式。您可能迫切想知道为何经常以这种方式构建系统,或者可能在寻找更理想的方法来解决此模式不能完全解决的问题。使用层作为高级别组织方法是Layers(层)模式[Buschmann96][3]中描述的完善模式。图3显示了该模式的简化版本。
图3 简化的Layers模式
这个简单的应用程序组织策略有助于解决软件开发中面临的两个挑战:依存关系的管理和对可交换组件的需求。如果在构建应用程序时没有一个考虑周全的依存关系管理策略,会导致组件易损坏且不牢靠,从而导致对它们进行维护、扩展和替代时存在较大的困难,而且成本较高。
Layers模式中的工作机制比Singleton中的工作机制更精细。对于Layers,首次协作是在设计时发生在类之间,这是由于分层组织将对更改源代码所带来的影响局部化,从而防止所做的更改贯穿到整个系统。第二次协作发生在运行时:某层中相对独立的组件变得可与其他组件交换,再一次使系统其余部分不受影响。
尽管Layers模式的通用性足以应用于诸如网络协议、平台软件和虚拟机之类的领域,但是它无法解决企业类业务解决方案中存在的某些特定问题。例如,除通过分解来管理复杂性(由Layers解决的基本问题)外,业务解决方案开发人员还需要进行适当组织,以便有效地重复使用业务逻辑并保留与昂贵资源(如数据库)的重要连接。解决此问题的方法之一就是使用Three-Layered Application(三层应用程序)模式。图4显示了该模式的简化说明。
图4 简化的Three-Layered Application
同样,在模式(Three-Layered Application)和模式应用程序(报价应用程序分层模型)之间存在区别。模式是有关应用程序组织主题的通用问题-解决方案对,而模式应用程序是通过创建具体的层来解决非常具体的问题。
Three-Layered Application实际上是在Layers的基础上进行的简单优化;在Layers中确定的上下文、影响因素和解决方案仍适用于Three-Layered Application,但反之不行。也就是说,Layers模式约束着Three-Layered Application模式,而Three-Layered Application模式优化了Layers模式。
您为某个发展迅速的成功企业构建了一个报价应用程序。现在,您希望通过向业务合作伙伴公开自己的报价引擎并将其他合作伙伴服务(如配送)集成到该报价应用程序中来扩展该应用程序。您将如何构造自己的业务应用程序以提供和享受服务?
此问题的解决方案之一是通过将其他与服务相关的职责添加到每一层中来扩展Three-Layered Application。在业务层添加了以下职责:通过Service Interfaces(服务接口)向客户应用程序提供一组简化的操作。数据访问层的职责拓宽到了数据库和主机集成之外,以包括与其他服务提供者的通信。将数据访问层中的这个附加功能封装到服务接口组件中,这些组件负责连接到服务(同步和异步)、管理服务的基本会话状态并向业务流程组件通知与服务相关的重大事件。
Three-Layered Services Application(三层服务应用程序)(图5)记录了该问题-解决方案对。
图5 简化的Three-Layered Services Application
将Three-Layered Services Application模式应用于报价应用程序示例将形成如下模型。
图6 应用于报价应用程序的Three-Layered Services Application
请注意这些模式之间的关系(请参阅图7)。Layers引进了一个用来组织软件应用程序的基本策略。Three-Layered Application优化了此概念,并将它限制在需要重复使用业务逻辑、灵活部署和高效使用连接的业务系统的范围内。Three-Layered Services Application又在Three-Layered Application的基础上进行了优化,并对设计进行了扩展,以便在提供和使用其来源千差万别的数据和逻辑时,将这些数据和逻辑处理为粒状元素。
图7 相关模式的优
向特定层中添加其他类型的组件并不是管理这种日益增长的复杂性的唯一方法。正如复杂性所证实的那样,设计人员通常在应用程序中创建其他层来承担该职责。例如,一些设计人员将服务接口移到一个单独的层中。而另外一些设计人员将业务层分隔成域层和应用程序层。在任何情况下,您有时可能会看到某些设计人员在使用此模式来满足复杂要求时,有时会将这三层扩展到四层、五层或者甚至六层。与之相反,Layers模式也用在相对简单的客户端-服务器应用程序中。
解决方案简述:术语“解决方案”有两种截然不同的含义:其一是表示模式本身的一部分(如某上下文中包含的问题-解决方案对);其二是表示业务解决方案。在使用“业务解决方案”这一术语时,它是指专用来满足一组特定的功能和操作业务要求的软件密集型系统。软件密集型系统意味着您不只是关心软件,而且还必须将该软件部署到硬件处理节点以提供整体的技术解决方案。而且,所考虑的软件不仅包括自定义开发的软件,而且包括购买的软件基础结构和平台组件,所有这些都被集成在了一起。
以.NET为代表的Microsoft产品线向我们展示了“架构为基础,模式为指导”的企业解决方案设计理念,秉承微软产品一贯以来的简单易用以外,同时我们将看到使用.NET构建企业应用平台上使用.NET的优势。毫不夸张地说,.NET不是第一个体现架构和模式的软件应用平台,确是目前为止最后的实现了架构和模式的平台,在随后的文章介绍中,你将会发现,架构设计和模式应用会是如此简单。
关于ASP.NET的实用技巧,其实我们已经接触到很多了。下面为大家总结一下,供大家参考。
1.跟踪页面执行
设置断点是页面调试过程中的常用手段,除此之外,还可以通过查看页面的跟踪信息进行错误排查以及性能优化。ASP.NET中启用页面跟踪非常方便,只需在Page指令中加入Trace="True"属性即可:
1
|
<%@ Page Language="C#" Trace="true">
|
跟踪信息可以分为两类:
a.页面执行详细情况
其中主要包括页面生命周期中各事件列表、控件树列表(可以查看每个控件的HTML字节数以及ViewState字节数)、Session状态、Application状态、Cookie集合、QueryString集合、服务器变量等信息。
b.自定义跟踪信息
通过在页面代码中调用Trace.Write()或Trace.Warn()方法便可将指定内容写入跟踪信息中的"Trace Information"节。就算页面发生了错误,跟踪信息还是会显示出来,并且在发布应用程序时无需删除相关的跟踪代码,只需从Page指令中移除Trace属性即可。
2.在服务器端控件中添加客户端属性
我们有时会向服务器端控件中添加一些特殊的属性,这类属性不需要服务器端的处理,只需简单的发送至客户端即可,我们不妨称其为客户端属性,例如HTML属性或自定义属性(可能用于实现某种特定的JavaScript功能)。可以通过以下几种方法达到这个目的:
a.直接向控件添加客户端属性
1
|
<
this.style.cursor
=
'pointer'
"
runat
=
"server"
/>
|
其中的onmouseover是客户端属性,注意,编译器是允许这种写法的,但会显示警告。
b.调用内置方法
可以通过调用WebControl.Attributes.Add()方法为控件添加客户端属性,如下所示:
1
|
MyButton.Attributes.Add("onmouseover", "this.style.cursor='pointer'");
|
这也是最常用的方法。
c.创建自定义控件
如果某个类型的服务器端控件中经常需要添加客户端属性,则可以考虑创建一个继承自该服务器端控件的自定义控件,其中包含特定的客户端属性。
正是考虑到这一点,ASP.NET 2.0中为按钮控件(包括Button、LinkButton、ImageButton控件)提供了OnClientClick属性,可以这样写:
1
|
MyButton.OnClientClick = "alert('Hello!')";
|
真是贴心的功能!
3.表单数据的服务器端验证
将数据验证任务从服务器端迁移到客户端的过程促使了JavaScript的产生,这也是我们沿用至今的一种方式。但只有在保证客户端JavaScript正常运行的前提下,这种方式才能发挥其作用。
不幸的是,总有一些例外,比如浏览器不支持JavaScript,或者用户刻意关闭了浏览器的JavaScript功能,这就导致了第一重防护失效。比较保险的做法是加入第二重防护,即对用户提交的数据进行服务器端验证,但这无疑将增加开发者的工作量。
ASP.NET 2.0提供了一系列表单数据验证控件,可以非常轻松的完成客户端及服务器端的双重数据验证任务。但要使服务器端验证功能发挥作用,还需要用到Page.IsValid属性,请看下面的例子:
姓名:
1
2
|
ator ID="RequiredFieldValidator1" ControlToValidate="txtName"
ErrorMessage="请填写姓名!" Display="Dynamic" runat="server">
|
这是一个HTML片段,其中有一个RequiredFieldValidator控件用于检查是否已填写姓名。下面是点击按钮时执行的服务器端代码:
1
2
3
4
5
6
7
|
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (Page.IsValid) //注意:不要遗漏对Page.IsValid属性的判断
{
Response.Write("你的名字是:" + txtName.Text);
}
}
|
其中,要特别注意对Page.IsValid属性的判断,只有页面中所有验证控件对数据的验证都成功时,Page.IsValid属性才为True,这代表提交的数据为有效数据,可以进入下一步操作。
4.跳过表单验证
在某些情况下,我们需要跳过表单中所有控件的验证,然而在另外一些情况下,我们却希望有选择的触发表单中某些控件的验证功能。分别来看看这两种情况:
a.跳过所有验证
假设有个表单,其中除了各种数据录入控件外还有两个按钮,一个是提交按钮,另一个是取消按钮,同时表单中还有一些数据验证控件。我们希望当点击取消按钮的时候无需验证表单中数据的有效性,而是直接将页面提交至服务器并将其重定向到某个指定页面。
要实现这个功能,可以利用按钮控件(包括Button、LinkButton、ImageButton控件)的CausesValidation属性,将该属性设为false即可跳过表单中的所有验证。
b.触发某些验证
假设有个表单,被划分成两个功能区,一个用于用户登录,另一个用于用户注册,我们希望当点击登录按钮时只触发登录区的数据验证,当点击注册按钮时只触发注册区的数据验证。
解决办法是将相关的数据验证控件和数据提交控件(按钮控件)加入同一个验证组,这一点是通过将各相关控件的ValidationGroup属性设为相同的值来实现的。
5.保持滚动条位置
假设有个页面,其中以列表形式显示了一些数据记录,每次编辑其中的记录时都需要向服务器提交页面,为了提供良好的用户体验,我们希望每次编辑一条记录并保存后,滚动条位置都能保持不变。传统的做法是每次提交页面时将当前滚动条所在位置信息按某种方式(Hidden字段或QueryString)传给服务器端,当页面返回客户端时,由服务器端根据传入的位置信息以JavaScript形式重新设置滚动条位置。
如果通过ASP.NET来实现这一功能将变得非常简单,只需在Page指令中加入MaintainScrollPositionOnPostback="true"属性即可:
1
|
<%@ Page Language="C#" MaintainScrollPositionOnPostback="true">
|
6.禁用不必要的ViewState
在ASP.NET的运行机制中,ViewState起着重要的作用。ViewState经过编码后存入表单Hidden字段,每当页面回传至服务器时再进行解码。因此,ViewState的使用会带来两个问题:带宽的占用以及计算资源的消耗。好在不是所有控件都需要启用ViewState,我们完全可以禁用不必要的ViewState。
ViewState默认是开启的,需要手动关闭:
a.禁用页面ViewState
在Page指令中加入EnableViewState="false"属性即可:
1
|
<%@ Page Language="C#" EnableViewState="false">
|
加入这个属性后,整个页面以及其中的所有控件都将无法使用ViewState,因此需谨慎使用。
b.禁用控件ViewState
这是推荐的方式,将控件的EnableViewState属性设为False即可禁用其ViewState,这里有个简单的窍门:
如果某个控件的状态不能由操作者改变,则可以禁用其ViewState。最典型的莫过于Label控件了,只能显示信息,无法操作。
但TextBox、DorpDownList等控件的状态是可以改变的(通过输入、选择等操作),因此保留他们的ViewState还是有用的。