Active Directory & .NET
От: korzey  
Дата: 20.06.05 08:24
Оценка:
Собственно сей вопрос я задавал на GDN http://www.gotdotnet.ru/Forums/Common/173185.aspx, но никакого вразумительного ответа не получил. Однако, Надежда — девка крепкая...

Cразу пресеку ненужный флейм: "Искомые" объекты НЕ "держат" интерфейсы IADs!! Посему, не стоит предлагать "привести их к IADs, и копать там"...

Есть следующий кусочек кода рекурсивно обходящий дерево(плюнем на оптимальность, не в этом сейчас дело) :

DirectoryEntry root=new DirectoryEntry("LDAP://rootDSE");
root=new DirectoryEntry("LDAP://"+ent.Properties["defaultNamingContext"][0].ToString());
NodeWalk(root);

private void NodeWalk(DirectoryEntry ent)
{
 
    foreach(string pn in ent.Properties.PropertyNames)
    {
        foreach(object pv in ent.Properties[pn])
        {
             ..... // !! Собственно, вывод свойств
        }
    }
    foreach(DirectoryEntry child in ent.Children)
    {
        NodeWalk(child);
    }
}


Для некоторых свойств возвращается pv.ToString()=="System.__ComObject", и pv.GUID={00000000-0000-0000-0000-000000000000}.
Зная точный тип COM-объекта можно использовать маршалинг, но основная проблема: узнать этот злосчастный тип, или хотя бы его GUID.

Ваши предложения?
Избави бог от дураков, а с врагами и сами, как-нибудь, разберемся...
Re: Active Directory & .NET
От: TK Лес кывт.рф
Дата: 20.06.05 08:50
Оценка:
Hello, "korzey"
> Собственно сей вопрос я задавал на GDN
> http://www.gotdotnet.ru/Forums/Common/173185.aspx, но никакого
> вразумительного ответа не получил. Однако, Надежда — девка крепкая...
>
> Cразу пресеку ненужный флейм: "Искомые" объекты НЕ "держат" интерфейсы
> IADs!! Посему, не стоит предлагать "привести их к IADs, и копать
> там"...

>

Не все интерфейсы IADчтототам наследуются от IADs. Например,
IADsLargeInteger, IADsPropertyEntry или IADsPropertyValue. т.е. надо было
открыть MSDN и перед тем, как начинать чуть-чуть подумать... а не слепо
пытаться запросить IADs. например, можно посмотреть на имя свойства и
подумать, каким интерейсом оно может выражаться...
вообще, от IADs наследуются ноды в дереве. А уже свойства каждой ноды
выражаются другими интерфейсами.
Posted via RSDN NNTP Server 1.9
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Active Directory & .NET
От: korzey  
Дата: 20.06.05 09:08
Оценка:
Здравствуйте, TK, Вы писали:

TK>Hello, "korzey"

>> Собственно сей вопрос я задавал на GDN
>> http://www.gotdotnet.ru/Forums/Common/173185.aspx, но никакого
>> вразумительного ответа не получил. Однако, Надежда — девка крепкая...
>>
>> Cразу пресеку ненужный флейм: "Искомые" объекты НЕ "держат" интерфейсы
>> IADs!! Посему, не стоит предлагать "привести их к IADs, и копать
>> там"...

>>

TK>Не все интерфейсы IADчтототам наследуются от IADs. Например,

TK>IADsLargeInteger, IADsPropertyEntry или IADsPropertyValue. т.е. надо было
TK>открыть MSDN и перед тем, как начинать чуть-чуть подумать... а не слепо
TK>пытаться запросить IADs. например, можно посмотреть на имя свойства и
TK>подумать, каким интерейсом оно может выражаться...
TK>вообще, от IADs наследуются ноды в дереве. А уже свойства каждой ноды
TK>выражаются другими интерфейсами.

Ой какой я радостный... А я-то и не знал, как оно на самом деле... Пойду, голову пеплом посыплю...

А на счет вышевысказанного — я умею пользоваться ADSIEdit'ом, я "пишу" с 1989 года, я сисадмин на 220 рабочих мест под AD/Win2k. Возможно это Вы что-то недопоняли в вопросе? Ну, тогда читайте до просветления....

Меня же интересует, почему .NET значения некоторых свойств понимает, а некоторых нет, и ToString возвращает только "__ComObject". Меня, как раз, и интересовало, как узнать о типе "неизвестного" объекта???

И глазками я смотреть могу, слава богу... Вот только придется писать слишком высокоинтеллектуальный код, что бы он по названию свойства пытался понять, что за объект там спрятан, бо завтра добавится еще пара свойств в "дереве", и надо будет опять пересобирать проект.
Ну и нахрена нужен ТАКОЙ RTTI?
Избави бог от дураков, а с врагами и сами, как-нибудь, разберемся...
Re[3]: Active Directory & .NET
От: TK Лес кывт.рф
Дата: 20.06.05 09:43
Оценка:
Hello, "korzey"
>
> А на счет вышевысказанного — я умею пользоваться ADSIEdit'ом, я "пишу" с
> 1989 года, я сисадмин на 220 рабочих мест под AD/Win2k. Возможно это Вы
> что-то недопоняли в вопросе? Ну, тогда читайте до просветления....
> Меня же интересует, почему .NET значения некоторых свойств понимает, а
> некоторых нет, и ToString возвращает только "__ComObject". Меня, как раз,
> и интересовало, как узнать о типе "неизвестного" объекта???
>

Возможно, что и не понял. Но, мне казалось, что 16 лет достаточный срок
что-бы освоить определение типа произвольного COM объекта. Что касается
.NET, то наверное, сразу было видно, что System.DirectoryServices это лишь
ограниченная часть ADSI...

> И глазками я смотреть могу, слава богу... Вот только придется писать

> слишком высокоинтеллектуальный код, что бы он по названию свойства пытался
> понять, что за объект там спрятан, бо завтра добавится еще пара свойств в
> "дереве", и надо будет опять пересобирать проект.

Многое зависит от того, какие свойства в дереве будут добавлены. Вполне
возможно, что проект придется и пересобрать. Однако, можно заметить, что
большинство интерфесов наследуются от IDispatch получить от него список
свойств и их значения не так уж сложно...
Posted via RSDN NNTP Server 1.9
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Active Directory & .NET
От: korzey  
Дата: 20.06.05 13:13
Оценка:
Здравствуйте, TK, Вы писали:

TK>Hello, "korzey"

>>
>> А на счет вышевысказанного — я умею пользоваться ADSIEdit'ом, я "пишу" с
>> 1989 года, я сисадмин на 220 рабочих мест под AD/Win2k. Возможно это Вы
>> что-то недопоняли в вопросе? Ну, тогда читайте до просветления....
>> Меня же интересует, почему .NET значения некоторых свойств понимает, а
>> некоторых нет, и ToString возвращает только "__ComObject". Меня, как раз,
>> и интересовало, как узнать о типе "неизвестного" объекта???
>>

TK>Возможно, что и не понял. Но, мне казалось, что 16 лет достаточный срок

TK>что-бы освоить определение типа произвольного COM объекта. Что касается
TK>.NET, то наверное, сразу было видно, что System.DirectoryServices это лишь
TK>ограниченная часть ADSI...

Если писать на С\С++, то не вопрос. Потому и закинул в тему .NET'а, что желательно сделать на C#. На плюсах уже "рыбу" сделал, и работает. Но, очень хотелось бы сделать это на "RTTI.NET"...

>> И глазками я смотреть могу, слава богу... Вот только придется писать

>> слишком высокоинтеллектуальный код, что бы он по названию свойства пытался
>> понять, что за объект там спрятан, бо завтра добавится еще пара свойств в
>> "дереве", и надо будет опять пересобирать проект.

TK>Многое зависит от того, какие свойства в дереве будут добавлены. Вполне

TK>возможно, что проект придется и пересобрать. Однако, можно заметить, что
TK>большинство интерфесов наследуются от IDispatch получить от него список
TK>свойств и их значения не так уж сложно...

Ну, если только опять в Interop/Marshal лезть.
Блин, а счастье было так возможно... , и так возможно... и вот так...
Избави бог от дураков, а с врагами и сами, как-нибудь, разберемся...
Re[4]: Active Directory & .NET
От: korzey  
Дата: 20.06.05 14:58
Оценка:
Здравствуйте, TK, Вы писали:

TK>Hello, "korzey"

>>
>> некоторых нет, и ToString возвращает только "__ComObject". Меня, как раз,
>> и интересовало, как узнать о типе "неизвестного" объекта???
>>

TK>...

>>...

TK>Многое зависит от того, какие свойства в дереве будут добавлены. Вполне

TK>возможно, что проект придется и пересобрать. Однако, можно заметить, что
TK>большинство интерфесов наследуются от IDispatch получить от него список
TK>свойств и их значения не так уж сложно...

Вот и все, что нашел на MS-е: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sds/sds/property_types.asp
Опять же, предлагается только перебором, через try/catch...
Избави бог от дураков, а с врагами и сами, как-нибудь, разберемся...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.