如何从 "Default" 站点读取 logExtFileFlags?

How can I read the logExtFileFlags from the "Default" site?

我正在尝试远程读取 IIS 7 配置数据,特别是来自默认站点的 logExtFileFlags。当我查看远程服务器上的 applicationHost.config 时,我看到有问题的信息:

<system.applicationHost>
    <sites>
        <site name="Default" id="1" serverAutoStart="true">
            <logFile logExtFileFlags="Date, Time, ClientIP, UserName, SeverIP, Method, UriStem, URIQuery, HttpStatus, TimeTaken, ServerPort, UserAgent, HttpSubStatus" enabled="true" />
        </site>
      </sites>
</system.applicationHost>

我正在尝试使用 ServerManager 远程读取信息。我在阅读的其他参数上取得了成功,但它们位于 applicationHost.config 文件的 system.webServer 部分。我的代码设置如下:

ServerManager manager = ServerManager.GetApplicationHostConfiguration();
var allSites = manager.Sites
foreach (Site currentSite in allSites) 
{
    siteName = currentSite.Name;

    // I only have the "Default" site on the server in question but other servers may have more than one.
    ConfigurationSection  sitesSection =  config.GetSection("system.applicationHost/sites",siteName);
}

最后一行不起作用。事实上,它不编译。它只是为了让您了解我正在尝试做的事情。我还意识到会有额外的行来解析 logFile 标签。经过进一步研究,我发现了以下内容:

ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();

ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Default");

这似乎是我想做的。当我输入它时,FindElement 不是 ConfigurationElement 的有效方法。我在这一点上感到难过。任何帮助将不胜感激。

一旦我能正确到达目标,我也会对如何破译这些标志感兴趣。一旦我达到这一点,它可能是显而易见的。

您必须自己实现 FindElement 方法。看看这个 iis.net page

上的 C# 代码

logExtFileFlags 属性 将是一个字符串,将以逗号分隔值,您可以使用字符串拆分或 linq 将其转换为字符串集合。