0

ASP.Netで次のようなコードを使用して、IISのWebサイトを列挙します。

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

4

3 に答える 3

2

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 />");
}
于 2009-11-13T21:14:05.460 に答える
1

ローカルサーバー上のすべてのサイトを列挙するには、次のことを試してください。

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);
        }
    }
于 2009-11-13T21:00:48.260 に答える
0

たまたまIIS7を実行していますか?もしそうなら、メタベースは互換性の理由でのみ存在するので、それは問題を説明するかもしれません。もはやプライマリストアではありません。

代わりにapplicationHost.configを解析する必要があるかもしれませんが、WMIも適切なオプションです。

于 2009-11-15T16:01:34.270 に答える