ASP.NET IIS Metabaseすべてのサイトを返すわけではありません
-
20-09-2019 - |
質問
IISのWebサイトを列挙するために、ASP.NETの次のようなコードを使用します。
string metabasePath = "IIS://localhost/W3SVC";
DirectoryEntry service = new DirectoryEntry(metabasePath);
service.RefreshCache();
string className = service.SchemaClassName.ToString();
if (className.EndsWith("Service"))
{
DirectoryEntries sites = service.Children;
foreach (DirectoryEntry site in sites)
{
ProcessSite(site);
}
}
ただし、16のサイトのうち最初の11サイトのみが処理されることがわかります。私はこれと数時間戦ってきましたが、IISの最初の11サイトを通過する方法を見つけることができません。私は再帰的に検索しようとしました。私はDirectorySearcherを使用して役に立たず、何度も列挙したり、運がなくて何らかのフィルターを使用したりしようとしました。
何か案は?
ありがとう!
〜mellamokb
解決
DirectoryServicesの代わりにWMIを使用することにしました。これは完全に機能しているようです。
ManagementScope oms = new ManagementScope(@"\\.\root\MicrosoftIISv2");
oms.Connect();
ObjectQuery oQuery = new ObjectQuery("select * from IISWebServerSetting");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oms, oQuery);
foreach (ManagementObject oreturn in oSearcher.Get())
{
Response.Write(oreturn["ServerComment"] + " (" + oreturn["Name"] + ")<br />");
}
他のヒント
ローカルサーバー上のすべてのサイトを列挙するには、これを試すことができます。
class Program
{
static void Main(string[] args)
{
var iis = new DirectoryEntry("IIS://localhost/W3SVC");
var sites = (from DirectoryEntry entry in iis.Children
where entry.SchemaClassName == "IIsWebServer"
select entry).ToArray();
foreach (var site in sites)
{
Console.WriteLine(site.Name);
}
}
偶然IIS 7を実行していますか?もしそうなら、それは互換性の理由でのみ存在するため、問題を説明するかもしれません。それはもはや主要な店ではありません。
代わりにApplicationHost.configを解析する必要があるでしょうが、WMIも良い選択肢です。
所属していません StackOverflow