2010-06-09 44 views
6

使用下面的C#代碼:當使用Microsoft.Web.Administration時,爲什麼我無法爲FTP站點獲取Site.State?

using System; 
using Microsoft.Web.Administration; 

namespace getftpstate 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     ServerManager manager = new ServerManager(); 
     foreach (Site site in manager.Sites) 
     { 
     Console.WriteLine("name: " + site.Name); 
     Console.WriteLine("state: " + site.State); 
     Console.WriteLine("----"); 
     } 
    } 
    } 
} 

我得到以下輸出:

C:\projects\testiisftp\getftpstate\getftpstate\bin\Debug>getftpstate.exe 
name: Default Web Site 
state: Stopped 
---- 
name: Default FTP Site 

Unhandled Exception: System.Runtime.InteropServices.COMException (0x800710D8): T 
he object identifier does not represent a valid object. (Exception from HRESULT: 
0x800710D8) 
    at Microsoft.Web.Administration.Interop.IAppHostProperty.get_Value() 
    at Microsoft.Web.Administration.ConfigurationElement.GetPropertyValue(IAppHos 
tProperty property) 
    at Microsoft.Web.Administration.Site.get_State() 
    at getftpstate.Program.Main(String[] args) in C:\projects\testiisftp\getftpst 
ate\getftpstate\Program.cs:line 17 

任何想法,爲什麼我可能會看到上述0x800710D8 COM的錯誤?我可以使用IIS管理器來管理FTP站點(我可以啓動,停止,更改設置等)。

+0

我試圖使用WMI作爲一個變通,但你猜怎麼着,FTP站點在IIS元數據庫(當訪問通過WMI)的W3SVC節點下存儲,並且該網站的對於FTP站點,ServerState始終返回4,這意味着根據文檔「已停止」(即使它在IIS管理器中顯示爲已啓動)。 http://msdn.microsoft.com/en-us/library/ms524905(v=VS.90).aspx – 2010-06-09 12:21:14

+0

此外,我已經提出了MS連接(請upvote,如果這會影響你):https://連接.microsoft.com/WindowsServerFeedback /反饋/信息/ 566045 /收到COMException-時,訪問站點狀態換一個-FTP站點,使用微軟的Web的管理 – 2010-06-09 12:29:48

+0

只是試圖啓動,並通過雙方停止FTP站點MWA和WMI;都沒有工作,有類似的結果。但是,WMI並沒有默默地做任何事情,而不是拋出異常。 – 2010-06-09 13:01:17

回答

1

我認爲答案是,這僅僅是我們不得不忍受微軟IIS API中的錯誤。我已經打開了一個有2個upvotes的MS連接的錯誤報告,但是MS對此沒有任何興趣(我懷疑他們很快就會發布)。

我不相信這是用於獲取的實際狀態(因爲這個問題問)一種解決方法。有些人認爲我應該探索端口21,但這只是告訴我,如果有一個FTP服務器上運行,而不是 FTP服務器正在運行什麼(你可以有多個站點) - 因此,在某些情況下,這種方法是完全沒用的。

解決方法:停止並啓動該站點(也會導致類似的錯誤)是在FTP站點上將自動啓動設置爲false並重新啓動IIS(它不是很好,但工作正常)。

5

首先要澄清的是Site.State是一種獲取HTTP協議狀態的屬性,因此我的猜測是拋出該異常的站點可能不是HTTP站點。

如果你想獲得你需要做的FTP狀態是:

int ftpState = Site.GetChildElement("ftpServer")["state"] 

您可以HTTP或不通過檢查Site.Bindings和尋找協議屬性,如果驗證網站是否沒有HTTP或HTTPS,你會得到上面你可以放心忽略的異常。

欲瞭解更多信息:IIS.net FTP Settings/Sample Code

+0

啊哈,有趣的想法。嗯,雖然我確定我嘗試以類似的方式訪問它 - 但我仍然會試試這個。我也有相應的答案(希望我可以刪除它,如果你是對的)。 – 2010-07-30 17:40:50

+0

試一試,我知道一些關於MWA(我寫的:)),所以讓我知道如果它不工作,或者如果你碰到其他問題。 – 2010-07-30 20:03:51

+1

謝謝CarolsAg! 'GetChildElement(「ftpServer」)確實允許你訪問FTP站點的方法。偉大的聯繫,也是。 – 2011-07-31 19:15:43

相關問題