2012-04-24 61 views
23

Tôi nhận được các lỗi liên tục sau liên quan đến truy vấn AD bằng cách sử dụng DirectorySearcher.FindOne() hoặc FindAll().System.DirectoryServices.DirectorySearcher gây ra lỗi "Số học hoạt động dẫn đến tràn" lỗi

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

Điều này xảy ra trong ứng dụng web và dường như xảy ra sau khi ứng dụng chạy trong vài giờ.

Đây là một documented issue trên Microsoft Connect nhưng có vẻ như nó đã được đánh dấu là "không thể tái sản xuất" và đã đóng.

Sửa chữa duy nhất mà tôi tìm thấy here là tái chế nhóm ứng dụng định kỳ, đây là giải pháp thay thế khắc nghiệt và không thể thực hiện được khi người dùng của bạn đang làm việc.

Có ai đã trải nghiệm điều này và nếu có thì cách giải quyết này được giải quyết như thế nào?

Tôi đã cố gắng sử dụng bộ nhớ đệm nhưng điều này chỉ trì hoãn không thể tránh khỏi cho đến khi bạn đạt đến ngưỡng nhất định về số lượng lệnh gọi AD kể từ khi mọi người báo cáo rằng mỗi lần gọi API được thực hiện leaks memory.

Mọi trợ giúp sẽ được đánh giá cao.

+0

Tôi có chính xác cùng một vấn đề và đã đi đến cùng một kết luận rằng Microsoft chưa xác nhận điều này và cung cấp bản sửa lỗi. Tidbit khác duy nhất tôi có thể cung cấp là gợi ý để xem xét chính sách độ tuổi mật khẩu của bạn như đã nêu ở đây: http://social.technet.microsoft.com/Forums/en-US/scoscip/thread/c8929889-9e7f-427f-bb89 -1464b2c68d49/ –

+1

Vấn đề thực sự trong trường hợp của tôi không liên quan đến AD nhiều như một vấn đề trong mã truy cập dữ liệu dựa trên thư viện doanh nghiệp MS đã gây ra rò rỉ bộ nhớ, điều này đã gây ra các vấn đề về cấp phát bộ nhớ trong mã tra cứu AD. –

+0

Điều đó thật thú vị, vì chúng tôi không sử dụng thư viện doanh nghiệp cho bất cứ điều gì. Tôi đoán có thể chúng ta có một rò rỉ bộ nhớ khác và AD chỉ cần _that much_ memory? Bạn có thể cho tôi biết nếu bạn đang sử dụng IIS ở chế độ 64 hoặc 32 bit không? –

Trả lời

1

Tạo AD API và chạy nó trong hồ bơi ứng dụng riêng của nó. Tái chế cứ sau vài giờ. Tất cả các API sẽ xử lý là các cuộc gọi đến AD. có vẻ như bạn đã có mã, chỉ cần chuyển sang API. Tôi đã tìm thấy một API AD rất hữu ích cho nhiều dự án khác và tiếp tục quay lại nó như là điểm tham chiếu.

Các vấn đề liên quan