![](/img/trans.png)
[英]Add an ISAPI Filter to an existing Site with Microsoft.Web.Administration
[英]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.