23

我收到以下与使用 DirectorySearcher.FindOne()或查询 AD 相关的间歇性错误FindAll()

System.OverflowException: Arithmetic operation resulted in an overflow.
     at System.DirectoryServices.SearchResultCollection.ResultsEnumerator.GetCurrentResult()
     at System.DirectoryServices.SearchResultCollection.ResultsEnumerator.get_Current()
     at System.DirectoryServices.SearchResultCollection.ResultsEnumerator.System.Collections.IEnumerator.get_Current()

这发生在网络应用程序中,并且似乎在应用程序运行几个小时后发生。

这是Microsoft Connect 上记录的问题,但看起来它已被标记为“不可重现”并已关闭。

我在这里找到的唯一解决方法是定期回收应用程序池,这是一种相当苛刻的解决方法,并且当您的用户正在工作时不可行。

有没有人经历过这种情况,如果有,这是如何解决的?

我曾尝试使用缓存,但这只会延迟不可避免的情况,直到您在 AD 调用数量方面达到某个阈值,因为人们报告说每次进行 API 调用时都会泄漏内存

任何帮助将非常感激。

4

1 回答 1

1

构建一个 AD API 并在它自己的应用程序池中运行它。每隔几个小时循环一次。所有 API 将处理对 AD 的调用。看起来你已经有了代码,只需要移动到 API。我发现 AD API 对于许多其他项目也非常有用,并且会继续将其作为参考点。

于 2015-07-16T18:05:04.883 回答