На моем сервере OpenLDAP установлена пользовательская схема LDAP, которая выглядит следующим образом:
attributeType ( 999.0.01
NAME 'picturePath'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024}
)
objectClass ( 999.1.01
NAME 'indieStackTeam'
DESC 'Team definition for IndieStack'
SUP groupOfUniqueNames
STRUCTURAL
MAY ( picturePath )
)
В моем приложении ASP.NET MVC 2 я запрашиваю свойство picturePath примерно так (и подтверждается, что picturePath существует в списке ключей):
this.Picture = properties["picturePath"].Value as string;
Когда я пытаюсь сделать это в .NET 3.5, я получаю следующее исключение:
[COMException (0x8000500c): Unknown error (0x8000500c)]
System.DirectoryServices.PropertyValueCollection.PopulateList() +347013
System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName) +49
System.DirectoryServices.PropertyCollection.get_Item(String propertyName) +150
Однако, когда тот же код выполняется под Mono (на том же сервере, что и OpenLDAP), он работает отлично. Такие клиенты, как LDAPAdmin, также могут правильно прочитать свойство picturePath.
Более того, только когда я иду, чтобы прочитать значение, оно терпит неудачу; Я вижу, что свойство есть в списке ключей, я просто не могу получить к нему доступ.
К сожалению, неизвестная ошибка не говорит мне много о том, что идет не так, но я нахожу, что .NET-реализация System.DirectoryServices очень ненадежна (вы получаете ту же неизвестную ошибку, если подключаетесь к серверу LDAP с использованием нижнего регистра в 'DC =').
Кто-нибудь имел эту проблему раньше, и если да, то как ее решить?