سؤال

يمكنني استخدام التعليمات البرمجية مثل ما يلي في ASP.NET لتعداد المواقع الإلكترونية في IIS:

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);
    }
}

ومع ذلك، أجد أن المواقع ال 11 الأولى فقط من 16 موقعا تتم معالجتها من أي وقت مضى. لقد قاتلت مع هذا لبضع ساعات، ولا يمكن أن تجد أي طريقة للالتزام بالمواقع ال 11 الأولى في IIS. لقد حاولت البحث بشكل متكرر، لقد حاولت استخدام DirectorySearcher دون جدوى، لقد حاولت تعداد عدة مرات أو استخدام نوع من مرشح دون أي حظ.

أيه أفكار؟

شكرًا!

~ mellamokb.

هل كانت مفيدة؟

المحلول

لقد قررت استخدام 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 هو خيار جيد أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top