.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, CreateInstanceDelegate
1 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, CreateInstanceD
1 valueFactory) at Microsoft.Web.Administration.ServerManager.ApplicationPoolCollectionCreator() at Microsoft.Web.Administration.Lazy.Initialize[T](T& target, CreateInstanceDelegate
1 valueFactory) в SomeMethod() в some_file.cs: строка 123
Как использовать ServerManager в Linux?
1 ответ
Я считаю, что то, что вы пытаетесь сделать, не поддерживается в Linux. Смотрите внизу ссылку, которую вы разместили в своем вопросе:
Платформа
.NET Standard + расширения платформы
Насколько я помню, расширения платформы являются дополнениями, которые не являются кроссплатформенными, поэтому их нельзя использовать в приложении, работающем в Linux.
Вы также можете увидеть подсказку во второй сообщенной вами ошибке:
COM не поддерживается
Что верно для Linux.
Надеюсь, поможет!