Почему я не могу получить Site.State для FTP-сайта при использовании Microsoft.Web.Administration? - PullRequest
6 голосов
/ 09 июня 2010

Используя следующий код 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-ошибка?Я могу прекрасно управлять FTP-сайтом с помощью диспетчера IIS (могу запускать, останавливать, изменять настройки и т. Д.).

Ответы [ 2 ]

5 голосов
/ 30 июля 2010

Первое, что нужно уточнить, это то, что Site.State - это свойство для получения состояния протокола HTTP, и по этой причине я предполагаю, что сайт, который вызывает это исключение, вероятно, НЕ является сайтом HTTP.

Если вы хотите получить состояние FTP, вам нужно:

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

Вы можете проверить, является ли сайт HTTP или нет, проверив Site.Bindings и найдя свойство Protocol, если у него нет HTTP или HTTPS, вы получите исключение, выше которого вы могли бы спокойно проигнорировать.

Для получения дополнительной информации: Настройки FTP IIS.net / Пример кода

1 голос
/ 30 июля 2010

Я думаю, что ответ заключается в том, что это просто ошибка в Microsoft IIS API, с которой нам приходится мириться.Я открыл отчет об ошибке в MS connect, в котором было 2 отзыва, однако MS не проявил к этому интереса (и я сомневаюсь, что они появятся в ближайшее время).для получения фактического состояния (как вопрос задает).Некоторые предлагали мне проверить порт 21, но это говорит только о том, что работает FTP-сервер, а не , какой FTP-сервер работает (так как вы можете иметь несколько сайтов) -- поэтому в некоторых случаях этот подход совершенно бесполезен.

Обходной путь к остановке и запуску сайта (что также вызывает аналогичную ошибку) - установить автоматический запуск на false наFTP-сайт и перезапустите IIS (это не здорово, но работает просто отлично).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...