Как получить числовой идентификатор свойства метабазы ​​IIS 6 в C #? - PullRequest
2 голосов
/ 14 апреля 2011

Приведенный ниже код работает нормально и может читать все в метабазе удаленного сервера IIS 6, кроме числового идентификатора свойств.Я не могу найти их в объекте PropertyValueCollection.

var site = new DirectoryEntry("IIS://" + tbHost.Text + 
                    "/W3SVC/1", tbUsername.Text, tbPassword.Password);

Console.Write("Site {0}\n", site.Name);

foreach (PropertyValueCollection prop in site.Properties)
{
    Console.Write("    {0} (Type {1})\n", prop.PropertyName, 
                                               prop.Value.GetType());
    foreach (var thingInProp in prop)
    {
        Console.Write("        {0}\n", thingInProp);
    }
}

Вы можете увидеть числовые идентификаторы на рисунке ниже.Код выше успешно читает, например, что LogFilePeriod равно 4, но он не может получить тот факт, что идентификатор свойства LogFilePeriod равен 4003. Мне нужны идентификаторы, чтобы сделать коллекцию, соответствующую OVALстандарт.

enter image description here

Вот что я получаю с сервера:Где идентификаторы?(Кроме того, кажется, что этот код также получает унаследованные свойства из путей верхнего уровня. Это правильно?)

Site 1
    LogExtFileFlags (Type System.Int32)
        2199519
    LogFileLocaltimeRollover (Type System.Boolean)
        False
    LogFilePeriod (Type System.Int32)
        4
    LogFileTruncateSize (Type System.Int32)
        20971520
    MaxConnections (Type System.Int32)
        1000
    ServerSize (Type System.Int32)
        1
    ServerState (Type System.Int32)
        2
    Win32Error (Type System.Int32)
        0
    AppPoolId (Type System.String)
        DefaultAppPool
    DefaultDoc (Type System.String)
        Default.htm,Default.asp,index.htm,iisstart.htm
    KeyType (Type System.String)
        IIsWebServer
    ServerComment (Type System.String)
        Default Web Site
    SslCtlIdentifier (Type System.String)
        {E553F318-89D9-4C9F-9C09-91FF12A3BFAF}
    SslCtlStoreName (Type System.String)
        CA
    ServerBindings (Type System.String)
        :80:
    AllowKeepAlive (Type System.Boolean)
        True
    AppAllowClientDebug (Type System.Boolean)
        False
    AppAllowDebugging (Type System.Boolean)
        False
    AspAllowOutOfProcComponents (Type System.Boolean)
        True
    AspAllowSessionState (Type System.Boolean)
        True
    AspAppServiceFlags (Type System.Int32)
        0
    AspBufferingLimit (Type System.Int32)
        4194304
    AspBufferingOn (Type System.Boolean)
        True
    AspCalcLineNumber (Type System.Boolean)
        True
    AspCodepage (Type System.Int32)
        0
    AspEnableApplicationRestart (Type System.Boolean)
        True
    AspEnableAspHtmlFallback (Type System.Boolean)
        False
    AspEnableChunkedEncoding (Type System.Boolean)
        True
    AspEnableParentPaths (Type System.Boolean)
        False
    AspEnableTypelibCache (Type System.Boolean)
        True
    AspErrorsToNTLog (Type System.Boolean)
        False
    AspExceptionCatchEnable (Type System.Boolean)
        True
    AspExecuteInMTA (Type System.Int32)
        0
    AspKeepSessionIDSecure (Type System.Int32)
        0
    AspLCID (Type System.Int32)
        2048
    AspLogErrorRequests (Type System.Boolean)
        True
    AspMaxDiskTemplateCacheFiles (Type System.Int32)
        2000
    AspMaxRequestEntityAllowed (Type System.Int32)
        204800
    AspProcessorThreadMax (Type System.Int32)
        25
    AspQueueConnectionTestTime (Type System.Int32)
        3
    AspQueueTimeout (Type System.Int32)
        -1
    AspRequestQueueMax (Type System.Int32)
        3000
    AspRunOnEndAnonymously (Type System.Boolean)
        True
    AspScriptEngineCacheMax (Type System.Int32)
        250
    AspScriptErrorSentToBrowser (Type System.Boolean)
        True
    AspScriptFileCacheSize (Type System.Int32)
        500
    AspScriptTimeout (Type System.Int32)
        90
    AspSessionMax (Type System.Int32)
        -1
    AspSessionTimeout (Type System.Int32)
        20
    AspTrackThreadingModel (Type System.Boolean)
        False
    AuthFlags (Type System.Int32)
        1
    CacheISAPI (Type System.Boolean)
        True
    CGITimeout (Type System.Int32)
        300
    ConnectionTimeout (Type System.Int32)
        120
    ContentIndexed (Type System.Boolean)
        True
    DirBrowseFlags (Type System.Int32)
        1073741886
    LogType (Type System.Int32)
        1
    PasswordChangeFlags (Type System.Int32)
        6
    AnonymousUserName (Type System.String)
        IUSR_OVAL-IIS6-A
    AnonymousUserPass (Type System.String)
        n;x7u'8(H<8&4h
    AspScriptErrorMessage (Type System.String)
        An error occurred on the server when processing the URL.  Please contact the system administrator.
    AspScriptLanguage (Type System.String)
        VBScript
    LogOdbcDataSource (Type System.String)
        HTTPLOG
    LogOdbcPassword (Type System.String)
        sqllog
    LogOdbcTableName (Type System.String)
        InternetLog
    LogOdbcUserName (Type System.String)
        InternetAdmin
    LogPluginClsid (Type System.String)
        {FF160663-DE82-11CF-BC0A-00AA006111E0}
    AspDiskTemplateCacheDirectory (Type System.String)
        %windir%\system32\inetsrv\ASP Compiled Templates
    LogFileDirectory (Type System.String)
        C:\WINDOWS\system32\LogFiles
    HttpErrors (Type System.Object[])
        400,*,FILE,C:\WINDOWS\help\iisHelp\common\400.htm
        401,1,FILE,C:\WINDOWS\help\iisHelp\common\401-1.htm
        401,2,FILE,C:\WINDOWS\help\iisHelp\common\401-2.htm
        401,3,FILE,C:\WINDOWS\help\iisHelp\common\401-3.htm
        401,4,FILE,C:\WINDOWS\help\iisHelp\common\401-4.htm
        401,5,FILE,C:\WINDOWS\help\iisHelp\common\401-5.htm
        401,7,FILE,C:\WINDOWS\help\iisHelp\common\401-1.htm
        403,1,FILE,C:\WINDOWS\help\iisHelp\common\403-1.htm
        403,2,FILE,C:\WINDOWS\help\iisHelp\common\403-2.htm
        403,3,FILE,C:\WINDOWS\help\iisHelp\common\403-3.htm
        403,4,FILE,C:\WINDOWS\help\iisHelp\common\403-4.htm
        403,5,FILE,C:\WINDOWS\help\iisHelp\common\403-5.htm
        403,6,FILE,C:\WINDOWS\help\iisHelp\common\403-6.htm
        403,7,FILE,C:\WINDOWS\help\iisHelp\common\403-7.htm
        403,8,FILE,C:\WINDOWS\help\iisHelp\common\403-8.htm
        403,9,FILE,C:\WINDOWS\help\iisHelp\common\403-9.htm
        403,10,FILE,C:\WINDOWS\help\iisHelp\common\403-10.htm
        403,11,FILE,C:\WINDOWS\help\iisHelp\common\403-11.htm
        403,12,FILE,C:\WINDOWS\help\iisHelp\common\403-12.htm
        403,13,FILE,C:\WINDOWS\help\iisHelp\common\403-13.htm
        403,15,FILE,C:\WINDOWS\help\iisHelp\common\403-15.htm
        403,16,FILE,C:\WINDOWS\help\iisHelp\common\403-16.htm
        403,17,FILE,C:\WINDOWS\help\iisHelp\common\403-17.htm
        403,18,FILE,C:\WINDOWS\help\iisHelp\common\403.htm
        403,19,FILE,C:\WINDOWS\help\iisHelp\common\403.htm
        403,20,FILE,C:\WINDOWS\help\iisHelp\common\403-20.htm
        404,*,FILE,C:\WINDOWS\help\iisHelp\common\404b.htm
        404,2,FILE,C:\WINDOWS\help\iisHelp\common\404b.htm
        404,3,FILE,C:\WINDOWS\help\iisHelp\common\404b.htm
        405,*,FILE,C:\WINDOWS\help\iisHelp\common\405.htm
        406,*,FILE,C:\WINDOWS\help\iisHelp\common\406.htm
        407,*,FILE,C:\WINDOWS\help\iisHelp\common\407.htm
        412,*,FILE,C:\WINDOWS\help\iisHelp\common\412.htm
        414,*,FILE,C:\WINDOWS\help\iisHelp\common\414.htm
        415,*,FILE,C:\WINDOWS\help\iisHelp\common\415.htm
        500,12,FILE,C:\WINDOWS\help\iisHelp\common\500-12.htm
        500,13,FILE,C:\WINDOWS\help\iisHelp\common\500-13.htm
        500,15,FILE,C:\WINDOWS\help\iisHelp\common\500-15.htm
        500,16,FILE,C:\WINDOWS\help\iisHelp\common\500.htm
        500,17,FILE,C:\WINDOWS\help\iisHelp\common\500.htm
        500,18,FILE,C:\WINDOWS\help\iisHelp\common\500.htm
        500,19,FILE,C:\WINDOWS\help\iisHelp\common\500.htm
    ScriptMaps (Type System.Object[])
        .asp,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE
        .cer,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE
        .cdx,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE
        .asa,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE
        .idc,C:\WINDOWS\system32\inetsrv\httpodbc.dll,5,GET,POST
        .shtm,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST
        .shtml,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST
        .stm,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST
    MaxBandwidth (Type System.Int32)
        -1
    AdminACL (Type System.__ComObject)
        System.__ComObject

1 Ответ

2 голосов
/ 15 апреля 2011

Идентификаторы схемы метабазы ​​не отображаются в API-интерфейсе ADSI (к чему System.DirectoryServices.DirectoryEntry относится. Но вы можете использовать файл схемы метабазы ​​в качестве поиска:

C:\WINDOWS\system32\inetsrv\MBSchema.xml

Вот ваш код (слегка измененный для доступа к моей локальной метабазе):

XNamespace ns = "x-urn:microsoft-catalog:MetaData_V7";
XDocument schema = XDocument.Load(@"C:\WINDOWS\system32\inetsrv\MBSchema.xml");

using (DirectoryEntry site = new DirectoryEntry("IIS://Localhost/W3SVC/1"))
{
    foreach (PropertyValueCollection prop in site.Properties)
    {
        var schemaProperty = schema.Descendants(ns + "Property")
                .FirstOrDefault(a => 
                     (string)a.Attribute("InternalName") == prop.PropertyName);

        Console.Write("    {0}[ID:{1}] (Type {2})\n", 
            prop.PropertyName,
            schemaProperty.Attribute("ID"),
            prop.Value.GetType());
        foreach (var thingInProp in prop)
        {
            Console.Write("        {0}\n", thingInProp);
        }
    }
}

Я предполагаю, что вы используете .NET Framework 3.5 или более позднюю версию, поэтому вам нужно добавить ссылку на System.Xml.Linq.

Я должен добавить предостережение о том, что если вы пытаетесь сделать это на IIS7 + с использованием уровня совместимости с IIS6, то вам необходимо скопировать файл схемы с сервера IIS6 в вашу коробку IIS7.

Кроме того, вы действительно должны использовать управляемый Microsoft.Web.Administration API для сбора данных конфигурации о серверах IIS7 +. Причина этого заключается в том, что не все объекты метабазы ​​IIS6 отображаются в конфигурацию хоста администратора IIS7. Также в IIS7 будут свойства, которые не будут видны в оболочках IIS6, потому что нет подходящих типов.

Также нет гарантии, что будущие версии IIS (например, IIS8) обеспечат уровень совместимости метабазы ​​IIS6.

Наконец, эти идентификаторы являются просто числовыми идентификаторами для именованных свойств, то есть они не уникально идентифицируют какой-либо конкретный объект в метабазе, это делается через строки пути метабазы.

Идентификаторы метаданных существуют главным образом в интересах API IIS ABO, который использует эти идентификаторы, а не имена свойств. Вместо этого я бы посоветовал использовать имена строковых свойств в качестве идентификаторов, поскольку, как я упоминал ранее, есть новые объекты и свойства IIS7, которые не имеют этих идентификаторов.

...