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

时间:2018-02-06 09:34:53

标签: c# .net iis

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

最简单的方法是什么?

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

3 个答案:

答案 0 :(得分:1)

1)ApplicationHost.config是一个XML文件,因此您只需使用XDocument类即可。

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

答案 1 :(得分:1)

由于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下。

答案 2 :(得分:0)

我用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);
        }
    }
}