簡體   English   中英

使用Microsoft.Web.Administration時,為什么我無法獲取FTP站點的Site.State?

[英]Why am I unable to get Site.State for an FTP site, when using Microsoft.Web.Administration?

使用以下C#代碼:

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站點(我可以啟動,停止,更改設置等)。

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

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

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

您可以通過檢查Site.Bindings並查找Protocol屬性來驗證站點是否為HTTP,如果它沒有HTTP或HTTPS,您將獲得上面可以安全忽略的異常。

有關更多信息: IIS.net FTP設置/示例代碼

我認為答案是,這只是我們必須使用的Microsoft IIS API中的一個錯誤。 我已經打開了關於MS連接的錯誤報告,該報告有2個upvotes,但MS對此沒有興趣(我懷疑他們會很快)。

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

停止和啟動站點的解決方法(也會導致類似的錯誤)是在FTP站點上將auto-start設置為false並重新啟動IIS(它不是很好,但它工作得很好)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM