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