.net 使用LDAP内容同步控制/同步请求控制时出现问题
我正在尝试使用.net System.DirectoryServices.Protocols库,使用Ldap内容同步控件()与ApacheDS Ldap服务器同步,以便只返回自上次同步以来的更改 我的第一个没有cookie值的搜索请求可以正常工作,我可以从搜索响应中获得cookie值。但是,当我发出后续搜索请求并尝试传递上一个同步cookie时,在尝试发送请求时,会出现服务器不可用异常 下面是我正在使用的一些代码片段:.net 使用LDAP内容同步控制/同步请求控制时出现问题,.net,apacheds,.net,Apacheds,我正在尝试使用.net System.DirectoryServices.Protocols库,使用Ldap内容同步控件()与ApacheDS Ldap服务器同步,以便只返回自上次同步以来的更改 我的第一个没有cookie值的搜索请求可以正常工作,我可以从搜索响应中获得cookie值。但是,当我发出后续搜索请求并尝试传递上一个同步cookie时,在尝试发送请求时,会出现服务器不可用异常 下面是我正在使用的一些代码片段: static void Main(string[] args) {
static void Main(string[] args)
{
//LdapConnection, binding, etc removed for brevity
string contentSynchronizationControlOID = "1.3.6.1.4.1.4203.1.9.1.1";
string syncDoneControlOID = "1.3.6.1.4.1.4203.1.9.1.3";
byte[] value = GetSyncControlValue();
DirectoryControl syncRequestControl = new DirectoryControl(contentSynchronizationControlOID, value, true, true);
syncRequest.Controls.Add(syncRequestControl);
SearchResponse syncResponse = (SearchResponse)connection.SendRequest(syncRequest);
foreach (var responseControl in syncResponse.Controls)
{
if (responseControl.Type == syncDoneControlOID)
{
SaveSyncControlCookie(responseControl.GetValue());
}
}
}
private static byte[] GetSyncControlValue()
{
byte[] value = null;
try
{
value = File.ReadAllBytes("cookie.bin");
}
catch { }
if (value == null)
{
return value;
}
else
{
object[] controlParts = new object[] { 1, value, false };
value = BerConverter.Encode("{iob}", controlParts);
}
return value;
}
private static void SaveSyncControlCookie(byte[] value)
{
byte[] result = null;
object[] controlParts = BerConverter.Decode("{B}", value);
result = (byte[])controlParts[0];
if (result != null)
{
File.WriteAllBytes("cookie.bin", result);
}
}
我尝试了BerConverter编码/解码方法的不同格式,但在其他组合中没有成功。我的问题是使用BerConverter.Encode创建同步控制值时的格式字符串,该值随搜索请求发送到ldap服务器 将它从{iob}切换到{eob}解决了这个问题。我的猜测是,“i”用于表示常规整数值,而“e”应该在int值是枚举值时使用?不太确定,但它现在对我有效=]