ASP.NET是一个非常强大的构建Web应用的平台,它提供了极大的灵活性和能力以致于可以用它来构建所有类型的Web应用。 绝大多数的人只熟悉高层的框架如: WebForms 和 WebServices --这些都在ASP.NET层次结构在最高层。 这篇文章的资料收集整理自各种微软公开的文档,通过比较 IIS5、IIS6、IIS7 这三代 IIS 对请求的处理过程, 让我们熟悉 ASP.NET的底层机制 并对请求(request)是怎么从Web服务器传送到ASP.NET运行时有所了解。通过对底层机制的了解,可以让我们对 ASP.net 有更深的理解。 IIS 5 的 ASP.net 请求处理过程 对图的解释: IIS 5.x 一个显著的特征就是 Web Server 和真正的 ASP.NET Application 的分离。作为 Web Server 的IIS运行在一个名为 InetInfo.exe 的进程上,InetInfo.exe 是一个Native Executive,并不是一个托管的程序,而我们真正的 ASP.NET Application 则是运行在一个叫做 阅读全文>
发表于 @ 2008年07月25日 15:13:00|评论(loading...)|编辑|收藏
问题:当一个正在执行中的ASPX页面执行到一半的时候,浏览器中你关闭了这个页面,服务器端对应的这个页面的代码仍然在执行么? 答案:除非你代码里面做了特殊判断,否则仍然正在执行。 注意点: 1、客户端显示页面的时候,后台已经执行完了的页面对象早已经不存在了。当然这时候谈不上服务器段执行不执行的问题了。 2、页面还没有返回,处于等待状态的时候。关闭ASPX页面,才会涉及到上面提到的服务器端仍然在执行的情况。 3、客户端关闭的时候根本不向服务器发送指令。 4、除非你代码里面做了特殊判断,这里的特殊判断指用 if(!Response.IsClientConnected) 来检测状态而用代码终止运行。 下面的简单代码就是演示关闭页面后,看是否仍然在执行? 你可以在这个页面打开后, 还没有返回任何信息的时候把这个页面关闭,然后看指定目录下是否有对应文件被创建并填写内容。 protected void Page_Load(object sender, EventArgs e)
{
StringBuilder阅读全文>
发表于 @ 2008年07月23日 15:45:00|评论(loading...)|编辑|收藏
在 Windows Form 应用中,我们碰到需要展开一个TreeView 控件的所有树节点的时候很简单,微软已经替我们提供了ExpandAll 方法,我们只要简单的一行代码tv_QTree.ExpandAll();就可以了。即 System.Windows.Forms 命名空间的 TreeView.ExpandAll 方法 。 在WPF中,我们会发现,System.Windows.Controls.TreeView 中没有了 ExpandAll 方法。阅读全文>
发表于 @ 2007年09月05日 16:34:00|评论(loading...)|编辑|收藏
我个人觉得,把一个窗体或者页面用表格拆分,然后我们在每个表格项中增加我们规划好的控件,这种布局方案在没有比较好的美术细胞下,比较容易做出一个至少不难看的页面布局。
基于以上的考虑,我觉得我们技术人员开发一些WPF窗体或者页面的时候,Grid控件应该是我们最常用到的。也应该是最应该掌握的控件。阅读全文>
发表于 @ 2007年08月17日 13:46:00|评论(loading...)|编辑|收藏
你访问以下地址就可以下载Orcas Team Suite 2007年6月份CTP: http://download.microsoft.com/download/f/2/a/f2ac411f-acf9-42a7-a84f-3efc409bcd6b/VSTS_VPCJuneCTP.mht 这个版本可是比 Orcas Beta 1 更新的版本。阅读全文>
发表于 @ 2007年07月12日 17:25:00|评论(loading...)|编辑|收藏
延迟执行的经典例子: 我们用 select ++i 就可以看到在foreach 时候,查询才被执行。 public static void Linq99(){ int[] numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; int i = 0; var q = from n in numbers select ++i; foreach (var v in q) Console.WriteLine("v = {0}, i = {1}", v, i);} 输出结果: v = 1, i = 1v = 2, i = 2v = 3, i = 3v = 4, i = 4v = 5, i = 5v = 6, i = 6v = 7, i = 7v = 8, i = 8v = 9, i = 9v = 10, i 阅读全文>
发表于 @ 2007年07月03日 16:22:00|评论(loading...)|编辑|收藏
Where 子句的用法 我们除了可以如下方式书写带Where子句的LINQ外: from p in products where p.UnitsInStock > 0 && p.UnitPrice > 3.00M select p; 还可以对数组(所有实现了IEnumerable接口的对象都可以)的实体使用 Where 扩展方法。 把一个查询语句写成多个扩展函数的方式,这其实是编译器处理查询语句的方法,比如下面的查询语句: int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };var m = from n in arr where n < 5 orderby n select n; 编译器在编译后,替我们产生的代码等价于如下的代码: IOrderedSequence<int> m = arr.Where<int>(delegate (int n) { return (n < 5);}).Orde阅读全文>
发表于 @ 2007年07月03日 10:54:00|评论(loading...)|编辑|收藏
扩展方法是一个双刃剑,你如果要用扩展方法,就一定得准备碰到别人也用扩展方法,并且万一出现你们都对同一个类进行扩展函数名,参数一样的扩展时候, 会出的各种问题.阅读全文>
发表于 @ 2007年06月12日 18:39:00|评论(loading...)|编辑|收藏
C#3.0 中 DLINQ 从数据库获得数据集,XLINQ从XML文件获得数据集的方法 阅读全文>
发表于 @ 2007年06月12日 13:35:00|评论(loading...)|编辑|收藏
Lambda 表达式(拉姆达表达式) 和 匿名方法 其实是一件事情。唯一的不同是:他们语法表现形式不同。Lambda 表达式是在语法方面的更进一步的进化。引用自 C#首席架构师Anders Hejlsberg 的原话:阅读全文>
发表于 @ 2007年06月12日 10:15:00|评论(loading...)|编辑|收藏
C#3.0 LINQ 查询语法
为何 LINQ 查询语法是以 from 关键字开头的
阅读全文>
发表于 @ 2007年06月07日 17:18:00|评论(loading...)|编辑|收藏
C# 3.0 中对象初始化器(Object Initializers) 和 集合初始化器(Collection Initializers) ,就是简化我们的代码,让本来几行才能写完的代码一行写完。这样在LINQ的使用中,我们才不会把一个LINQ表达式写的巨复杂无比。
阅读全文>
发表于 @ 2007年06月06日 16:34:00|评论(loading...)|编辑|收藏
扩展方法的定义,需要注意三个部分:1、静态类(私有公共都可以);2、静态方法(私有公共都可以);3、第一个函数参数前带 this(必须是第一参数前)
阅读全文>
发表于 @ 2007年06月06日 11:26:00|评论(loading...)|编辑|收藏
使用自动属性后,你可以不用手工声明一个私有成员变量以及编写get/set逻辑,取而代之的是,编译器会自动为你生成一个私有变量和默认的get/set 操作。阅读全文>
发表于 @ 2007年06月05日 13:34:00|评论(loading...)|编辑|收藏