.net 如何从LDAP目录中提取tnsname

.net 如何从LDAP目录中提取tnsname,.net,ldap,.net,Ldap,我一直在尝试查询LDAP目录服务器以检索tnsnames条目。我有下面的代码在工作,但闻起来不对劲。这是因为它是错误的,还是因为查询ldap涉及几个级别的间接寻址 let identifier = LdapDirectoryIdentifier(server, port) use connection = new LdapConnection (identifier) connection.AuthType <- AuthType.Anonymous let req

我一直在尝试查询LDAP目录服务器以检索tnsnames条目。我有下面的代码在工作,但闻起来不对劲。这是因为它是错误的,还是因为查询ldap涉及几个级别的间接寻址

   let identifier = LdapDirectoryIdentifier(server, port)
   use connection = new LdapConnection (identifier)
   connection.AuthType <- AuthType.Anonymous
   let request = System.DirectoryServices.Protocols.SearchRequest(defaultAdminContext, "cn=" + sid, SearchScope.OneLevel, "orclnetdescstring")
   let response = connection.SendRequest request :?> SearchResponse

   Seq.init response.Entries.Count (fun i -> response.Entries.[i])
   |> Seq.collect (fun entry ->
       let value = entry.Attributes.["orclnetdescstring"]
       Seq.init value.Count (fun i -> value.[i])
       |> Seq.map (fun v -> Some (v :?> string))
       )
let identifier=LdapDirectoryIdentifier(服务器、端口)
使用连接=新的LdapConnection(标识符)
connection.AuthType SearchResponse
Seq.init response.Entries.Count(乐趣i->response.Entries.[i])
|>Seq.collect(有趣的条目->
let value=entry.Attributes。[“orclnetdescstring”]
Seq.init value.Count(乐趣i->value.[i])
|>Seq.map(乐趣v->Some(v:?>字符串))
)

我希望有一个简单的调用,基本上可以“查询目录并返回结果”,但要读取真正的值,我似乎需要做很多“工作”。

一旦客户端连接到目录服务器,客户端就可以发出请求并读取响应。请求采用LDAP操作的形式,如绑定、搜索、添加、修改、删除等

当目录服务器接受连接时,该连接(或LDAP会话,如果您愿意)具有匿名标识()。根据目录服务器的配置和请求的类型,客户端可能需要将连接绑定到授权标识—这是通过绑定请求完成的,绑定请求可以是“简单”类型或SASL类型。与directory server管理员进行对话,以确定客户端是否必须将连接绑定到授权标识-管理员可能允许某些请求而不进行身份验证,但这通常是一种不好的做法,也不常见

搜索数据需要以下参数:

  • “搜索基础”或基础对象
  • “搜索范围”,仅为基础、基础对象下一级或基础对象下的整个子树
  • “搜索筛选器”,目录服务器使用它从候选项列表中选择匹配项以返回到客户端
  • 要返回的属性列表(客户端可以使用特殊属性“1.1”仅获取条目可分辨名称,这有助于确定条目是否存在)
还有其他可选参数,例如大小限制(要返回的条目数的限制)和时间限制(搜索所需时间的限制),是否仅返回属性,或属性和值,以及其他一些参数。一般来说,所有搜索请求都应该提供一个时间限制,以确保搜索超时,因为目录服务器可能没有为来自客户端的LDAP请求配置时间限制

目录服务器对搜索请求的响应将始终包含结果代码。如果搜索成功,此结果代码应为零(0),或者它可能是一个代码,指示可能已返回的条目数超过允许返回的条目数(允许返回的条目数由搜索请求中的大小限制或服务器限制限制限制),或者它可能是一个结果代码,指示发生了错误

假设错误代码为零,接下来是一系列SearchResultEntries或SearchResultReference,最后是一个SearchResultDone—一个好的API将为客户端管理这一部分,并简单地将返回的条目显示为数组或列表


最后,你的问题的答案是‘是的,在阅读条目之前还有一些事情要做’。一个好的API将把“东西”的数量减少到一个沉闷的咆哮

你能用你的语言、操作系统和使用的目录重新标记你的问题吗?我添加了一个.net标记,但我不知道使用的目录。我需要知道吗?我认为LDAP是一种标准