【ASP.NET】 在IIS 7.0 中配置 ASP.NET 应用程序

如果 ASP.NET Web 应用程序以 IIS 7.0 为宿主,则可以用多种方式为该应用程序进行配置设置。这包括:

  • 使用 IIS 管理器。

  • 直接编辑 Web.config 文件。可以在 Visual Studio 或 Visual Web Developer 中或通过使用文本编辑程序完成此任务。

  • 使用 IIS 7.0 命令行工具 (Appcmd.exe)。使用此实用工具,可以指定 IIS 配置设置和 Web 应用程序配置设置。

  • 使用 Windows Management Instrumentation (WMI)。IIS 7.0 WMI 提供程序 WebAdministration 命名空间包含相应的类和方法,可用来为网站、Web 应用程序及其关联对象和属性的管理任务创建脚本。

IIS 7.0 具有模块化体系结构,使您能够指定哪些模块组成 Web 服务器的功能。安装 IIS 7.0 时,默认情况下很多模块未启用。当您使用 ASP.NET 网站时,可能需要启用下列模块:

  • IIS 6 管理兼容性模块,它使 Visual Studio 能够使用元数据库调用与 IIS 7.0 配置存储区进行交互。

  • Windows 身份验证模块,它使您能够在 Visual Studio 中调试 Web 应用程序

  • 一、在本演练中,您将使用 IIS 管理器进行配置设置,然后查看这些设置如何反映在 Web 应用程序的 Web.config 文件中。本演练中阐释的任务包括:

    • 创建一个自定义托管代码模块,并且将该模块放在 Web 应用程序的 App_Code 目录中。

    • 使用 IIS 管理器注册该自定义模块。

    • 使用 IIS 管理器添加自定义 HTTP 标头。

    该模块的功能在本演练中并不重要。本演练要演示的是如何将该模块集成到请求管道中,以及使用 IIS 管理器配置应用程序会对 Web.config 文件造成怎样的影响。

一、创建自定义HTTP模块

首先,您需要创建一个新网站。

创建新的网站

  1. 在 Visual Studio 中,创建一个新的名为“WalkthroughIIS7”的本地 HTTP 网站。

    有关如何创建本地 IIS 网站的信息,请参见演练:在 Visual Web Developer 中创建本地 IIS 网站

  2. “开始”菜单上,依次单击“所有程序”“附件”“运行”

  3. “打开”框中,键入 inetmgr,然后单击“确定”

您现在可以创建自定义 HTTP 模块了。

创建自定义 HTTP 模块

  1. 在 Visual Studio 的“解决方案资源管理器”中,右击 Web 项目节点,再单击“添加新项”

    显示“添加新项”对话框。

  2. “Visual Studio 已安装的模板”下选择“类”

  3. 选择您想使用的编程语言。

  4. 输入“CustomModule”作为类名,然后单击“添加”

    如果网站尚未包含 App_Code 文件夹,此时将显示一个消息,询问您是否要将该类放在 App_Code 文件夹中。如果答案是肯定的,请单击“是”

  5. 在类文件中,移除现有代码,并用下面的代码替换之:

public class CustomModule : IHttpModule { public CustomModule() { // Constructor

 } public void Init(HttpApplication app) { app.BeginRequest += new EventHandler(BeginRequest); } public void BeginRequest(object source, EventArgs e) { HttpApplication app = (HttpApplication)source; HttpContext cont = app.Context; string notification = cont.CurrentNotification.ToString(); string postNotification = cont.IsPostNotification.ToString(); cont.Response.Headers.Set("CustomHeader2", "ASPX, Event = " + notification +

                ", PostNotification = " + postNotification +

                ", DateTime = " + DateTime.Now.ToString()); } public void Dispose() { } }
  1. 这段代码执行下面的操作:

    • 定义一个实现 IHttpModule 接口的自定义托管代码模块。

    •  HttpApplication 实例的 BeginRequest 事件定义一个事件处理程序。该事件处理程序定义了一个要添加到响应头集合中的自定义标头。

    • 在模块的 Init 方法中,将该处理程序添加到通知请求管道中。

    因为该类实现了 IHttpModule 接口,所以该类必须实现 Init 方法和 Dispose 方法。此模块中的 Dispose 方法不具有任何功能,但可以在这里根据需要实现释放逻辑。

  2. “生成”菜单中,单击“生成网站”以确保模块中没有错误。

作为本节的最后一项任务,您将创建 ASP.NET 和 HTML 页,以便可以在本演练的稍后部分测试该自定义模块。

创建 ASP.NET 和 HTML 测试页

  1. 将一个名为 ASPXpage.aspx 的新的单文件 ASP.NET 网页添加到应用程序的根文件夹中。

  2. 移除现有标记,并用下面的标记替换之

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<script runat="server">



</script>



<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>ASPX Module Test Page</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

    <%= Response.Headers.Get("CustomHeader2").ToString() %>

    </div>

    </form>

</body>

</html>

  3.将一个名为 HTMLPage.htm 的新 HTML 页添加到 Web 应用程序的根文件夹中。

  4、将下面的标记添加到该 HTML 页中。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

    <title>HTML Module Test Page</title>

</head>

<body>

    <div> HTML page. <br />

    </div>

</body>

</html>

此时,这些页能够运行,但它们没有调用自定义模块。也就是在没有在配置文件中注册我们创建的模块。在下一个过程中,您需要将自定义模块添加到请求管道中。

二、使用IIS管理器进行配置更改

在本节中,您将使用 IIS 管理器为 IIS 应用程序生成几个配置设置。您将注册自定义模块,添加自定义标头,然后关闭静态压缩

注册自定义托管代码模块

  

  1. “开始”菜单上,依次单击“所有程序”“附件”“运行”

  2. “打开”框中,键入 inetmgr,然后单击“确定”

  3. “连接”窗格中,展开计算机或承载该网站的服务器的名称。

  4. 展开“站点”文件夹。

  5. 选择网站“WalkthroughIIS7”。在 Windows Server 2008 中,如果该 Web 应用程序是网站的应用程序,则需要首先展开该网站,然后选择“WalkthroughIIS7”

    默认情况下,IIS 管理器的中心窗格按区域显示 Web 服务器配置选项。对于“WalkthroughIIS7”Web 应用程序,存在两个区域:“ASP.NET”“IIS”

  6. 在中心窗格的“IIS”部分中,双击“模块”图标。

    中心窗格中的“模块”详细信息显示了当前为 IIS 配置的所有模块。

  7. “操作”窗格中,单击“添加托管模块”

    此时将显示“添加托管模块”对话框。

  8. “名称”框中键入“CustomModule”

    名称可以是描述该模块的任何字词。在本演练中,您将直接使用模块名称。

  9. “类型”列表中,选择或键入模块的托管类型的完全限定名。

    “CustomModule”类型出现在该列表中,因为 IIS 配置包括了 App_Code 文件夹中任何实现 IHttpModule 的类。

  10. 确保“仅为对 ASP.NET 应用程序或托管处理程序的请求调用”[Invoke only for request to ASP.NET applications or managed handlers]复选框未选中。

    对于本演练,您希望将该模块应用于管道中的所有请求,而不仅仅是 ASP.NET 请求。

  11. 单击“确定”

    该托管代码模块即被添加到模块列表中。可能必须滚动列表或将列表重新排序才能看到添加的模块。

添加自定义响应头

  1. 在 IIS 管理器的左窗格中,单击“WalkthroughIIS7”节点的名称以显示站点的主配置窗格。

  2. 在中心窗格的“IIS”设置部分中,双击“HTTP 响应头”[HTTP Response Headers]图标。

    “HTTP 响应头”功能详细信息将显示在中心窗格中。该窗格显示了当前定义的所有 HTTP 响应头。

  3. “操作”窗格中,单击“添加”

    将显示“添加自定义 HTTP 响应头”对话框。

  4. “名称”文本框中,输入“CustomHeader1”

    名称可以是描述该标头的任何字词。

  5. “值”文本框中,键入值“SampleHeader”

现在您将关闭静态压缩。这可以防止静态内容(如 HTML 页)被压缩。

关闭静态压缩

  1. 在左窗格中,单击“WalkthroughIIS7”节点的名称以便在中心窗格中查看该站点的主配置窗格。

  2. 在 IIS 管理器的中心窗格中,双击“IIS”设置部分中的“压缩”图标。

    “压缩”功能详细信息将显示在中心窗格中。

  3. 确保“启用静态内容压缩”复选框已清除。

三、在VS中验证配置更改

 

在本演练中,您已经使用 IIS 管理器执行了配置任务。在此过程中,您将查看应用程序的 Web.config 文件中的更改。

 

在 Web.config 文件中检查模块注册

 

  1. 返回到 Visual Studio 应用程序和“WalkthroughIIS7”应用程序。

  2. “解决方案资源管理器”中,右击网站名称,再单击“刷新文件夹”

    这将使网站文件夹的 Visual Studio 视图与磁盘上的文件夹和文件同步。

    如果该应用程序原来不包含 Web.config 文件,那么该 Web 应用程序现在将包含一个 Web.config 文件。如果该应用程序原来已经包含一个 Web.config 文件,那么更改发生在该文件中。

  3. “解决方案资源管理器”中,双击 Web.config 文件以查看其内容。

    system.webServer 节包含您使用 IIS 管理器进行的配置更改。system.webServer 节具有以下子元素:

    • 一个 modules 元素,它为请求处理管道注册自定义模块。

    • 一个 httpProtocol 元素,它定义了自定义响应头。

    • 一个 urlCompression 元素,它禁用了静态压缩。

    system.webServer 节类似于下面的示例:

     
     
    <system.webServer>
    
      <modules>
    
        <add name="CustomModule" type="CustomModule" preCondition="" />
    
      </modules>
    
      <httpProtocol>
    
        <customHeaders>
    
          <add name="CustomHeader1" value="SampleHeader" />
    
        </customHeaders>
    
      </httpProtocol>
    
      <urlCompression doStaticCompression="false" />
    
    </system.webServer>

四、测试自定义模块

 

IIS 7.0 具有集成请求管道。对所有应用程序资源(例如,.aspx 页或 .htm 页)的请求都可能在托管代码模块(例如,您已在本演练中创建的自定义模块)中引发管道通知。

 

说明:

在 IIS 管理器中配置托管代码模块时,您并未选择“仅为对 ASP.NET 应用程序或托管处理程序的请求调用”[Invoke only for request to ASP.NET applications or managed handlers]选项。如果您选择了此选项,则自定义模块只会接收有关 ASP.NET 资源的管道通知,而不会接收有关静态资源(例如,HTML 文件)的管道通知。

 

验证自定义模块应用于所有资源

 

  1. 在 Visual Studio 中,打开 ASPXpage.aspx 页,然后按 Ctrl+F5 在浏览器中查看该页。

    该模块中定义的自定义标头将显示在浏览器中。在 ASP.NET 页中,无法访问由 IIS 定义的自定义标头,因为此标头信息是在已经将页内容呈现到流之后添加的。但是,使用对 HTTP 通信进行监视的工具(例如,Fiddler)可以确认该标头已设置。

  2. 打开 HTTP 通信监视工具,并且在浏览器中刷新 ASPXpage.aspx 页。

  3. 验证“CustomHeader1”“CustomHeader2”出现在响应的标头集合中。

  4. 在浏览器中查看 HTMLPage.htm。

  5. 验证“CustomHeader1”“CustomHeader2”出现在响应的标头集合中。

 

本演练向您介绍了 IIS 7.0 中 ASP.NET 的配置。IIS 7.0 Web 服务器的配置设置和 ASP.NET 的配置设置被合并到一个配置文件中,您可以使用单个管理界面编辑该配置文件。

 

你可能感兴趣的:(asp.net)