【问题标题】:Exception 0x8000500F raised when trying to create a Virtual Directory in IIS using C#尝试使用 C# 在 IIS 中创建虚拟目录时引发异常 0x8000500F
【发布时间】:2011-07-13 08:51:44
【问题描述】:

我正在尝试使用 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 时,它可以工作。 ma​​in 文件夹确实存在,我可以通过 Windows 中的 IIS 管理控制台手动在其下添加一个虚拟目录。

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

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

我在 Windows XP 上运行 IIS 5.1。

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

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

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

【问题讨论】:

  • 您是否尝试在 Google 上搜索 HRESULT 代码?显然这与 DS 架构违规有关。
  • 是的,我做到了,但它并没有真正给出我正在寻找的答案,因为当父文件夹是 WebDirectory 时代码有效。只有当父级是这个 IISObject 时才会变得有趣。
  • 时髦。不过,这听起来确实像是违反模式——在你不应该添加的地方添加东西——但这是相当笼统的。可能是其中一个错误,其中有与有问题的人一样多的特定解决方案......
  • 当我在 IIS 中添加虚拟目录时它可以工作,因此它是创建虚拟目录的有效位置,这很奇怪。如果一切都失败了,我可以手动删除并重新添加“主”文件夹,以查看它是否使其成为正确的 IISWebDirectory,但我仍然渴望首先找到错误的原因。
  • 不知何故,'main' 变成了一个 IISObject,而不是一个 IISWebDirectory……它最初是如何添加的?

标签: c# iis


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    我发现我可以将一个虚拟目录添加到我的 ma​​in 文件夹中,而它仍然是一个 IISObject 的方法是将虚拟目录添加为根目录的子目录文件夹,但更改虚拟目录名称以在其名称中包含 ma​​in 文件夹,如下所示

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

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

    【讨论】:

      【解决方案3】:

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

      验证: 转到开始->控制面板->程序和功能->打开或关闭Windows功能-> Internet信息服务-> Web管理工具-> IIS6管理兼容性

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

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

      祝你好运。

      保持微笑...... :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-26
        • 1970-01-01
        • 1970-01-01
        • 2012-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        相关资源
        最近更新 更多