RSS 2.0 Feed
2004-08 Entries
摘要:Web 页本是无状态而断续的 Web 模型,B/S 是 C/S 的一个特例,但它仍然延续了 C/S 的“请求”-“响应”机制:从接到请求,分析请求并根据请求、在服务器上索取响应数据库及其他资源,加工处理形成一份 HTML 页面(这里可能会包含客户端脚本以达到特定效果),然后向客户端浏览器发回“响应”。Web 就这样一个来回(loop),一个来回的运行着。 这样来说,Web 显然是断续的。那“无状态”怎么讲?以 Windows 程序为例,比如文本框,它的 Text 属性值如果发生改变,你可以知道改变前的值和改变后的值,这就是状态的一个作用。 传统 Web 处理引擎(CGI, ASP, PHP, JSP 等)的编程,就基本上沿用着这套线性的模型。 ASP.NET Web Form 的“连续”和“有状态”假象 从根本上说,ASP.NET 并没有改变 Web 页的本质:每次请求 ASP.NET 页时,服务器就会加载一个 ASP.NET 页,并在请求完成时卸载该页。页及其包含的服务器控件负责执行请求并将 HTML 呈现给客户端。 ASP.NET 的设计者们,从实际访问者的角度重新考虑了这一过程:访问者打开一个页面,点击一个按钮,看到新的画面……这一切似乎都是连续的。 这种连续性假象是由 ASP.NET 页框架、页及其控件实现的。回发后,控件的行为必须看起来是从上次 Web 请求结束的地方开始的。另一方面,对于 Web Form 中的 TextBox,ASP.NET 也让它们具有了状态,可以知道上一个 loop 和这一个 loop 之间的 TextBox 值的变化;如果变化,可能会触发 TextBox 的 TextChanged 事件。这同样是 ASP.NET 特意实现的一个假象。 ASP.NET 服务器控件的生命周期一般如下: 1. 初始化  - Init 事件 (OnInit 方法) 2. 加载视图状态 - LoadViewState 方法 3. 处理回发数据 - LoadPostData 方法    对实现 IPostBackDataHandler 接口的控件,即可以自动加载回发数据的控件,如 TextBox, DropDownList 等。 4. 加载 - Load 事件 (OnLoad 方法) 5. 发送回发更改通知 - RaisePostDataChangedEvent 方法    对实现 IPostBackDataHandler 接口的控件,即可以自动加载回发数据的控件。    在第 3 步中加载回发数据,如果回发前后数据发生更改,则在这一步触发相应的服务端事件。 6. 处理回发事件 - RaisePostBackEvent 方法    对实现 IPostBackEventHandler 接口的控件,即能引起回发的控件,如 Button, LinkButton,......[阅读全文]

posted @ | Feedback (19) |

摘要:.NET Framework 提供了三种计时器,分别是: System.Timers.Timer基于服务器的计时器,位于“工具箱”的“组件”选项卡上;  System.Windows.Forms.Timer基于 Windows 的标准计时器,位于“工具箱”的“Windows 窗体”选项卡上;  System.Threading.Timer仅可在编程时使用的线程计时器。 三种计时器各有特色,详见你的 Visual Studio .NET 文档(位置在: Visual Studio .NET  - Visual Basic 和 Visual C# .NET - 使用组件编程 - 创建文件系统和 Timer 组件 - 基于服务器的计时器简介)。 我曾经写过一篇: 在 ASP.NET 中使用计时器(Timer)主要列出了在 ASP.NET 应用程序(注意不是 Web Form )中使用 System.Timers.Timer 的一个示例。 有网友把这个例子写进了 Web Form,试验失败后来我的 blog “发泄”怨气,我是可以理解的,但如某些人那样态度过于“蛮横”也让人难以接受。 Web 页面本来就和 Windows 程序不同的思路,Web 页面大多时候更像 C/S 结构的“请求”-“应答”模型(实际上也是这样)。这样“请求”和“应答”就要讲究效率:不能说你“请求”完了,服务器先“休息”1 分钟,然后在“应答”你;如是是这样,还有网友去你的站点吗? 虽然微软花了不少功夫让 Web Form “看起来”很像 Windows Form,但改变不了 Web 页面的实质,所以在 Web Form 中放置计时器的想法是幼稚的。 其实我能理解,几位网友的实际需求是:让网页定时刷新,或者定时做什么事情。可请你注意,这里的“定时”是发生在哪里的?是服务器端吗?不是吧,是在用户客户端,是在访问你页面的用户浏览器端的“定时”! ASP.NET 程序中 C#/VB.NET 代码书写的代码都是在服务器端执行的。那么 .NET Framework 提供的三种计时器都不能满足你这样的需求!客户端的“定时”如何要用服务端的“Timer”呢? 客户端的“定时”就要用客户端手段去解决,HTML DOM 模型中的 window 对象有 setTimeout 方法,可以帮助你实现你所想要的客户端效果。 BTW,再比如说,你想让访问者看到一个警告框,这个动作同样发生在客户端,所以依然是用客户端手段(比如: HTML DOM 中 window 对象的 alert 方法),而不是用 .NET C#/VB.NET 代码中的 MsgBox.Show() (如果这样将会在服务器上显示一个警告框,你难道要警告“管理员”吗?)。 回过头来说那篇文章,虽然在 Web Form 中不能使用定时器,但在 ASP.NET 应用程序中却是可以的。 ASP.NET 站点中的所有页面组成一个 Web 应用程序,这个程序是在服务器端运行的,存储大家熟悉的 Application、Session 等信息。当 Web 应用程序从服务器启动时,会触发 Application_OnStart;应用程序结束(服务器关机、重启)时,会触发 Application_OnEnd;接到新的客户端“请求”,Application_BeginRequest;……这是一个持续的过程。(一般地,这些代码都可以写在 global.asax......[阅读全文]

posted @ | Feedback (36) |

摘要: 我不是以下国家的公民或常住居民,也不受以下国家政府的管制。这些国家包括:古巴、伊朗、苏丹、伊拉克、利比亚、朝鲜、叙利亚以及其他美国限制出口到的国家。 我不会直接或间接地向以上国家或国家公民及常住居民下载、出口或再出口程序。 我不在美国财政部的特别指定国、特别指定恐怖分子、特别指定毒品商名单中,也不在美国商业部的拒绝订单表中。 我不会直接或间接的向以上名单中的人员下载、出口或再出口程序。 我将不使用并不允许这些程序用于任何美国法律禁止的用途,包括开发、设计、制造或生产具有大规模杀伤力的核、化学或生物武器。 这样似乎使用 Oracle 作开源或共享的项目是违反协议的,因为我们无法确保最终用户到底是不是朝鲜人,或者“恐怖分子”。...[阅读全文]

posted @ | Feedback (8) | Filed Under [ 日常生活 ]

摘要:我选择大连作为我的起步点,可能主要是因为这个美丽的城市,在我没来之前已经给了我不错的印象。 它的城市的确美丽,大多数街道干净整洁,色彩搭配似乎也很养眼,而且好像很少堵车,秩序井然(听说大连的司机都很怕警察,比其他地方的更严重一些),汽车都挺守规矩,绝对不压黄线,甚至连白线都很少压。自行车在这里属于罕见的东西,听说放在外面的自行车小偷都不会偷,因为几乎没有市场。这里都是些高高低低的“丘陵”,骑车是痛苦了点。唯一感觉秩序有些差的,应该是公交车,没人骑车,人就比其他地方多很多,车虽然还算多,但相对人来说还是不够;车上的人“生活水平”很差,人均面积只够放两只脚(呵呵,有些夸张)。 这里的 IT 业本来并不怎么引人注意的。和北京、上海、深圳这些城市不同,大连这里的软件企业大都做外包服务,这个比例据说有 80% 以上。京、沪、深也有这样的外包服务公司,但不如这里这样密集,它们很多还是在做自己的产品的,或者说拥有自己的知识产权。 外包,简单的说,就是给人家打工,没有自己的知识产权。举个例子,就像服装厂,京、沪、深的公司是在做自己品牌的“服装”(软件产品);外包公司就是,别人公司给这边一个需求单,然后这边做好了给人家,贴人家的牌子,这边只拿到加工费。 大连政府的定位是,做东北亚 IT 软件外包服务中心,要做中国的班加罗尔(印度城市,做外包发展起来的软件中心)。7月底(28-31日),第二届中国国际软件与信息服务交易会在大连举行,据说是这一领域内唯一的国家级交易会。 在中国目前的条件下,或者说在大连现在条件下,似乎外包也是一条路。 我听过一个化妆品厂的遭遇,那个厂专门做国外某品牌的代工,生产的产品交给人家贴上人家的牌子卖。厂长一直试图生产自己的品牌,但尝试总是以失败告终。或许是机会还没到吧…… 软件的外包应该也是如此。...[阅读全文]

posted @ | Feedback (14) | Filed Under [ 日常生活 ]

摘要:好久没来博客堂了,我已在大连开始工作了。第一个月事情太多,一直没有机会写些东西。 今天发了一篇关于 .NET 访问 Oracle 数据库的文章请大家批评。。。。。。...[阅读全文]

posted @ | Feedback (6) |