繁体   English   中英

尝试使用 C# 在 IIS 中创建虚拟目录时引发异常 0x8000500F

[英]Exception 0x8000500F raised when trying to create a Virtual Directory in IIS using C#

我正在尝试使用 C# 以编程方式在 IIS 中创建虚拟目录

这是代码示例

DirectoryEntry iisVDir = new DirectoryEntry("IIS://localhost/W3SVC/1/Root/main");
DirectoryEntry configVDir = iisVDir.Children.Add("config", "IIsWebVirtualDir");
configVDir.CommitChanges();

但是,当运行代码时,我在第二行收到以下错误

Exception from HRESULT: 0x8000500F

但是,当我尝试重复代码但在Root文件夹下创建虚拟目录时,而不是Root/main它可以工作。 文件夹确实存在,我可以通过 Windows 中的 IIS 管理控制台手动在其下添加一个虚拟目录。

当我通过调试器运行代码时,我发现 iisVDir DirectoryEntry 的 SchemaClassName 为IISObject而不是我所期望的IISWebDirectory 我为另一个现有文件夹重复了上述代码,该文件夹是IISWebDirectory而不是IISObject并且它有效。

我知道您可以将IISWebDirectory更改为IIsWebVirtualDir ,但是您可以将IISObject更改为IISWebDirectory吗?

我在 Windows XP 上运行 IIS 5.1。

编辑:我重新创建了“主”文件夹的设置方式。

  1. 在 Windows Explorer 中,创建一个新文件夹,例如maintest ,在 C:\inetpub\wwwroot 下
  2. 在 IIS 管理控制台中,导航到这个新文件夹,右键单击它以调出上下文菜单,并在其下创建一个新的虚拟目录,例如名为config (我将其指向 C:\Temp 在我的例子中)
  3. 但是,当尝试在新的maintest文件夹下创建虚拟目录时,使用上面的代码示例, maintest文件夹似乎是一个IISObject

所以,也许它是一个 IISObject 是有效的,但是我如何以编程方式在它下面创建一个虚拟目录?

确保安装了 IIS 元数据库和 IIS 6 配置兼容性。

要验证:Go 开始->控制面板->程序和功能->打开或关闭Windows功能-> Internet信息服务-> Web管理工具->

在列表中,您将找到“IIS 元数据库和 IIS 6 配置兼容性”选项。

如果未安装,请安装此功能,然后尝试使用您的代码。

好运。

保持微笑... :)

我在ASP.NET中一直处于这种情况。 我对这些COM错误进行了长时间的调试,这是我前段时间看到的。

就我而言,当您在网站(应用程序)目录中创建此类更改时,它会立即重新启动自身。 正如我当时阅读的那样,添加此功能是为了使应用程序/网站能够处理最新内容。

您可以通过将目标目录移动到当前网站之外来测试和定位它,这样您就可以知道问题的根源 - 所以您需要在当前网站之外实现目标(我已经用两个网站解决了我的问题),而存储重新启动 controller 保持活动状态。

告诉我 COM 错误是否因将目录移到外部而过期,或者等待一段时间 IIS 重新启动(10-20 秒)。

我已经部分制定了创建虚拟目录的解决方案。

如编辑中所述,尝试将虚拟目录添加到作为 IISObject 存储在 IIS 元数据库中的文件夹时出现问题。

我认为发生的情况是,当您使用 IIS 管理控制台在普通的“windows”文件夹下添加虚拟目录时,windows 文件夹也需要添加到元数据库中,但它不会有任何自己的属性。 我相信这就是它被添加为IISObject的原因。 如果你要 go 进入 IIS 管理控制台,并为文件夹设置一些属性,那么它就变成了IISWebDirectory

我发现我可以在我的文件夹中添加一个虚拟目录的方式,虽然它仍然是一个IISObject ,但是将虚拟目录添加为根文件夹的子文件夹,但更改虚拟目录名称以在其名称中包含文件夹,像这样

DirectoryEntry iisVDir = new DirectoryEntry("IIS://localhost/W3SVC/1/Root");
DirectoryEntry configVDir = iisVDir.Children.Add("main/config", "IIsWebVirtualDir");
configVDir.CommitChanges();

当您在虚拟目录中指定路径时,它似乎确实在相关文件夹下添加了虚拟目录,而不是我需要的根文件夹。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM