[英]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.