.Net Core Microsoft.Web.Administration ServerManager из Linux

Версия ядра.net: 2.1.500

ОС: Debian 9 (4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux)

Я пытаюсь остановить / запустить пул приложений из ОС Linux через ServerManager, но безуспешно. По каталогу API это должно работать: https://apisof.net/catalog/Microsoft.Web.Administration.ServerManager

ServerManager.OpenRemote () генерирует исключение NullReference при попытке ApplicationPools:

// also trying ip adress
using (ServerManager manager = ServerManager.OpenRemote("someserver"))
{
    try
    {
        if (manager.ApplicationPools == null) /* <= Here is exception!!! */
        {
            Console.WriteLine("ApplicationPool is null!");
        }
        else
        {
            foreach (var item in manager.ApplicationPools)
            {
                Console.WriteLine("  " + item.Name);
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Exception: " + ex.Message);
        Console.WriteLine(" Trace=" + ex.StackTrace);
    }
}

Результат:

Исключение: ссылка на объект не установлена ​​для экземпляра объекта.
Trace = в Microsoft.Web.Administration.ConfigurationManager.CreateWritableAdminManager(WebConfigurationMap webConfigMap, строка configPathToEdit, логическое значение isAdminConfig, логическое значение isRedirectionConfig) в Microsoft.Web.Administration.Configuration_Conf_Max_Web_File.Conf_Med_File.Conf_Medig_Med_File.COM.Web.Administration.ConfigurationManager. CreateInstanceDelegate1 valueFactory) at Microsoft.Web.Administration.ServerManager.ApplicationPoolCollectionCreator() at Microsoft.Web.Administration.Lazy.Initialize[T](T& target, CreateInstanceDelegate1 valueFactory) в SomeMethod() в some_file.cs: строка 123

Когда ServerManager создает с помощью конструктора, который принимает строку, ApplicationPools создает исключение System.PlatformNotSupportedException:

using (ServerManager manager = new ServerManager(@"\\someserver\IISSharedConfig\applicationHost.config"))
{
    try
    {
        if (manager.ApplicationPools == null) /* <= Here is exception!!! */
        {
            Console.WriteLine("ApplicationPool is null!");
        }
        else
        {
            foreach (var item in manager.ApplicationPools)
            {
                Console.WriteLine("  " + item.Name);
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Exception: " + ex.Message);
        Exception e = ex.InnerException;
        while (e != null)
        {
            Console.WriteLine("InnerException: " + e.Message);
            e = e.InnerException;
        }
        Console.WriteLine(" Trace=" + ex.StackTrace);
    }
}

Результат:

Исключение: Исключение было сгенерировано целью вызова. Внутреннее исключение: COM не поддерживается System.Activator.CreateInstanceT в Microsoft.Web.Administration.ConfigurationManager.CreateAdminManager [TClass, TInterface] (WebConfigurationMap webConfigMap, логический isAdminConfig, логический_конфигурация Boolean isRedirectionConfig) в Microsoft.Web.Administration.ConfigurationManager.CreateConfiguration (WebConfigurationMap configMap, строка configPathToEdit, логический isAdminConfig, логический isRedirectionConfig) в Microsoft.Web.Administration.ConfigurationCoringGringer nfigurationPath, String cacheKey, Boolean isAdminConfig, Boolean isRedirectionConfig) в Microsoft.Web.Administration.ServerManager.ApplicationPoolsSectionCreator () в Microsoft.Web.Administration.Lazy.Initialize[T](T& target, CreateInstanceD1 valueFactory) at Microsoft.Web.Administration.ServerManager.ApplicationPoolCollectionCreator() at Microsoft.Web.Administration.Lazy.Initialize[T](T& target, CreateInstanceDelegate1 valueFactory) в SomeMethod() в some_file.cs: строка 123

Как использовать ServerManager в Linux?

1 ответ

Решение

Я считаю, что то, что вы пытаетесь сделать, не поддерживается в Linux. Смотрите внизу ссылку, которую вы разместили в своем вопросе:

Платформа

.NET Standard + расширения платформы

Насколько я помню, расширения платформы являются дополнениями, которые не являются кроссплатформенными, поэтому их нельзя использовать в приложении, работающем в Linux.

Вы также можете увидеть подсказку во второй сообщенной вами ошибке:

COM не поддерживается

Что верно для Linux.

Надеюсь, поможет!

Другие вопросы по тегам