⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 applications.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
字号:
<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>

<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->

<h4>应用程序概述</h4>

<div class="indent" style="font-family:Verdana; font-size:8pt;">
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#what">什么是 ASP.NET 应用程序?</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#creating">创建应用程序</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#lifetime">应用程序的生存期</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#multiplethreads">关于多线程的说明</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b>
    <a class="toc2" href="#summary">本节小结</a><br>
</div>

<p>
<hr>

<!--BEGIN SECTION--> <a name="what"><span class="subhead">什么是 ASP.NET 应用程序?</span>
<p>


ASP.NET 将应用程序定义为所有文件、页、处理程序、模块和可执行代码的总和,该应用程序可在 Web 应用程序服务器上的给定虚拟目录(及其子目录)的范围内调用或运行。例如,可在 Web 服务器计算机上的“/order”虚拟目录中发布一个“order”应用程序。对于 IIS,可在 Internet 服务管理器中设置虚拟目录;该目录包含所有子目录,除非子目录本身就是虚拟目录。
<p>


Web 服务器上的每个 ASP.NET 框架应用程序都在唯一的 .NET 框架应用程序域中执行,从而保证了类隔离(无版本或命名冲突)、安全沙箱(防止访问特定计算机或网络资源)和静态变量隔离。
<p>

ASP.NET 在 Web 应用程序的生存期内维护 <b>HttpApplication</b> 实例池。ASP.NET 自动指派其中的某个实例处理应用程序接收到的每个传入 HTTP 请求。所指派的特定 <b>HttpApplication</b> 实例负责管理请求的整个生存期,并仅在请求完成后才被重新使用。这意味着 <b>HttpApplication</b> 中的用户代码不必是可重入的。
<p>



<!--BEGIN SECTION--> <a name="creating"><span class="subhead">创建应用程序</span>
<p>

若要创建 ASP.NET 框架应用程序,可以使用现有虚拟目录或创建新的虚拟目录。例如,如果安装了包含 IIS 的 Windows 2000 Server,则可能有一个 C:\InetPub\WWWRoot 目录。可以使用 Internet 服务管理器(位于“开始”<nobr>-&gt;</nobr>“程序”<nobr>-&gt;</nobr>“管理工具”下)来配置 IIS。右击一个现有目录并选择“新建”(创建新的虚拟目录)或“属性”(提升现有的常规目录)。
<p>

通过在虚拟目录中放置一个类似于下面这样的简单 .aspx 页并通过浏览器来访问它,即可开始创建 ASP.NET 应用程序。

<p><Acme:TabControl runat="server">
<Tab Name="C#">
&lt;%@Page Language="C#"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;h1&gt;hello world, &lt;% Response.Write(DateTime.Now.ToString()); %&gt;&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
</Tab>

<Tab Name="VB">
&lt;%@Page Language="VB"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;h1&gt;hello world, &lt;% Response.Write(DateTime.Now.ToString()) %&gt;&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
</Tab>

<Tab Name="JScript">
&lt;%@Page Language="JScript"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;h1&gt;hello world, &lt;% Response.Write(DateTime.Now.ToString()); %&gt;&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
</Tab>

</Acme:TabControl><p>

现在可以添加适当的代码以使用<a href="stateoverview.aspx">应用程序</a>对象,例如与应用程序范围一起存储对象。通过创建 <a href="globalasax.aspx">global.asax</a> 文件,还可以定义各种事件处理程序,例如为 <b>Application_Start</b> 事件。
<p>

<!--BEGIN SECTION--> <a name="lifetime"><span class="subhead">应用程序的生存期</span>
<p>

ASP.NET 框架应用程序在第一次向服务器发出请求时创建,在此之前,不执行 ASP.NET 代码。当第一个请求发出后,将创建一个 <b>HttpApplication</b> 实例池并引发 <b>Application_Start</b> 事件。<b>HttpApplication</b> 实例处理该请求以及后面的请求,直到最后一个实例退出并引发 <b>Application_End</b> 事件。
<p>

注意 <b>HttpApplication</b> 的 <b>Init</b> 和 <b>Dispose</b> 方法在每个实例的基础上调用,因此可以在 <b>Application_Start</b> 和 <b>Application_End</b> 之间被多次调用。在一个 ASP.NET 应用程序中,只有这些事件在 <b>HttpApplication</b> 的所有实例中共享。
<p>



<!--BEGIN SECTION--> <a name="multiplethreads"><span class="subhead">关于多线程的说明</span>
<p>

如果与应用程序范围一起使用对象,应注意 ASP.NET 并发处理请求,且<b>应用程序</b>对象可被多个线程访问。因此,如果页被不同的客户端同时重复请求,则以下代码将是危险的,可能不会产生预期的结果。

<p><Acme:TabControl runat="server">
<Tab Name="C#">
&lt;%
Application["counter"] = (Int32)Application["counter"] + 1;
%&gt;
</Tab>

<Tab Name="VB">
&lt;%
Application("counter") = CType(Application("counter") + 1, Int32)
%&gt;
</Tab>

<Tab Name="JScript">
&lt;%
Application("counter") = Int32(Application("counter") + 1);
%&gt;
</Tab>

</Acme:TabControl><p>

若要使此代码线程是安全的,请使用 <b>Lock</b> 和 <b>UnLock</b> 方法序列化对<b>应用程序</b>对象的访问。但是,这样做也意味着接受相当大的性能影响:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
&lt;%
Application.Lock();
Application["counter"] = (Int32)Application["counter"] + 1;
Application.UnLock();
%&gt;
</Tab>

<Tab Name="VB">
&lt;%
Application.Lock()
Application("counter") = CType(Application("counter") + 1, Int32)
Application.UnLock()
%&gt;
</Tab>

<Tab Name="JScript">
&lt;%
Application.Lock();
Application("counter") = Int32(Application("counter") + 1);
Application.UnLock();
%&gt;
</Tab>

</Acme:TabControl><p>
另一个解决方案是使同应用程序范围一起存储的对象成为线程安全的。例如,注意由于性能原因,<b>System.Collections</b> 命名空间中的集合类不是线程安全的。
<p>

<h4><a name="summary">本节小结</a></h4>
<ol>
<li>ASP.NET 框架应用程序由 Web 服务器一个虚拟目录下的所有内容组成。
<li>通过向 Web 服务器上的虚拟目录添加文件来创建 ASP.NET 框架应用程序。
<li>ASP.NET 框架应用程序的生存期由 <b>Application_Start</b> 和 <b>Application_End</b> 事件标记。
<li>对应用程序范围对象的访问对于多线程访问必须是安全的。
</ol>
<p>


<!-- #include virtual="/quickstart/aspplus/include/footer.inc" -->








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -