簡體   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