44、IIS 7.0 编程配置与管理全解析

IIS 7.0 编程配置与管理全解析

在进行 IIS 服务器管理时,配置文件的操作至关重要。直接配置能帮助我们理解配置文件的核心概念,而通过代码示例,我们可以更直观地看到如何对配置文件进行操作。

直接配置示例

以下代码展示了如何向配置文件添加新的自定义部分:

Dim section As ConfigurationSection = _
config.GetSection("myCustomSection")
section.GetAttribute("name").Value = "TheName"
section.GetAttribute("Length").Value = 200
section.GetAttribute("IsActive").Value = True
section.GetAttribute("Color").Value = "Blue"
SM.CommitChanges()

运行上述代码后,配置文件将新增如下部分:

<myCustomSection name="TheName" Length="200" IsActive="true" Color="Blue" />

此外,我们还可以创建强类型类,为自定义架构提供智能感知支持。创建与自定义架构对应的类,然后使用 GetSection 方法的重载来设置该部分的 System.Type ,这样就能像直接使用 Microsoft 的托管代码 API 一样获得完整的智能感知支持。

编程配置概述

当管理少量 Web 服务器且更改不频繁时,IIS 管理器和手动管理方法效果良好。但随着需求的增长,我们需要更高效的方式来管理服务器,编程配置应运而生。编程配置在 IIS 中并非新鲜事物,但在支持旧代码的同时得到了极大改进。几乎所有通过 IIS 管理器和直接编辑配置文件能完成的操作,都可以通过编程实现。

首次 IIS 7.0 编程实践

下面将带领大家创建一个使用网页创建应用程序池和网站的工具。

系统要求

本次实践仅需使用 Visual Web Developer 2008、IIS 7.0 和常用的 Web 浏览器。建议在安装了 IIS 的开发机器上进行开发。Visual Studio 2008 功能更强大,但本次实践使用的功能两者都具备,Visual Studio 2005 和 Visual Web Developer 2005 也可使用。可从 www.asp.net 或通过 Google 搜索下载 Visual Web Developer 2008,确保从官方网站下载。

开始使用 Visual Web Developer
  1. 选择开发目录 :在启动 Visual Web Developer 之前,需确定网站的开发磁盘位置。本次演示使用 C:\inetpub\WebSite1
  2. 解决权限问题 :运行 Cassini 时,当前登录用户需要有磁盘访问权限和修改 IIS 的权限。在 Windows Server 2008 和 Vista 的用户账户控制(UAC)环境下,可能需要提升为管理员权限,可通过以下三种方法解决:
    • 确保网站所在文件夹为当前登录用户设置了特定权限。
    • 右键单击 Visual Web Developer 图标,选择“以管理员身份运行”。
    • 理论上可禁用 UAC,但不建议这样做。
  3. 创建新网站
    1. 点击“文件” -> “新建网站”。
    2. 确保选择“ASP.NET 网站”。
    3. 在“位置”下拉框中选择“文件系统”。
    4. 在“位置”文本框中输入 C:\inetpub\WebSite1
    5. 可选择 Visual Basic 或 C# 进行开发,本次实践使用 Visual Basic。
    6. 点击“确定”。
  4. 添加引用
    1. 点击顶部菜单的“网站” -> “添加引用”。
    2. 切换到“浏览”选项卡,导航到 %windir%\System32\inetsrv (通常为 C:\Windows )。
    3. 选择 Microsoft.Web.Administration.dll 并点击“确定”。
设计网页表单
  1. 从右侧的“解决方案资源管理器”中打开 Default.aspx ,若未显示“解决方案资源管理器”,可从顶部菜单点击“视图” -> “解决方案资源管理器”打开。
  2. 点击主窗口底部的“设计”标签,切换到设计视图。
  3. 在设计界面空白处右键单击,选择“属性”,进入属性菜单。
  4. 将“标题”属性更改为“创建网站”。
  5. 在设计界面的 div 标签内输入“创建网站”,并按两次回车键。
  6. 从左侧的工具箱中拖动一个“标签”控件到刚输入文字下方的空白处。
  7. 将光标置于“标签”后,按两次回车键。
  8. 从顶部菜单点击“表格” -> “插入表格”,在弹出的对话框中输入行数为 6,列数为 2,然后点击“确定”。
  9. 在表格顶部左侧的五个单元格中分别输入“网站名称”、“网站 IP”、“网站端口”、“网站主机头”和“网站路径”。
  10. 从工具箱中拖动“文本框”控件到表格顶部右侧的五个单元格中。
  11. 从工具箱中拖动“按钮”控件到表格底部左侧的单元格中。
  12. 正确命名控件:
    • 右键单击“标签”控件,选择“属性”,删除“文本”属性中的所有内容,将“ID”更改为 StatusLabel ,将“前景色”属性设置为“红色”。
    • 对每个“文本框”进行重命名,分别命名为 NameTextBox IPTextBox PortTextBox HostHeaderTextbox PathTextBox
    • 将“网站端口”文本框的“文本”值设置为 80。
    • 将“按钮”的“文本”属性更改为“创建网站”,“ID”更改为 CreateSiteButton
  13. 在“网站 IP”旁边的文本框右侧输入“留空表示(所有未分配)”,在“网站主机头”旁边的文本框右侧输入“留空表示所有主机头”。
  14. 可调整列宽以提升美观度。
  15. 双击“创建网站”按钮,进入 Default.asp.vb 的代码部分,准备编写代码。
编写代码

将以下代码复制粘贴到代码窗口,或手动输入以更好地理解代码:

Imports Microsoft.Web.Administration
Partial Class _Default
    Inherits System.Web.UI.Page
    Protected Sub CreateSiteButton_Click(ByVal sender As Object, _
        ByVal e As System.EventArgs) _
        Handles CreateSiteButton.Click
        '声明并实例化 ServerManager
        Dim SM As New ServerManager
        Dim bindingInfo As String
        Dim mySite As Site
        '创建 bindingInfo 变量,格式为 "IP:Port:HostHeader"
        bindingInfo = IPTextBox.Text & ":" & _
            PortTextBox.Text & ":" & _
            HostHeaderTextBox.Text
        '为该网站创建应用程序池
        SM.ApplicationPools.Add(NameTextBox.Text)
        '创建网站
        mySite = SM.Sites.Add(NameTextBox.Text, _
            "HTTP", _
            bindingInfo, _
            PathTextBox.Text)
        '将网站添加到应用程序池
        mySite.Applications(0).ApplicationPoolName _
            = NameTextBox.Text
        '调用 CommitChanges 方法使更改生效
        SM.CommitChanges()
        StatusLabel.Text = "网站 " & NameTextBox.Text & " 已创建。"
    End Sub
End Class

下面对代码进行详细解释:
- Imports 命令用于导入 Microsoft.Web.Administration 命名空间,避免每次引用该命名空间中的类时都需要完整输入命名空间。
- Protected Sub CreateSiteButton_Click 是一个事件子程序,当点击“创建网站”按钮时调用。
- 声明了三个变量: ServerManager 对象 SM 、字符串变量 bindingInfo Site 对象 mySite
- bindingInfo 变量按照 IIS 需要的格式 IP:Port:HostHeader 进行填充。
- 使用 SM.ApplicationPools.Add 方法创建应用程序池,使用 SM.Sites.Add 方法创建网站。
- 将网站的第一个应用程序添加到应用程序池,并调用 SM.CommitChanges 方法使更改生效。
- 最后更新 StatusLabel 显示网站已创建的消息。

运行创建网站的网站
  1. 选择“调试” -> “开始执行(不调试)”,也可选择带调试模式,然后确认是否在 web.config 中启用调试。这将启动 ASP.NET 开发服务器并在浏览器中运行新应用程序。
  2. 输入新网站所需的值,确保输入有效值。网站名称可包含空格,但大多数字符不支持;网站 IP 应为 Web 服务器上的 IP 地址,留空也支持;默认端口 80 通常适用,可根据需要更改;网站主机头可设置或留空;网站路径应为磁盘上有效的网站路径。
  3. 输入所有信息后,点击“创建网站”按钮,网站将在 IIS 中创建。
Microsoft.Web.Administration (MWA)

IIS 7.0 新增了 Microsoft.Web.Administration API,它提供了一组用于 IIS 管理编程的强类型 .NET 类,是应用程序主机管理 API(AHAdmin)本机代码接口库的包装器。这些类使 IIS 的编程管理变得极其简单,配合 Visual Studio 或 Visual Web Developer 等工具,可轻松创建从简单脚本到完整企业程序的各种应用。

类结构

该命名空间的根级类是 ServerManager ,它是其他类的基础。主要对象包括 Site Application VirtualDirectory ApplicationPool WorkerProcess ,以及用于设置这些对象默认值的匹配类。

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;

    A(ServerManager):::process --> B(Site):::process
    A --> C(Application):::process
    A --> D(VirtualDirectory):::process
    A --> E(ApplicationPool):::process
    A --> F(WorkerProcess):::process
    B --> C
    C --> D
配置类示例
  • 创建网站
Dim SM As New ServerManager
SM.Sites.Add("Site1", "http", ":80:", "c:\websites\Site1")
SM.CommitChanges()
  • 创建应用程序池
Dim SM As New ServerManager
SM.ApplicationPools.Add("Site1AppPool")
SM.CommitChanges()
  • 更改应用程序池设置
Dim apppool As ApplicationPool
apppool = SM.ApplicationPools("Site1AppPool")
apppool.ManagedRuntimeVersion = "v1.1"
SM.CommitChanges()
  • 创建新应用程序
Dim SM As New ServerManager
Dim site As Site
site = SM.Sites("Site1")
site.Applications.Add("/app1", "C:\websites\Site1\App1")
SM.CommitChanges()
动态运行时类示例
  • 查看所有运行进程
Dim SM As New ServerManager
For Each wp As WorkerProcess In SM.WorkerProcesses
    Console.Writeline(wp.AppPoolName & " " & wp.ProcessId)
Next
  • 查看所有运行页面请求
Dim SM As New ServerManager
For Each wp As WorkerProcess In SM.WorkerProcesses
    Console.Writeline("应用程序池名称: " & wp.AppPoolName)
    Console.Writeline("工作进程 PID: " & wp.ProcessId)
    For Each request As Request In wp.GetRequests(0)
        Console.Writeline("  请求: " & request.Url)
    Next
Next
  • 回收应用程序池
Dim SM As New ServerManager
SM.ApplicationPools("Site1").Recycle()
访问远程服务器
Dim SM As ServerManager = ServerManager.OpenRemote("10.0.0.10")
直接编辑属性和元素

可使用 ServerManager 类查看、创建、更新或删除配置文件中的任何属性或元素,支持编辑多种 IIS 配置文件。
- 获取应用程序主机配置文件:

Dim SM As New ServerManager
Dim config As Configuration = SM.GetApplicationHostConfiguration
  • 获取特定网站的 web.config 文件:
Dim config As Configuration = SM.GetWebConfiguration("Site1")
  • 获取应用程序的 web.config 文件:
Dim config As Configuration = SM.GetWebConfiguration("Site1", "/App1")
  • 读取属性值示例:
Dim SM As New ServerManager 
Dim config As Configuration = SM.GetWebConfiguration("Site1")
Dim section As ConfigurationSection = _
    config.GetSection("system.webServer/defaultDocument")
Dim enabled As ConfigurationAttribute = section.Attributes("enabled")
Console.Writeline(enabled.Value)
  • 获取默认文档示例:
Dim SM As New ServerManager
Dim config As Configuration = SM.GetWebConfiguration("Site1")
Dim section As ConfigurationSection = _
    config.GetSection("system.webServer/defaultDocument")
Dim filescollection As ConfigurationElementCollection
filescollection = section.GetCollection("files")
For Each item As ConfigurationElement In filescollection
    Console.Writeline(item.Attributes("value").Value)
Next
处理位置标签

在配置文件中选择部分时可指定位置标签, GetSection 方法有一个重载可用于指定 locationPath

Dim SM As ServerManager = ServerManager.OpenRemote("10.0.0.10")
Dim config As Configuration = SM.GetApplicationHostConfiguration
Dim section As ConfigurationSection = _
    config.GetSection("system.webServer/defaultDocument", "Site1")

若同一路径有多个位置标签且 overrideMode 值不同,配置元素每个唯一路径只能出现一次,更新部分时只需指定配置文件和站点或应用程序。若需指定特定 overrideMode 设置的位置标签,可使用 ConfigurationSection overrideMode 属性。

Dim section As ConfigurationSection = _
    config.GetSection("system.webServer/defaultDocument", "Site1")
section.OverrideMode = OverrideMode.Deny
Microsoft.Web.Management (MWM)

IIS 提供的第二个托管代码 API 是 Microsoft.Web.Management ,它为 IIS 管理器创建用户界面(UI)功能以及创建和管理 IIS 用户与权限提供了框架。许多 IIS 管理器的内置功能和图标在后台使用该命名空间,因此可使用它创建与内置 IIS 功能外观和感觉相同的功能。

该 API 有服务器端和客户端,包括列表、属性、网格、组面板和向导等丰富功能,以及对 IIS 管理器中操作和其他面板的访问。IIS 用户管理允许创建用户、更新用户和密码,并将 IIS 管理器用户或 Windows 用户分配到站点和应用程序进行远程委派。

使用 Microsoft.Web.Management 需在项目或 web.config 文件中引用 %windir%\System32\inetsrv\Microsoft.Web.Management.dll ,该命名空间包含四个子命名空间: Client Features Host Server

以下示例展示了如何创建一个 IIS 管理器用户并授予其对特定站点 Site1 的权限,同时授予一个 Windows 用户相同的权限:

Imports Microsoft.Web.Management.Server
Dim user As ManagementUserInfo
'创建 IIS 管理器用户
user = ManagementAuthentication.CreateUser("IISUser1", "password")
'授予新创建的用户对站点的权限
ManagementAuthorization.Grant(user.Name, "Site1", False)
'授予 Windows 用户对站点的权限
ManagementAuthorization.Grant("DomainA.local/User2", "Site1", False)
ABO、ADSI 和旧版 API 支持

IIS 7.0 支持现有的 API,对于拥有 IIS 6.0(或更旧版本)Web 服务器脚本的用户来说是个好消息。尽管 IIS 7.0 的底层结构有很大不同,但 IIS 团队创建了一个模拟层,使用名为 ABOMapper 的新组件将管理基对象(ABO)(又名 IMSAdminBase)和代码调用映射到新的配置系统,这意味着现有代码无需重写即可继续正常工作。

ABOMapper 作为旧代码和新 IIS 配置系统之间的中间层,通过解释代码、发现新旧差异并直接对配置文件进行相应的读写操作来工作,但它不像以前版本那样对内存中的配置进行操作。

Active Directory 服务接口(ADSI)和 IIS 6.0 WMI 依赖于 ABO,在 IIS 7.0 中得到了完全支持,.NET System.DirectoryServices 命名空间也同样适用。需要注意的是,IIS 6.0 WMI 支持和 IIS 7.0 WMI 支持是不同的,使用时要明确所指的 WMI 版本。

为支持 ABO,需要安装元数据库兼容性组件,这些组件默认未安装,可在服务器管理器的“添加角色服务”部分进行安装,相关选项包括:
- IIS 6.0 元数据库兼容性
- IIS 6.0 WMI 兼容性
- IIS 6.0 脚本工具

其中,IIS 6.0 元数据库兼容性是其他两个选项的前提,IIS 6.0 WMI 兼容性是 IIS 6.0 脚本工具的前提。

使用 IIS 6.0 脚本选项时,需注意它们不支持 IIS 7.0 的新功能,仅支持 IIS 6.0 已有的功能,也不支持新的分布式配置,无法指定使用的位置标签或配置文件,这些决策由 ABOMapper 处理。此外,IIS 6.0 中的 ServerComment 字段不是必需的,也无需唯一,但在 IIS 7.0 中,站点名称是必需的,ABOMapper 会通过添加数字来确保名称的唯一性,这可能导致脚本中输入的站点名称与最终结果不同。同时,ABO 进行备份、恢复、导入和导出的调用将被忽略,因为 IIS 7.0 的新配置文件工作方式有很大不同。因此,建议在可能的情况下迁移到新的 API 选项。

部分功能(如产品附带的 FTP 版本、NNTP 和 SMTP)仍会使用对 metabase.xml 的常规调用,其他功能则通过 ABOMapper 处理。使用 IIS 6.0 脚本 API 进行开发或故障排除时,错误日志不会记录到事件日志中,而是保存到 %windir%\System32\Abomapper.log ,需关注该日志文件以查找可能遇到的问题线索。

IIS 7.0 WMI 提供程序

Windows 管理规范(WMI)用于管理 Windows 操作系统的各个方面,在以前的 IIS 版本中就可以使用 WMI 管理 IIS,IIS 7.0 对 WMI 提供程序的语法进行了改进,提高了整个提供程序的一致性,使使用 WMI 进行脚本编写更加容易和强大。现在有两种 WMI 版本需要注意:IIS 7.0 WMI 提供程序和 IIS 6.0 WMI 提供程序。IIS 6.0 WMI API 为了向后兼容而保留,但有其局限性,除非有特殊原因,否则不建议用于新开发。后续内容中提到的 WMI 若无特别说明,均指 IIS 7.0 WMI 提供程序。

WMI 最常见的用途之一是在 Windows 脚本宿主(WSH)中使用,它允许创建可直接在计算机上运行的脚本,类似于可执行程序,但可以直接在记事本中编辑。

CIM Studio 是 WMI 开发的最佳工具之一,它是 Microsoft 提供的免费下载工具,可用于全面浏览任何 WMI 命名空间的类、属性、方法和关联器,了解代码中可用的功能。同时,它还能查看实际数据的活动实例并直接编写 WQL 命令。WQL(WMI 查询语言)的语法与 SQL(数据库中使用的结构化查询语言)类似,可使用 Select * from {something} 这样的语法。

在开始使用 WMI 之前,需确保安装了支持 WMI 的必需组件,可通过服务器管理器添加角色来安装,IIS 7.0 WMI 提供程序功能位于“管理工具” -> “IIS 管理脚本和工具”下。

CIM Studio 使用步骤
  1. 点击“开始”,在搜索框中输入 cmd
  2. 右键单击搜索结果顶部的 cmd.exe ,选择“以管理员身份运行”。
  3. 在命令提示符窗口中输入 "%ProgramFiles%\wmi tools\studio.htm" (包括引号)。
  4. 若使用 Internet Explorer 作为默认浏览器,需确认浏览器主窗口顶部的警告,允许 Active X 控件运行。
  5. 在默认打开的“连接到命名空间”窗口中输入 root\WebAdministration
  6. 点击“确定”,然后在 WMI CIM Studio 登录提示中再次点击“确定”,可能需要按一次空格键激活 Active X 控件。

CIM Studio 左侧显示构成 WebAdministration 命名空间的各种类,首先可查看 Object -> Configured Object ,其中包含 Application Site Virtual Directory 对象。点击 Site 类,右侧将显示其属性列表,这些属性包括继承属性和特定于 Site 类的属性,如 Bindings Id name 等,可在代码中使用,使 WMI Studio 成为编程的强大参考工具。

“方法”选项卡显示可针对特定类执行的所有方法,对于 Site 类,有 Create Start Stop 等方法。CIM Studio 还允许直接运行 WQL 查询,通过右侧第二个看起来像带有放大镜的数据库图标操作,点击后会出现查询窗口,可保存和执行查询,例如输入 select * from site 并点击“执行”按钮,也可尝试更具体的查询,如 select name, id from site

CIM Studio 的另一个有价值的功能是查看实际实例数据,通过右侧第四个看起来像倾斜书籍的图标操作,点击“实例”按钮后,将显示当前对象的所有可用实例,例如对于 Site 类,将直接显示 IIS 7.0 中的所有实际站点实例。

WMI 脚本示例

以下是一个使用 WSH 创建应用程序池和网站,并将网站添加到应用程序池的示例脚本:

Option Explicit 
Dim oIIS, oBinding, oApp
Dim siteName, physicalPath, bindings
siteName = "Site1"
physicalPath = "c:\inetpub\wwwroot"
bindings = ":80:Site1.DomainA.local"

' 设置 oIIS 为 WebAdministration 类
Set oIIS = GetObject("winmgmts:root\WebAdministration")

' 创建应用程序池
oIIS.Get("ApplicationPool").Create(siteName)

' 创建网站绑定
Set oBinding = oIIS.Get("BindingElement").SpawnInstance_
oBinding.BindingInformation = bindings
oBinding.Protocol = "http"

' 创建网站
oIIS.Get("Site").Create siteName, array(oBinding), physicalPath

' 获取创建的应用程序
Set oApp = oIIS.Get("Application.SiteName='" & siteName & "',Path='/'")

' 将新应用程序池分配给应用程序
oApp.ApplicationPool = siteName

' 提交更改
oApp.Put_

' 输出消息
WScript.Echo "网站 " & siteName & " 已创建。"

将上述代码保存为扩展名为 .vbs 的文本文件。WSH 有两种运行模式: WScript CScript 。若计算机设置为 WScript 模式,脚本运行结果将在 Windows 消息框中显示;若使用 CScript 模式,结果将在命令提示符中显示。可通过以下方式控制使用的脚本宿主:
- 更改默认脚本宿主:
- 对于 CScript ,在命令提示符中输入 cscript //H:CScript
- 对于 WScript ,在命令提示符中输入 cscript //H:WScript
- 不更改默认脚本宿主直接运行:
- 使用 CScript 运行: cscript CreateSite.vbs
- 使用 WScript 运行: wscript CreateSite.vbs

在使用 WScript 时,若脚本输出大量信息,可能需要频繁点击消息框的“确定”按钮,而 CScript 会在命令提示符中输出数据,无需等待确认,因此在输出大量信息时, CScript 更合适。

此外,WMI 还支持连接到远程服务器,将上述代码中的 Set oIIS = GetObject("winmgmts:root\WebAdministration") 替换为 set oIIS = GetObject("winmgmts://ServerName/root/WebAdministration") ,并将 ServerName 替换为服务器名称或 IP 地址即可。

AHAdmin

应用程序主机管理 API(AHAdmin)接口是新的基础本机代码 COM 友好接口,可直接用于本机代码应用程序和模块开发,也可通过 IIS 7.0 WMI 提供程序或托管代码包装器间接使用。AHAdmin 取代了 ABO 的角色,但 ABO 仍然得到支持。

使用 AHAdmin 开发时,可先获取 IAppHostAdminManager 实例以进行只读访问,若需要读写访问,则使用 IappHostWritableAdminManager ,它继承自 IAppHostAdminManager 并具有额外的方法,如 CommitChange 用于将更改提交到磁盘, CommitPath 用于指定配置设置的写入位置。

以下是在 VbScript 中使用 WSH 的示例:

Set ahRead = CreateObject("Microsoft.ApplicationHost.AdminManager")
Set ahWrite = _ 
    CreateObject("Microsoft.ApplicationHost.WritableAdminManager")

ahRead 对象可读取配置, ahWrite 对象可读写配置。

以下是使用 AHAdmin 在 WSH 文件中使用 VbScript 禁用匿名用户的示例:

configFile = "MACHINE/WEBROOT/APPHOST/"
siteName = "Default Web Site"
configPath = configFile & siteName
configSectionName = _
    "system.webServer/security/authentication/anonymousAuthentication" 
' 创建 ahManager 对象
Set ahManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
' 获取匿名身份验证部分
set anonymousAuth = _
    ahManager.GetAdminSection(configSectionName, configPath) 
' 将 enabled 属性设置为 false
anonymousAuth.Properties.Item("enabled").Value = False
' 提交更改
ahManager.CommitChanges()

WSH 也可使用 Jscript,只需将文件命名为 .js 扩展名,并使用 Jscript 进行开发。以下是使用 Jscript 启用共享配置并设置路径、用户名和密码的示例:

try{
    var configPath = "c:\\SharedConfig";
    var username = "User1";
    var password = "User1";
    var config =
        WScript.CreateObject(
            "Microsoft.ApplicationHost.WritableAdminManager" );
    config.CommitPath = "MACHINE/REDIRECTION";
    var section = config.GetAdminSection(
        "configurationRedirection",
        config.CommitPath);
    section.Properties.Item( "enabled" ).Value = true;
    section.Properties.Item( "path" ).Value = configPath;
    section.Properties.Item( "userName" ).Value = username;
    section.Properties.Item( "password" ).Value = password;
    // 提交更改
    config.CommitChanges();
}
// 捕获并输出任何错误
catch(e)
{
    WScript.Echo(e.number);
    WScript.Echo(e.description);
}

此示例使用 MACHINE/REDIRECTION 作为提交路径,意味着更改将应用到 %windir%\System32\inetsrv\config\redirection.config 文件。

IIS 管理器、IIS 7.0 WMI、 Microsoft.Web.Administration Microsoft.Web.Management 都在底层使用 AHAdmin,因此 AHAdmin 几乎可以实现任何需求,Microsoft 推荐将其用于本机代码应用程序和模块开发。若不使用 .NET 和托管代码 API 或 WMI,AHAdmin 是开发的首选 API。

综上所述,IIS 7.0 提供了多种编程配置和管理的方法,每种方法都有其特点和适用场景。通过合理选择和运用这些方法,我们可以更高效地管理 IIS 服务器,满足不同的业务需求。无论是初学者还是有经验的开发者,都能在这些工具和技术中找到适合自己的方式来提升工作效率和开发能力。

IIS 7.0 编程配置与管理全解析

各 API 对比总结

为了更清晰地了解不同 API 的特点和适用场景,我们将它们的关键信息整理成如下表格:
| API 名称 | 特点 | 适用场景 | 代码示例 |
| — | — | — | — |
| Microsoft.Web.Administration (MWA) | 提供强类型 .NET 类,是 AHAdmin 的包装器,配合开发工具可轻松创建多种应用 | .NET 开发者进行 IIS 管理编程,创建网站、应用程序池等操作 | vb<br>Dim SM As New ServerManager<br>SM.Sites.Add("Site1", "http", ":80:", "c:\websites\Site1")<br>SM.CommitChanges()<br> |
| Microsoft.Web.Management (MWM) | 为 IIS 管理器创建 UI 功能,管理 IIS 用户与权限,与内置功能外观相似 | 创建与 IIS 管理器内置功能类似的用户界面和进行用户权限管理 | vb<br>Imports Microsoft.Web.Management.Server<br>Dim user As ManagementUserInfo<br>user = ManagementAuthentication.CreateUser("IISUser1", "password")<br>ManagementAuthorization.Grant(user.Name, "Site1", False)<br> |
| ABO、ADSI 和旧版 API | 通过 ABOMapper 支持旧代码,部分功能仍使用对 metabase.xml 的常规调用 | 有 IIS 6.0 及更旧版本脚本,暂时无法迁移到新 API 的情况 | 无特定新代码示例,旧代码可继续使用 |
| IIS 7.0 WMI 提供程序 | 语法改进,一致性增强,可结合 WSH 创建脚本,CIM Studio 辅助开发 | 使用 WSH 脚本进行 IIS 管理,查看运行时数据等 | vb<br>Dim SM As New ServerManager<br>For Each wp As WorkerProcess In SM.WorkerProcesses<br> Console.Writeline(wp.AppPoolName & " " & wp.ProcessId)<br>Next<br> |
| AHAdmin | 新的基础本机代码 COM 友好接口,可直接或间接使用 | 本机代码应用程序和模块开发 | vb<br>Set ahRead = CreateObject("Microsoft.ApplicationHost.AdminManager")<br>Set ahWrite = _ <br> CreateObject("Microsoft.ApplicationHost.WritableAdminManager")<br> |

实际应用中的注意事项

在实际使用这些 API 进行 IIS 编程配置和管理时,还需要注意以下几点:
1. 权限问题
- 无论是使用 MWA、WMI 还是 AHAdmin,很多操作都需要管理员权限。在 Windows Server 2008 和 Vista 系统中,要确保当前用户有足够的权限,可通过前面提到的方法解决 UAC 权限问题。
- 例如,在使用 WMI 查看运行进程时,如果没有足够权限,可能无法获取到相关信息。
2. 错误处理
- 代码示例中很多为了简洁没有添加错误处理,但在实际生产环境中,错误处理至关重要。
- 比如在使用 MWA 创建网站时,如果网站名称已存在,可能会抛出异常,需要进行相应的错误处理,避免程序崩溃。可以使用 Try...Catch 语句来捕获和处理异常,示例代码如下:

Try
    Dim SM As New ServerManager
    SM.Sites.Add("Site1", "http", ":80:", "c:\websites\Site1")
    SM.CommitChanges()
Catch ex As Exception
    Console.WriteLine("创建网站时出现错误: " & ex.Message)
End Try
  1. 性能考虑
    • 频繁的配置更改可能会影响 IIS 服务器的性能,尤其是在高并发环境下。在进行批量操作时,要合理安排操作顺序和频率。
    • 例如,使用 MWA 批量创建多个网站和应用程序池时,可以考虑分批提交更改,避免一次性提交过多更改导致服务器负载过高。
  2. 兼容性问题
    • 虽然 IIS 7.0 支持旧版 API,但旧版 API 不支持一些新功能。在迁移或开发新功能时,要考虑兼容性问题。
    • 比如,使用 ABO 进行脚本开发时,无法使用 IIS 7.0 的分布式配置功能。
未来趋势与展望

随着技术的不断发展,IIS 也在不断演进。未来,我们可以期待以下几个方面的发展:
1. 更强大的 API 功能 :Microsoft 可能会进一步完善现有的 API,提供更多的功能和更便捷的操作方式。例如,可能会增加对新的安全特性的支持,或者简化复杂配置的操作流程。
2. 与云服务的集成 :随着云计算的普及,IIS 可能会更好地与云服务集成,实现更灵活的部署和管理。例如,与 Azure 云服务的深度集成,实现自动化的资源分配和弹性扩展。
3. 智能化管理 :借助人工智能和机器学习技术,实现 IIS 服务器的智能化管理。例如,自动检测和优化配置,预测潜在的性能问题并提前进行处理。

总结

IIS 7.0 提供了丰富的编程配置和管理方法,涵盖了从基础的配置操作到复杂的用户界面开发和运行时数据管理。通过合理选择和运用不同的 API,我们可以根据具体需求实现高效、灵活的 IIS 服务器管理。

在实际应用中,要注意权限、错误处理、性能和兼容性等问题,确保系统的稳定运行。同时,关注技术的发展趋势,为未来的升级和扩展做好准备。无论是初学者还是有经验的开发者,都可以通过不断学习和实践,充分发挥 IIS 7.0 的强大功能,提升工作效率和开发能力。

以下是一个简单的 mermaid 流程图,展示了使用 MWA 创建网站的基本流程:

graph TD
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;

    A(开始):::process --> B(创建 ServerManager 实例):::process
    B --> C(添加网站):::process
    C --> D(提交更改):::process
    D --> E(结束):::process

希望通过本文的介绍,能帮助大家更好地理解和掌握 IIS 7.0 的编程配置和管理方法,在实际工作中发挥更大的作用。

一种基于有效视角点方法的相机位姿估计MATLAB实现方案 该算法通过建立三维空间点二维图像点之间的几何对应关系,实现相机外部参数的精确求解。其核心原理在于将三维控制点表示为四个虚拟基点的加权组合,从而将非线性优化问题转化为线性方程组的求解过程。 具体实现步骤包含以下关键环节:首先对输入的三维世界坐标点进行归一化预处理,以提升数值计算的稳定性。随后构建包含四个虚拟基点的参考坐标系,并通过奇异值分解确定各三维点在该基坐标系下的齐次坐标表示。接下来建立二维图像点三维基坐标之间的投影方程,形成线性约束系统。通过求解该线性系统获得虚拟基点在相机坐标系下的初步坐标估计。 在获得基础解后,需执行高斯-牛顿迭代优化以进一步提高估计精度。该过程通过最小化重投影误差来优化相机旋转矩阵和平移向量。最终输出包含完整的相机外参矩阵,其中旋转部分采用正交化处理确保满足旋转矩阵的约束条件。 该实现方案特别注重数值稳定性处理,包括适当的坐标缩放、矩阵条件数检测以及迭代收敛判断机制。算法能够有效处理噪声干扰下的位姿估计问题,为计算机视觉中的三维重建、目标跟踪等应用提供可靠的技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值