[英]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。
编辑:我重新创建了“主”文件夹的设置方式。
所以,也许它是一个 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.