IIS Titl

2005 年 5 月

IIS Insider

作者:Chris Adams(Microsoft Corporation 的支持性测试主管)

本页内容
远程回收应用程序池远程回收应用程序池
如何创建自定义的管理单元来远程连接到 IIS 6 服务器如何创建自定义的管理单元来远程连接到 IIS 6 服务器
使用 CDOSYS 通过 ASP 页发送电子邮件时出现错误使用 CDOSYS 通过 ASP 页发送电子邮件时出现错误

远程回收应用程序池

问:

我需要在 Windows Server 2003 和 IIS 6.0 环境中,远程回收应用程序池。但找不到一种不用在服务器上输入应用程序池或使用远程控制台会话的简单方法。能否通过远程方式来实现?如果可以的话,您们有没有介绍这方面功能的技术文档?

答:

这个问题问得很好,客户也经常向 Microsoft 提出这个问题。简短的回答为:是的,可以通过远程访问来实现。但是,如果您正在 Windows Server 2003 RTM 版本上运行 IIS 6.0 的话,要想了解具体的解答,就需要一点有关脚本方面的知识。

需要您在本地执行的脚本包含在Windows Server 2003 Service Pack 1中,不过也可以通过 Microsoft 下载中心来获取。

在本地使用的命令行语法为:

iisapp /p <PID> /r

例如,要是 w3wp 进程为 Process ID (PID) 1234,那么发出的命令为:

iisapp.vbs /p 1234 /r

图 1 列举了另一个例子。

Figure 1: Using iisapp to Recycle an Application Pool

图 1:使用 iisapp 回收应用程序池
查看大图

您也可以通过使用 /a 替代 /p 开关,来使用应用程序池的友好名称,而不是 PID。

可以通过键入以下命令,使用 iisapp.vbs 的命令行帮助,查看所有开关及选项:

iisapp.vbs /?

然而,iisapp.vbs 命令行工具不支持计算机的远程连接。

假如您熟悉脚本开发,那么就可以使用 Windows Management Instrumentation (WMI) 脚本或 Active Directory Services Instrumentation (ADSI),解决这个问题。上述技术在 MSDN 中有详细的文档介绍,并且您可以使用 IIS 提供程序,连接并回收应用程序池。

譬如,这里有一个简单的脚本,不包含任何错误检查或对话框。同时,也不接受任何开关。但是,若在其中提供了以下信息后,该脚本就能让您通过远程方式,回收应用程序池:

1.

目标服务器名称 (strServer)

2.

目标服务器用户名 (strUsername)

3.

目标服务器用户密码 (strPassword)

4.

应用程序池名称

我希望这个示例脚本能让您迈出第一步,实现对运行在远程 IIS 6.0 服务器上的工作进程进行回收:

strServer = "MyServer" //Replace this with the target server name

strUser = "Administrator" //Provide Administrator privilege credentials

strPassword = "password" //Input Administrator privileged account password


Set LocatorObj = CreateObject("WBemScripting.SWbemLocator")

LocatorObj.Security_.ImpersonationLevel = 3        Impersonate

LocatorObj.Security_.AuthenticationLevel = 6        Pkt Privacy (required for remote administration over WMI as of Win2k3 SP1)

Set ProviderObj = LocatorObj.ConnectServer(strServer, "root/MicrosoftIISv2", strUser, strPassword)

Set MyAppPool = ProviderObj.Get( "IIsApplicationPool=w3svc/apppools/DefaultAppPool" MyAppPool.Recycle

IIS SDK 提供了相关的详细信息,可帮助您编写可远程连接到 IIS 服务器的脚本。该 SDK 的地址为:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/html/d5a92c2b-c860-48ac-b406-e33ab4ac4e6e.asp.

顺便提一下,Windows Server 2003 Service Pack 1 (SP1) 附带的 iisapp.vbs 文件很容易就可以复制到 Windows Server 2003 RTM 版本中。RTM 与 Service Pack 1 在核心服务器功能上并无二异,不会导致该脚本失效。不过,此脚本无法用于低于 IIS 6.0 的版本。

若要了解 Service Pack 1 针对 IIS 6.0 所作的更改,请在 Microsoft 网站上参阅以下文档:

http://www.microsoft.com/technet/prodtechnol/windowsserver2003/technologies/featured/iis/default.mspx

返回页首返回页首

如何创建自定义的管理单元来远程连接到 IIS 6 服务器

问:

我想像连接到事件查看器那样,使用“运行”命令,通过 IIS 管理器实现远程连接。IIS 管理器管理单元 (iis6.msc) 好像无法通过开关来指定远程计算机。我使用了以下命令,来连接到远程计算机的事件查看器日志:

c:\windows\system32\eventvwr.msc /computer=<computername>

可以使用 IIS 6 管理单元来实现吗?

答:

我真希望事情就是这么简单,这样肯定会让 IIS 管理员和开发人员的管理任务变得更简单一些。IIS 6.0 附带的 IIS 管理器在命令提示符窗口中执行时,不会接受任何开关。iis6.msc 管理单元是完全独立的,不会接受管理员输入的内容(不同于事件查看器管理单元)。

不过,有一个解决办法。Microsoft 管理控制台 (MMC) 允许使用自定义的管理单元。Active Directory 管理单元可包含本地或远程服务器,并支持对资源的完全管理。

自定义的 MMC 使您可以执行一个简单的命令,就能连接到本地或远程服务器。该文件可分别以本地或远程方式,保存在工作站或服务器上。

若要创建自定义的管理单元,请完成以下步骤:

1.

单击“开始”,单击“运行”,并键入“mmc”,启动 MMC。

2.

在 MMC 控制台中,在“控制台”菜单上,选择“添加/删除管理单元”。

3.

在“添加/删除管理单元”对话框中,单击“添加”,并在“可用的独立管理单元”列表中,双击“Active Directory 用户和计算机”。若出现了一个向导,请按屏幕上的说明进行操作。

4.

重复第 3 步,分别添加以下这几个管理单元:“安全模板”、“分布式文件系统”和“证书”。

5.

单击“关闭”,再单击“确定”。

6.

在“控制台”菜单上,单击“保存”。

上述步骤在 Microsoft TechNet 网站上有详细的介绍:

http://www.microsoft.com/technet/prodtechnol/windows2000serv/evaluate/featfunc/mmcovvw.mspx

安装完这些管理单元后,您就可以自定义这个 *.msc 文件,以包含远程服务器。请注意,该管理单元的用户必须具有其上所列的所有服务器的管理权限。

若要使用 MMC 连接到远程服务器,请执行以下操作:

1.

定位通过上述步骤创建的管理单元,将其打开。例如,运行 MyIISServers.msc,并按 Enter 键。

2.

在 MMC 控制台中,右键单击“Internet Information Services (IIS) 管理器”,并选择“连接”(见“图 2”)。

Figure 2: Customized MMC Console

图 2:自定义的 MMC 控制台
查看大图

3.

在“连接到计算机”对话框中,输入所要连接的远程 IIS 6 服务器的名称。若要连接到使用不同凭据(比如服务器的管理员凭据)的服务器,则选中“用户”,并在所示的文本框中,输入相应的凭据(见“图 3”)。

Figure 3: Connect to Computer Dialog Box

图 3:“连接到计算机”对话框
查看大图

注意: 假如您要使用相同的域凭据(域管理员或同等权限),连接到所有 IIS 6 服务器,那么就没有必要使“用户”凭据了。

4.

重复第 3 步,添加所要连接的每一台 IIS 6 服务器。

5.

单击“确定”。

6.

在“控制台”菜单上,单击“保存”。

这个方法让您可以轻松键入与您前面所提到的相似的命令。只需要确认已包含了上述文件的完整路径。譬如,下列命令可以在“运行”命令处有效执行:

C:\CustomMMC\MyIISServers.msc

这个已保存的 *.msc 文件将存储所有已配置的(本地和远程)服务器,使您可以快速、轻松地访问您的 Web 环境中的数据。唯一的要求就是:必须使用一个具有管理员权限的帐户,来连接到所有计算机。虽然不能像事件查看器那样使用简单易行的开关机制,但却能让您使用一个命令,就实现对远程服务器的访问。

返回页首返回页首

使用 CDOSYS 通过 ASP 页发送电子邮件时出现错误

问:

我们有一个 ASP 应用程序,需要用来发送电子邮件。最近,我们正在本地开发这个应用程序,并使用 CDOSYS 通过 ASP 页,发送电子邮件。每次我们尝试使用这个邮件应用程序时,都会收到以下错误:

CDO.Message.1 (ox80040220)SendUsing configuration failed

您能给我们一些解决该问题的建议吗?

答:

通常,当提供给 API 的应用程序逻辑无效时,就会产生上述错误消息。CDOSYS API 非常强大,使开发人员在构建消息时,具有很强的针对性。

第一个排查步骤就是确认您的 SMTP 服务器运行正常。首先,我有一个通用页,具有硬编码的简单源代码,并且不接受来自用户提供的 Web 表单的输入。例如,您可以保存下列代码,将其命名为 testmail.asp,并放在 Web 内容根目录中:

<%@ Language=VBScript %> <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> </HEAD> <BODY> <% send by connecting to port 25 of the SMTP server Dim iMsg Dim iConf Dim Flds Dim strHTML Dim strSmartHost

Const cdoSendUsingPort = 2 StrSmartHost = "mail.example.com"

set iMsg = CreateObject("CDO.Message") set iConf = CreateObject("CDO.Configuration") Set Flds = iConf.Fields

set the CDOSYS configuration fields to use port 25 on the SMTP server

With Flds .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmartHost .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10 .Update End With

build HTML for message body strHTML = "<HTML>" strHTML = strHTML & "<HEAD>" strHTML = strHTML & "<BODY>" strHTML = strHTML & "<b> This is the test HTML message body</b></br>" strHTML = strHTML & "</BODY>" strHTML = strHTML & "</HTML>"

apply the settings to the message With iMsg Set .Configuration = iConf .To = "nrnoble@example.com" .From = "nrnoble@example.com" .Subject = "This is a test CDOSYS message (Sent via Port 25)" .HTMLBody = strHTML .Send End With

cleanup of variables Set iMsg = Nothing Set iConf = Nothing Set Flds = Nothing

%> </BODY> </HTML>

若要使用上述示例脚本代码,请用有效的“收件人”和“发件人”电子邮件地址替换下列几行中的相关内容。另外,还应将智能主机值替换为有效的邮件服务器。

.To = "nrnoble@example.com" .From = nrnoble@example.com StrSmartHost = "mail.example.com"

如果这个脚本能成功运行,那么可以认定您的页中的代码本身存在问题。假如上述脚本失败,请在下列地址上,参阅“IIS 有问必答”专栏文章:http://www.microsoft.com/technet/community/columns/insider/iisi0102.mspx#EDAA,进一步协助您对 SMTP 服务器进行疑难解答。

虽然,这个问题可能与 Microsoft Exchange CDOSYS 组件中存在的一个错误有关。详情请见 Microsoft 知识库 (KB) 文章:http://support.microsoft.com/default.aspx?scid=kb;en-us;322338

您可以在以下地址上,找到优秀的循序渐进帮助信息,协作您调试 SMTP 服务和/或应用程序上的问题:http://www.microsoft.com/technet/archive/itsolutions/ecommerce/deploy/d5smtp.mspx。 虽然该指导信息最初用于支持 Windows 2000,但也适用于 Windows Server 2003。

除了上述问题外,不可能存在其它问题。这个问题要么与配置中(代码中)的无效设置有关,要么就是 CDOSYS 组件中存在的一个错误。有意思的地方就是追踪这个问题的根源,确定症结所在。通过采取上述“分治”法,您就可以清除变数,从而让您的代码正常运行,或者修正错误。祝您好运!


更多信息

如有问题,请提交给IIS com/。 虽然无法保证回答每个问题,但是挑选出的问题会连同答案一起刊登在下一期的 IIS Ital 专栏中。

若要获得 IIS Ital 专栏前几个月份的问答列表,请单击此处

返回页首返回页首