.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 )
我正在尝试通过 ServerManager 从 Linux 操作系统停止/启动应用程序池,但没有成功。根据 api 目录,它应该可以工作: https ://apisof.net/catalog/Microsoft.Web.Administration.ServerManager
ServerManager.OpenRemote() 在尝试 ApplicationPools 时抛出 NullReference 异常:
// 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.CreateConfiguration(WebConfigurationMap configMap, String configPathToEdit, Boolean isAdminConfig, Boolean isRedirectionConfig) 在 Microsoft.Web.Administration.ConfigurationManager.CreateWritableAdminManager(WebConfigurationMap webConfigMap, String configPathToEdit, Boolean isAdminConfig, Boolean isRedirectionConfig) 在 Microsoft .Web.Administration.ConfigurationManager.GetConfiguration(String rawConfigurationPath, String cacheKey, Boolean isAdminConfig, Boolean isRedirectionConfig) 在 Microsoft.Web.Administration.ServerManager.ApplicationPoolsSectionCreator() 在 Microsoft.Web.Administration.Lazy.Initialize[T](T& 目标,创建实例委托1 valueFactory) at Microsoft.Web.Administration.ServerManager.ApplicationPoolCollectionCreator() at Microsoft.Web.Administration.Lazy.Initialize[T](T& target, CreateInstanceDelegate
1 valueFactory) 在 some_file.cs:line 123 中 SomeMethod()
当 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);
}
}
结果:
异常:调用的目标已抛出异常。InnerException:在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean wrapExceptions,Boolean skipCheckThis,Boolean fillCache)的 System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型,Boolean publicOnly,Boolean wrapExceptions,Boolean& canBeCached,RuntimeMethodHandleInternal&ctor)不支持 COM System.Activator.CreateInstanceT 在 Microsoft.Web.Administration.ConfigurationManager.CreateAdminManager[TClass,TInterface](WebConfigurationMap webConfigMap, Boolean isAdminConfig, Boolean isRedirectionConfig) 在 Microsoft.Web.Administration.ConfigurationManager.CreateWritableAdminManager(WebConfigurationMap webConfigMap, String configPathToEdit, Boolean isAdminConfig,
1 valueFactory) at Microsoft.Web.Administration.ServerManager.ApplicationPoolCollectionCreator() at Microsoft.Web.Administration.Lazy.Initialize[T](T& target, CreateInstanceDelegate
1 valueFactory) 在 some_file.cs:line 123 中 SomeMethod()
如何在 Linux 中使用 ServerManager?