2009-09-21 66 views
0

我试图以编程方式连接到IIS。我发现网上有大量的例子,但我似乎无法得到任何工作,并尝试了不少变化如何以编程方式连接到IIS 7

每次我尝试下面的代码返回的对象有每个属性的此错误:......“扔类型的异常‘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开发机器上的这段代码。任何人都知道我在做什么错了?

回答

0

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

+0

从上面的代码可以看出,我在2次连接尝试中使用了Windows管理员帐户。我的个人帐户也具有管理权限。这是你所指的还是你建议的东西? – Mario 2009-09-21 23:28:04

0

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

+0

已安装。 – Mario 2009-09-23 22:32:29

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上的更多。

相关问题