2012-04-24 10 views
23

Recibo los siguientes errores intermitentes relacionados con consultar AD usando DirectorySearcher.FindOne() o FindAll().System.DirectoryServices.DirectorySearcher que causa "Operación aritmética provocó un desbordamiento" de errores

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() 

Esto ocurre en una aplicación web y parece suceder después de que la aplicación ha estado funcionando durante varias horas.

Esto es documented issue en Microsoft Connect pero parece que ha sido marcado como "no reproducible" y cerrado.

La única solución que encontré here es reciclar el grupo de aplicaciones periódicamente, lo cual es una solución bastante dura y no viable cuando los usuarios están en pleno trabajo.

¿Alguien ha experimentado esto y, en caso afirmativo, cómo se resolvió esto?

He intentado usar el almacenamiento en caché, pero esto solo demora lo inevitable hasta alcanzar cierto umbral en cuanto al número de llamadas AD, ya que las personas han informado que cada vez que se realiza la llamada API leaks memory.

Cualquier ayuda sería muy apreciada.

+0

Tengo exactamente el mismo problema, y ​​he llegado a la misma conclusión de que Microsoft todavía tiene que reconocer esto y proporcionar una solución. El único otro tidbit que puedo proporcionar es la sugerencia de analizar su política de antigüedad de contraseña como se indica aquí: http://social.technet.microsoft.com/Forums/en-US/scoscip/thread/c8929889-9e7f-427f-bb89 -1464b2c68d49/ –

+1

El problema real en mi caso no estaba relacionado con AD tanto como un problema en el código de acceso a datos basado en biblioteca empresarial MS que causaba fugas de memoria que a su vez estaba causando problemas con la asignación de memoria en el código de búsqueda AD. –

+0

Eso es interesante, ya que no usamos la biblioteca empresarial para nada. Supongo que es posible que tengamos otra fuga de memoria y AD solo necesita esa cantidad de memoria. ¿Me puede decir si estaba usando IIS en modo de 64 o 32 bits? –

Respuesta

1

Cree una API AD y ejecútela en su propio grupo de aplicaciones. El reciclaje que cada pocas horas. Todo lo que la API manejará son llamadas a AD. parece que ya tiene el código, solo necesita pasar a API. He encontrado que una AD API es muy útil para muchos otros proyectos y sigo volviendo a ella como punto de referencia.

Cuestiones relacionadas