如何以编程方式连接到IIS 7

时间:2009-09-21 21:13:57

标签: c# .net iis iis-7 c#-3.0

我正在尝试以编程方式连接到IIS。我发现网上有很多例子,但我似乎无法工作并尝试了很多变化

每次尝试以下代码时,返回的对象都会为每个属性出错:...“抛出了'System.Runtime.InteropServices.COMException'类型的异常”

using System.DirectoryServices;

String serverName = "serverName";

DirectoryEntry IIS = new DirectoryEntry("IIS://" + serverName + "/W3SVC");
IIS = new DirectoryEntry("IIS://" + serverName + "/W3SVC", "administrator", "mypassword");
IIS = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/ROOT", "administrator", "mypassword");

我正在使用Windows目录用户帐户,我在IIS上运行了一堆网站。我正在尝试使用IIS 7连接到Windows 2008 Server的Windows xp开发机器上的此代码。任何人都知道我做错了什么?

3 个答案:

答案 0 :(得分:0)

您的帐户可能没有包装IIS调用的COM对象的启动权限。您可能需要尝试将自己添加到托管IIS的框上的管理员组,以使其正常工作。

答案 1 :(得分:0)

确保您在目标服务器上安装了IIS6管理兼容性功能 - 如果没有它,则无法通过IIS7上的ADSI进行远程管理。

答案 2 :(得分:0)

确保在客户端计算机上安装了IIS - 如果未安装,程序将抛出System.Runtime.InteropServices.COMException。

当您在远程计算机上查看IIS时,这也很重要,运行您的应用程序的计算机也需要IIS。

编辑:此外,我最近发现了一个专门用于连接和配置IIS7的程序集 - Microsoft.Web.Administration。可能值得一看,你是否可以访问它(或者可以访问它,它应该在任何情况下都在IIS7的机器上),看看它能做什么。我担心我自己没有使用它,所以我不能告诉你它是否会做你想要的,但这是另一种选择。

最后,可以选择System.Management和WMI脚本。

Dim scope As New Management.ManagementScope("\\" & server & "\root\MicrosoftIISv2")
scope.Connect()

Dim query As New Management.ObjectQuery("select * from IISWebVirtualDirSetting")
Dim searcher As New Management.ManagementObjectSearcher(scope, query)
For Each obj As Management.ManagementObject In searcher.Get()
    DoSomethingWith(obj)
Next

obj上的属性列表位于http://msdn.microsoft.com/en-us/library/ms525005.aspx,您还可以运行更多不同的查询 - 只需在MSDN上搜索更多内容。