.net 使用LDAP内容同步控制/同步请求控制时出现问题

.net 使用LDAP内容同步控制/同步请求控制时出现问题,.net,apacheds,.net,Apacheds,我正在尝试使用.net System.DirectoryServices.Protocols库,使用Ldap内容同步控件()与ApacheDS Ldap服务器同步,以便只返回自上次同步以来的更改 我的第一个没有cookie值的搜索请求可以正常工作,我可以从搜索响应中获得cookie值。但是,当我发出后续搜索请求并尝试传递上一个同步cookie时,在尝试发送请求时,会出现服务器不可用异常 下面是我正在使用的一些代码片段: static void Main(string[] args) {

我正在尝试使用.net System.DirectoryServices.Protocols库,使用Ldap内容同步控件()与ApacheDS Ldap服务器同步,以便只返回自上次同步以来的更改

我的第一个没有cookie值的搜索请求可以正常工作,我可以从搜索响应中获得cookie值。但是,当我发出后续搜索请求并尝试传递上一个同步cookie时,在尝试发送请求时,会出现服务器不可用异常

下面是我正在使用的一些代码片段:

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值是枚举值时使用?不太确定,但它现在对我有效=]