2015-06-16 104 views
0

我試圖遠程讀取IIS 7配置數據,特別是默認站點的logExtFileFlags。當我看的applicationHost.config在遠程服務器上,我看到有問題的信息:如何從「默認」網站讀取logExtFileFlags?

<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的有效方法。我很困惑這一點。任何幫助將不勝感激。

我也會對如何破譯這些標誌感興趣,一旦我可以正確地到達對象。一旦我達到這一點,這可能是顯而易見的。

回答

0

您必須自己實施FindElement方法。看看這個C#代碼iis.net page

logExtFileFlags屬性將一個字符串將逗號分隔值,您可以使用字符串拆分或linq將其轉換爲字符串的集合。

+0

感謝您的幫助。您的解決方案完美運作 –

+0

@TomK - 在這種情況下,您應該接受解決問題的答案。 –