Как получить числовой идентификатор свойства метабазы IIS 6 в C#?
Приведенный ниже код работает нормально и может читать все данные в метабазе удаленного сервера 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<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 ответ
Идентификаторы метабазной схемы не отображаются в 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, которые не имеют этих идентификаторов.