【问题标题】:Why am I getting a 0x8000500c error when enumerating a SearchResultCollection in .Net为什么在 .Net 中枚举 SearchResultCollection 时出现 0x8000500c 错误
【发布时间】:2012-05-20 20:56:57
【问题描述】:

我正在尝试枚举 SearchResultCollection 中的值。

一切编译正常,但我在这一行得到 0x8000500c 错误:

foreach (PropertyValueCollection e in de.Properties.Values)
{
    sw.WriteLine(e.Value);
}

完整方法如下:

private static void GetValues()
{
    var directoryEntry = new DirectoryEntry("LDAP://8.8.8.8:8888", "foo", "bar",
                                                       AuthenticationTypes.None);
    var ds = new DirectorySearcher(directoryEntry);
    var final = ds.FindAll();

    var sw = new StreamWriter(@"C:\z\FooBar.txt");

    var titlesDone = false;

    foreach (var de in from SearchResult x in final select x.GetDirectoryEntry())
    {
        if (!titlesDone)
        {
            foreach (string d in de.Properties.PropertyNames)
            {
                sw.WriteLine(d);
                titlesDone = true;
            }
        }


        foreach (PropertyValueCollection e in de.Properties.Values)
        {
            //I get the error on the below line
            sw.WriteLine(e.Value);
        }
    }

    sw.Flush();
    sw.Close();
}

你能帮我弄清楚为什么这不起作用吗?

谢谢

【问题讨论】:

  • 我会尝试用while 循环替换foreach 循环(有关转换,请参见here)。然后让我们知道调用e.MoveNext()或访问e.Current时是否发生异常。如果是后者,那么你很幸运!您可以吞下异常并继续。但是如果是前者,我不知道再次调用e.MoveNext()是否会让你跳过有问题的项目。

标签: .net directory enumeration


【解决方案1】:

AdsErr.h SDK 头文件中列出了 Active Directory 错误代码:

//
// MessageId: E_ADS_CANT_CONVERT_DATATYPE
//
// MessageText:
//
//  The directory datatype cannot be converted to/from a native DS datatype
//
#define E_ADS_CANT_CONVERT_DATATYPE      _HRESULT_TYPEDEF_(0x8000500CL)

所以问题出在网络的另一端,目录条目中有某种不寻常的自定义属性,它不知道如何转换为通用数据类型。与服务器管理员交谈以解决此问题,或者对您需要阅读的属性更有选择性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-29
    • 2023-03-27
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多