繁体   English   中英

如何将IIS ApplicationHost.config文件解析为.Net对象?

[英]How to parse the IIS ApplicationHost.config file into .Net objects?

我正在编写一个应用程序来询问IIS服务器上哪些站点处于活动状态。 最好的方法似乎是直接读取ApplicationHost.config文件。

最简单的方法是什么?

是否也可以使用此方法写回新站点?

1)ApplicationHost.config是一个XML文件,因此您可以简单地使用XDocument类。

2)是-XDocument允许构造新的XML元素。

由于ApplicationHost.Config只是XML,因此您可以使用一些工具从中生成类,例如Xml2CSharp 您可能需要适应一件事或另一件事,但这是一个开始。

然后,将ApplicationHost.config反序列化为类似于常规XML的对象。

您可以直接更改ApplicationHost.config来添加站点,应用程序池并更改其他配置,但是我不建议这样做。

您可以使用ServerManager类。 这里是一个非常基本的示例,因此您可以开始玩:

using(var serverManager = ServerManager.OpenRemote("my-remote-server"))
{
    if (serverManager.Sites.AllowsAdd())
    {
        var site = serverManager.Sites.Add(siteName, path, port);
        // use site for something, like changing its bindings or something else
        serverManager.CommitChanges(); // without this, changes are made only in memory
    }
}

确保将执行此代码的应用程序在远程服务器中存在的用户下运行。 该应用程序需要在可以远程访问目标IIS服务器的计算机和用户帐户中运行。

另外,您需要添加对Microsoft.Web.Administration的引用,该引用应位于c:\\ windows \\ system32 \\ inetsrv下。

我使用Xml2CSharp和我拥有的applicationHost.config文件生成了类。 我也只对每个站点的绑定感兴趣。 主要更改是使用句号(system.webServer-> systemwebServer)纠正类和变量名。 Stackoverflow不会托管上载的类文件,并且在815行生成的类要发布的时间有点长。 但是,这可能会有所帮助

    JavaScriptSerializer ser = new JavaScriptSerializer();

string applicationHostFile = @"C:\Windows\System32\inetsrv\Config\applicationHost.config";

using (System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(applicationHostFile))
{
    System.Xml.Serialization.XmlSerializer DeSerializer = new System.Xml.Serialization.XmlSerializer(typeof(Xml2CSharp.Configuration));
    Xml2CSharp.Configuration configuration = (Xml2CSharp.Configuration)DeSerializer.Deserialize(reader);

    foreach (var site in configuration.SystemapplicationHost.Sites.Site)
    {
        // clear Application to not expose sensitive information
        site.Application = null;
        Console.WriteLine(site.Name);
        foreach (var binding in site.Bindings.Binding)
        {
            Console.WriteLine(binding.BindingInformation);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM