在ASP.NET 2.0中操作数据之五十八:在程序启动阶段(3)

  为了在程序启动时执行代码,我们需要创建一个名为Global.asax的文件。该文件包含了application、session和request级事件的事件处理器。在该文件里我们将添加在程序启动时要执行的代码。

  要在网站根目录里添加Global.asax文件,在Visual Studio解决资源管理器里,右击网站项目,选Add New Item,从Add New Item对话框里选择Global应用程序项目类型,然后点Add按钮。

  注意:如果你的根目录里已经存在Global.asax文件,Global应用程序项目类型就不会出现在Add New Item对话框里。

/uploads/allimg/200612/1JH2YU_0.png

 
图3:在根目录添加Global.asax文件。

默认的Global.asax文件里包括了5个方法,每个方法都有一个服务器端(server-side)<script>标记:

Application_Start –当程序启动时执行

Application_End – 当程序完结时执行

Application_Error – 每当程序发生未经处理(unhandled)的异常时发生。

Session_Start – 当创建一个session时执行

Session_End – 当session完结时或被移除时发生

Application_Start事件处理器在程序的生命周期(life cycle)里只发生一次。程序起始于一个ASP.NET资源(resource)首次被请求,持续运行直到程序重新启动为止。关于程序生命周期的更多细节请参阅文章《ASP.NET Application Life Cycle Overview》

本文,我们只需要为Application_Start方法添加代码,放心大胆的将其它方法删除。在Application_Start里,仅仅调用StaticCacheclass类的LoadStaticCache()方法。这将装载并缓存supplier信息:

<%@ Application Language="C#" %> <script runat="server"> void Application_Start(object sender, EventArgs e) { StaticCache.LoadStaticCache(); } </script>

  要做的就是这些!在程序开始时,LoadStaticCache()方法会从BLL获取supplier信息,再存储进一个static member变量(或是你在StaticCache class类里面用的其它一些cache store)。为验证起见,在Application_Start 方法里设置断点(breakpoint)并执行程序。另外,在并发请求(Subsequent requests)时,不会执行Application_Start方法。

/uploads/allimg/200612/1JH29543_0.png


图4:用Breakpoint来验证Application_Start事件处理器的执行

  注意:如果你在首次调试时没有遇到Application_Start breakpoint,那是因为你的程序已经启动了。可以修改Global.asax 或 Web.config文件来强迫程序重新启动。你仅仅在这些文件的末尾添加(或删除)一个空白行来快速的重启程序。

第五步:展示缓存数据

  现在,StaticCache class类在程序启动时将supplier相关的数据进行了缓存。要在表现层使用这些数据,我们可以在ASP.NET页面的后台代码通过ObjectDataSource控件或编程调用StaticCache class类的GetSuppliers()方法。让我们看看如何使用ObjectDataSource 和 GridView控件来展示缓存的supplier信息。

  首先,打开文件夹里的AtApplicationStartup.aspx页面,在“设计”模式里从工具箱里拖一个GridView控件到页面,设置其ID为Suppliers。然后,从其智能标签里选择创建一个新的ObjectDataSource,名为SuppliersCachedDataSource,设置它使用StaticCache class类的GetSuppliers()方法。

/uploads/allimg/200612/1JH34H9_0.png


图5:设置ObjectDataSource控件使用StaticCache Class类

/uploads/allimg/200612/1JH34631_0.png


图6:使用GetSuppliers()方法来获取缓存的Supplier数据

  完成设置后,Visual Studio会自动的为SuppliersDataTable里的每一个列添加一个BoundFields。因此,你的GridView 和 ObjectDataSource控件的声明标记看起来应该像下面这样:

<asp:GridView runat="server" AutoGenerateColumns="False" DataKeyNames="SupplierID" DataSourceID="SuppliersCachedDataSource" EnableViewState="False"> <Columns> <asp:BoundField DataField="SupplierID" HeaderText="SupplierID" InsertVisible="False" ReadOnly="True" SortExpression="SupplierID" /> <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" SortExpression="CompanyName" /> <asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" /> <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" /> <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" /> <asp:BoundField DataField="Phone" HeaderText="Phone" SortExpression="Phone" /> </Columns> </asp:GridView> <asp:ObjectDataSource runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetSuppliers" TypeName="StaticCache" />

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwwgg.html