我遇到了与使用查询AD相关的以下间歇性错误
DirectorySearcher.FindOne()
或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上的documented issue,但它看起来已被标记为“不可重现”并已关闭。
我发现here唯一的解决方法是定期回收应用池,这是一个相当苛刻的解决方法,当用户处于工作中时不可行。
有没有人经历过这个,如果有,这是如何解决的?
我曾尝试使用缓存,但这只会延迟不可避免的事情,直到您达到AD调用次数的某个阈值,因为人们已经报告每次API调用leaks memory时。
非常感谢任何帮助。
答案 0 :(得分:1)
构建AD API并在其自己的应用程序池中运行它。每隔几个小时回收一次。所有API都将处理对AD的调用。看起来你已经有了代码,只需要转移到API。我发现AD API对许多其他项目非常有用,并继续作为参考点。