博文
装箱,拆箱以及反射(2006-07-24 13:35:00)
摘要: 今天看到了一个很easy的帖子,如下:自定义一个类,然后定义一个与这个类结构一样的结构体,如何将这个类的实例的各种属性赋给与该类结构相同的结构体的对象.(不想用逐个属性赋值的方法)。
一看之下,反射不是轻松搞定吗。后来自己做了个测试,发现对于值类型来说,好像有点小问题。代码如下:
struct test1
{
private int i;
public int I
{
get{return this.i;}
set{this.i = value;}
}
private int j;
float k;
}
class class2
{
&nb......
通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行(转) (2006-07-21 10:33:00)
摘要:本文将讨论:
• 缓存和 Forms 身份验证
• 视图状态和会话状态
• 配置文件属性序列化
• 线程池饱和
• 模拟和设置配置文件
本文使用了下列技术:
.NET Framework、ASP.NET、Windows Server 2003
本页内容
LoadControl 和输出缓存
会话和输出缓存
Forms 身份验证票证生存期
视图状态:无声的性能杀手
SQL Server 会话状态:另一个性能杀手
未缓存的角色
配置文件属性序列化
线程池饱和
模拟和 ACL 授权
不要完全信赖它 — 请设置数据库的配置文件!
结论
ASP.NET 成功的其中一个原因在于它降低了 Web 开发人员的门槛。即便您不是计算机科学博士也可以编写 ASP.NET 代码。我在工作中遇到的许多 ASP.NET 开发人员都是自学成材的,他们在编写 C# 或 Visual Basic® 之前都在编写 Microsoft® Excel® 电子表格。现在,他们在编写 Web 应用程序,总的来说,他们所做的工作值得表扬。
但是与能力随之而来的还有责任,即使是经验丰富的 ASP.NET 开发人员也难免会出错。在多年的 ASP.NET 项目咨询工作中,我发现某些错误特别容易导致缺陷不断发生。其中某些错误会影响性能。其他错误会抑制可伸缩性。有些错误还会使开发团队耗费宝贵的时间来跟踪错误和意外的行为。
下面是会导致 ASP.NET 生产应用程序的发布过程中出现问题的 10 个缺陷以及可避免它们的方法。所有示例均来自我对真实的公司构建真实的 Web 应用程序的亲身体验,在某些情况下,我会通过介绍 ASP.NET 开发团队在开发过程中遇到的一些问题来提供相关的背景。
LoadControl 和输出缓存
极少有不使用用户控件的 ASP.NET......
自己收集整理琢磨的一些好的算法(2006-07-18 15:49:00)
摘要://byte[] sby = System.Text.Encoding.Unicode.GetBytes("宁绍");
//string str = "";
//for (int i = 0; i < sby.Length; i++)
//{
// str += sby[i].ToString() + ",";
//}
//Label1.Text = str;
// String a = "159343536267578990074874";
// String a1="";
// char temp;
//int b = a.Length;
//char[] c = a.ToCharArray();
//for(int i=0;i<b;i++)
// for (int j=0;j<b-i-1 ; j++)
 ......
ASP.NET Web 服务器控件事件模型 (2006-06-07 14:41:00)
摘要:ASP.NET 中有一个重要功能,允许您通过与客户端应用程序中类似的、基于事件的模型来对网页进行编程。举一个简单的例子,例如,可以向 ASP.NET 网页中添加一个按钮,然后为该按钮的 Click 事件编写事件处理程序。尽管这种情况在仅使用客户端脚本(在动态 HTML 中处理按钮的 onclick 事件)的网页中很常见,但 ASP.NET 将此模型引入到了基于服务器的处理中。
与传统 HTML 页或基于客户端的 Web 应用程序中的事件相比,由 ASP.NET 服务器控件引发的事件的工作方式稍有不同。导致差异的主要原因在于事件本身与处理该事件的位置的分离。在基于客户端的应用程序中,在客户端引发和处理事件。但是,在 ASP.NET 网页中,与服务器控件关联的事件在客户端(浏览器)上引发,但由 ASP.NET 页在 Web 服务器上处理。
对于在客户端引发的事件,ASP.NET Web 控件事件模型要求在客户端捕获事件信息,并通过 HTTP POST 将事件消息传输到服务器。页必须解释该 POST 以确定所发生的事件,然后在要处理该事件的服务器上调用代码中的相应方法。有关更多信息,请参见 ASP.NET Web 服务器控件事件模型。
ASP.NET 处理捕获、传输和解释事件等任务。当您在 ASP.NET 网页中创建事件处理程序时,通常无需考虑捕获事件信息并使其可用于您的代码的方式。创建事件处理程序的方式与您在传统的客户端窗体上的创建方式大体相同。尽管如此,ASP.NET 网页中的事件处理仍有一些您应该注意的地方。
服务器控件和页的事件组
由于大多数 ASP.NET 服务器控件事件要求到服务器的往返行程才能进行处理,因此这些事件可能会影响页的性能。因此,服务器控件仅提供有限的一组事件,通常仅限于 Click 类型事件。一些服务器控件支持 Change 事件。例如,CheckBox Web 服务器控件在用户单击该框时引发服务器代码中的 CheckedChanged 事件。一些服务器控件支持更抽象的事件。例如,Calendar Web 服务器控件引发 SelectionChanged 事件,该事件是 Click 事件的更抽象版本。
对于服务器控件,不支持经常发生(并且是在用户不知道的情况下引发)的事件,如 onmouseover 事件。ASP.NET 服务器......
ASP.NET Web 应用程序中的页和应用程序上下文(2006-06-07 14:37:00)
摘要:在 Web 应用程序运行时,ASP.NET 将维护有关当前应用程序、每个用户会话、当前 HTTP 请求、请求的页等方面的信息。ASP.NET 包含一系列类,用于封装这些上下文信息。
ASP.NET 使这些类的实例可用作您可以从代码访问的内部对象。下表列出这些内部对象,同时也列出生成这些实例的类。
对象名
说明
ASP.NET 类
Response
提供对当前页的输出流的访问。您可以使用此类将文本插入页中、编写 Cookie,等等。有关详细信息,请参见 System.Web.UI.Page.Response 属性。
HttpResponse
Request
提供对当前页请求的访问,其中包括请求标题、Cookie、客户端证书、查询字符串等。您可以使用此类读取浏览器已经发送的内容。有关详细信息,请参见 System.Web.UI.Page.Request 属性。
HttpRequest
Context
提供对整个当前上下文(包括请求对象)的访问。您可以使用此类共享页之间的信息。有关详细信息,请参见 System.Web.UI.Page.Context 属性。
HttpContext
Server
公开可以用于在页之间传输控件的实用工具方法,获取有关最新错误的信息,对 HTML 文本进行编码和解码,等等。有关详细信息,请参见 System.Web.UI.Page.Server 属性。
HttpServerUtility
Application
提供对所有会话的应用程序范围的方法和事件的访问。还提供对可用于存储信息的应用程序范围的缓存的访问。有关详细信息,请参见 ASP.NET 应用程序状态。
HttpApplicationState
Session
为当前用户会话提供信息。还提供对可用于存储信息的会话范围的缓存的访问,以及控制如何管理会话的方法。有关详细信息,请参见 ASP.NET 会话状态。
HttpSessionState
Trace
提供在 HTTP 页输出中显示系统和自定义跟踪诊断消息的方法。有关详细信息,请参见 ASP.NET 跟踪。
......
ASP.NET 页生命周期概述(2006-06-07 14:34:00)
摘要:ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。了解页的生命周期非常重要,这样就能在合适的生命周期阶段编写代码,以达到预期效果。此外,如果开发自定义控件,则必须熟悉页生命周期,从而正确地初始化控件,使用视图状态数据填充控件属性以及运行所有控件行为逻辑。(控件的生命周期基于页的生命周期,但是页引发的控件事件比单独的 ASP.NET 页中可用的事件多。)
常规页生命周期阶段
一般来说,页要经历下表概述的各个阶段。除了页生命周期阶段以外,还有在请求前后出现的应用程序阶段,但是这些阶段并不特定于页。有关更多信息,请参见 ASP.NET 应用程序生命周期概述。
阶段
说明
页请求
页请求发生在页生命周期开始之前。用户请求页时,ASP.NET 将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。
开始
在开始阶段,将设置页属性,如 Request 和 Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置 IsPostBack 属性。此外,在开始阶段期间,还将设置页的 UICulture 属性。
页初始化
页初始化期间,可以使用页中的控件,并将设置每个控件的 UniqueID 属性。此外,任何主题都将应用于页。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。
加载
加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。
验证
在验证期间,将调用所有验证程序控件的 Validate 方法,此方法将设置各个验证程序控件和页的 IsValid 属性。
回发事件处理
如果请求是回发请求,则将调用所有事件处理程序。
呈现
在呈现期间,视图状态将被保存到页,然后页将调用每个控件,以将其呈现的输出提供给页的 Response 属性的 OutputStream。
卸载
完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,将卸载页属性(如 Response 和......
ASP.NET 应用程序生命周期概述(2006-06-07 14:33:00)
摘要:本主题概述应用程序生命周期,列出重要的生命周期事件,并描述如何编写适合应用程序生命周期的代码。在 ASP.NET 中,若要对 ASP.NET 应用程序进行初始化并使它处理请求,必须执行一些处理步骤。此外,ASP.NET 只是对浏览器发出的请求进行处理的 Web 服务器结构的一部分。了解应用程序生命周期非常重要,这样才能在适当的生命周期阶段编写代码,达到预期的效果。
应用程序生命周期概述
下表描述了 ASP.NET 应用程序生命周期的各个阶段。
阶段
说明
用户从 Web 服务器请求应用程序资源。
ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点。ASP.NET 是 Web 服务器下的 ISAPI 扩展。Web 服务器接收到请求时,会对所请求的文件的文件扩展名进行检查,确定应由哪个 ISAPI 扩展处理该请求,然后将该请求传递给合适的 ISAPI 扩展。ASP.NET 处理已映射到其上的文件扩展名,如 .aspx、.ascx、.ashx 和 .asmx。
注意
如果文件扩展名尚未映射到 ASP.NET,则 ASP.NET 将不会接收该请求。对于使用 ASP.NET 身份验证的应用程序,理解这一点非常重要。例如,由于 .htm 文件通常没有映射到 ASP.NET,因此 ASP.NET 将不会对 .htm 文件请求执行身份验证或授权检查。因此,即使文件仅包含静态内容,如果希望 ASP.NET 检查身份验证,也应使用映射到 ASP.NET 的文件扩展名创建该文件,如采用文件扩展名 .aspx。
注意
如果要创建服务于特定文件扩展名的自定义处理程序,必须在 IIS 中将该扩展名映射到 ASP.NET,还必须在应用程序的 Web.config 文件中注册该处理程序。有关更多信息,请参见 HTTP 处理程序介绍。
ASP.NET 接收对应用程序的第一个请求。
当 ASP.NET 接收到对应用程序中任何资源的第一个请求时,名为 ApplicationManager 的类会创建一个应用程序域。应用程序域为全局变量提供应用程序隔离,并允许单独卸载每个应用程序。在应用程序域中......
system.web 元素(ASP.NET 设置架构)(2006-06-07 14:29:00)
摘要:system.web 元素(ASP.NET 设置架构)
指定 ASP.NET 配置节的根元素,并包含用于配置 ASP.NET Web 应用程序和控制应用程序行为的配置元素。configuration 元素(常规设置架构)
system.web 元素(ASP.NET 设置架构)
<system.web>
<anonymousIdentification>
<authentication>
<authorization>
<browserCaps>
<caching>
<clientTarget>
<compilation>
<customErrors>
<deployment>
<deviceFilters>
<globalization>
<healthMonitoring>
<hostingEnvironment>
<httpCookies>
<httpHandlers>
<httpModules>
<httpRuntime>
<identity>
<machineKey>
<membership>
<mobileControls>
<pages>
<processModel>
<profile>
<roleManager>
<securityPolicy>
<sessionPageState>
<sessionState>
<siteMap>
<trace>
<trust>
<urlMapp......
configuration 元素(常规设置架构)(2006-06-07 14:28:00)
摘要:configuration 元素(常规设置架构)
公共语言运行库和 .NET Framework 应用程序所使用的每个配置文件中均需要的根元素。
<configuration xmlns="schema URL">
<!-- configuration settings -->
</configuration>
var ExpCollDivStr=ExpCollDivStr;
ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl03381919a,";
var ExpCollImgStr = ExpCollImgStr;
ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl03img,";
属性和元素
下面几部分描述了属性、子元素和父元素。
属性
属性
说明
xmlns
可选的 String 属性。
指定用于验证配置文件的 XML 架构的 URL。如果未设置此属性,则无法在 Microsoft Visual Studio 中使用 F1 帮助打开配置元素的主题。
ASP.NET 2.0 版的默认值为 "http://schemas.microsoft.com/.NetConfiguration/v2.0"。
子元素
元素
说明
configSections
指定配置节和命名空间声明。
appSettings
包含自定义应用程序设置,如文件路径、XML Web services URL 或存储在应用程序的 .ini 文件中的任何信息。
connectionStrings
为 ASP.NET 应用程序和功能指定数据库连接字符串(名称/值对的形式)的集合。
location
指定应用子配置设置的资源。此元素也锁定配置设置,以防止子配置文件重写这些设置。
ASP.NET 设置架构
指定 ASP.NET 配置架构中的所有元素。
启动设置架构
指定......
pages 元素(ASP.NET 设置架构)(2006-06-07 14:27:00)
摘要: pages 元素(ASP.NET 设置架构)
<pages
buffer="[True|False]"
enableEventValidation="[True|False]"
enableSessionState="[True|False|ReadOnly]"
enableViewState="[True|False]"
enableViewStateMac="[True|False]"
smartNavigation="[True|False]"
autoEventWireup="[True|False]"
pageBaseType="typename, assembly"
userControlBaseType="typename"
validateRequest="[True|False]"
masterPageFile="file path"
theme="string"
styleSheetTheme="string"
maxPageStateFieldLength="number"
compilationMode="[Always|Auto|Never]"
pageParserFilterType="string"
viewStateEncryptionMode="[Always|Auto|Never]"
maintainScrollPositionOnPostBack="[True|False]"
asyncTimeout="number"
>
&nb......