23 votes

System.DirectoryServices.DirectorySearcher provoque des erreurs de type "Arithmetic operation resulted in overflow" (opération arithmétique entraînant un dépassement de capacité).

J'obtiens les erreurs intermittentes suivantes liées à l'interrogation d'AD en utilisant DirectorySearcher.FindOne() ou 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()

Cela se produit dans une application Web et semble se produire après que l'application ait fonctionné pendant plusieurs heures.

Il s'agit d'un question documentée sur Microsoft Connect mais il semble qu'elle ait été marquée comme "non reproductible" et fermée.

La seule solution que j'ai trouvée aquí est de recycler périodiquement le pool d'applications, ce qui est une solution de rechange plutôt rude et non viable lorsque vos utilisateurs sont en train de travailler.

Quelqu'un a-t-il rencontré ce problème et, si oui, comment l'a-t-il résolu ?

J'ai essayé d'utiliser la mise en cache, mais cela ne fait que retarder l'inévitable jusqu'à ce que vous atteigniez un certain seuil en termes de nombre d'appels AD, car les gens ont signalé qu'à chaque fois que l'appel API est effectué, il y a un risque d'échec. fuites de mémoire .

Toute aide serait très appréciée.

1voto

Mothware Points 282

Créez une API AD et exécutez-la dans son propre pool d'applications. Elle sera recyclée toutes les quelques heures. L'API ne gérera que les appels à AD. Il semble que vous ayez déjà le code, il vous suffit de passer à l'API. J'ai constaté qu'une API AD était très utile pour de nombreux autres projets et j'y reviens toujours comme point de référence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X