1

.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, CreateInstanceDelegate1 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, CreateInstanceDelegate1 valueFactory) 在 some_file.cs:line 123 中 SomeMethod()

如何在 Linux 中使用 ServerManager?

4

1 回答 1

0

我相信Linux不支持您尝试做的事情。请参阅您在问题中发布的链接的底部:

平台

.NET 标准 + 平台扩展

据我记得,平台扩展是不跨平台的附加功能,因此不能在Linux上运行的应用程序中使用。

您还可以在您发布的第二个错误中看到提示:

不支持 COM

在Linux上确实如此。

希望能帮助到你!

于 2018-12-06T14:12:24.450 回答