簡體   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