繁体   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