#.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, у которых нет этих идентификаторов.