Как получить числовой идентификатор свойства метабазы IIS 6 в C #?

#.net #iis-6 #directoryservices #metabase #oval

#.net #iis-6 #directoryservices #метабаза #овал

Вопрос:

Приведенный ниже код работает нормально и может считывать все в метабазе удаленного сервера 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.

введите описание изображения здесь

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

 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<8amp;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%system32inetsrvASP Compiled Templates
    LogFileDirectory (Type System.String)
        C:WINDOWSsystem32LogFiles
    HttpErrors (Type System.Object[])
        400,*,FILE,C:WINDOWShelpiisHelpcommon400.htm
        401,1,FILE,C:WINDOWShelpiisHelpcommon401-1.htm
        401,2,FILE,C:WINDOWShelpiisHelpcommon401-2.htm
        401,3,FILE,C:WINDOWShelpiisHelpcommon401-3.htm
        401,4,FILE,C:WINDOWShelpiisHelpcommon401-4.htm
        401,5,FILE,C:WINDOWShelpiisHelpcommon401-5.htm
        401,7,FILE,C:WINDOWShelpiisHelpcommon401-1.htm
        403,1,FILE,C:WINDOWShelpiisHelpcommon403-1.htm
        403,2,FILE,C:WINDOWShelpiisHelpcommon403-2.htm
        403,3,FILE,C:WINDOWShelpiisHelpcommon403-3.htm
        403,4,FILE,C:WINDOWShelpiisHelpcommon403-4.htm
        403,5,FILE,C:WINDOWShelpiisHelpcommon403-5.htm
        403,6,FILE,C:WINDOWShelpiisHelpcommon403-6.htm
        403,7,FILE,C:WINDOWShelpiisHelpcommon403-7.htm
        403,8,FILE,C:WINDOWShelpiisHelpcommon403-8.htm
        403,9,FILE,C:WINDOWShelpiisHelpcommon403-9.htm
        403,10,FILE,C:WINDOWShelpiisHelpcommon403-10.htm
        403,11,FILE,C:WINDOWShelpiisHelpcommon403-11.htm
        403,12,FILE,C:WINDOWShelpiisHelpcommon403-12.htm
        403,13,FILE,C:WINDOWShelpiisHelpcommon403-13.htm
        403,15,FILE,C:WINDOWShelpiisHelpcommon403-15.htm
        403,16,FILE,C:WINDOWShelpiisHelpcommon403-16.htm
        403,17,FILE,C:WINDOWShelpiisHelpcommon403-17.htm
        403,18,FILE,C:WINDOWShelpiisHelpcommon403.htm
        403,19,FILE,C:WINDOWShelpiisHelpcommon403.htm
        403,20,FILE,C:WINDOWShelpiisHelpcommon403-20.htm
        404,*,FILE,C:WINDOWShelpiisHelpcommon404b.htm
        404,2,FILE,C:WINDOWShelpiisHelpcommon404b.htm
        404,3,FILE,C:WINDOWShelpiisHelpcommon404b.htm
        405,*,FILE,C:WINDOWShelpiisHelpcommon405.htm
        406,*,FILE,C:WINDOWShelpiisHelpcommon406.htm
        407,*,FILE,C:WINDOWShelpiisHelpcommon407.htm
        412,*,FILE,C:WINDOWShelpiisHelpcommon412.htm
        414,*,FILE,C:WINDOWShelpiisHelpcommon414.htm
        415,*,FILE,C:WINDOWShelpiisHelpcommon415.htm
        500,12,FILE,C:WINDOWShelpiisHelpcommon500-12.htm
        500,13,FILE,C:WINDOWShelpiisHelpcommon500-13.htm
        500,15,FILE,C:WINDOWShelpiisHelpcommon500-15.htm
        500,16,FILE,C:WINDOWShelpiisHelpcommon500.htm
        500,17,FILE,C:WINDOWShelpiisHelpcommon500.htm
        500,18,FILE,C:WINDOWShelpiisHelpcommon500.htm
        500,19,FILE,C:WINDOWShelpiisHelpcommon500.htm
    ScriptMaps (Type System.Object[])
        .asp,C:WINDOWSsystem32inetsrvasp.dll,5,GET,HEAD,POST,TRACE
        .cer,C:WINDOWSsystem32inetsrvasp.dll,5,GET,HEAD,POST,TRACE
        .cdx,C:WINDOWSsystem32inetsrvasp.dll,5,GET,HEAD,POST,TRACE
        .asa,C:WINDOWSsystem32inetsrvasp.dll,5,GET,HEAD,POST,TRACE
        .idc,C:WINDOWSsystem32inetsrvhttpodbc.dll,5,GET,POST
        .shtm,C:WINDOWSsystem32inetsrvssinc.dll,5,GET,POST
        .shtml,C:WINDOWSsystem32inetsrvssinc.dll,5,GET,POST
        .stm,C:WINDOWSsystem32inetsrvssinc.dll,5,GET,POST
    MaxBandwidth (Type System.Int32)
        -1
    AdminACL (Type System.__ComObject)
        System.__ComObject
  

Ответ №1:

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

C:WINDOWSsystem32inetsrvMBSchema.xml

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

 XNamespace ns = "x-urn:microsoft-catalog:MetaData_V7";
XDocument schema = XDocument.Load(@"C:WINDOWSsystem32inetsrvMBSchema.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, у которых нет этих идентификаторов.