Tôi đang sử dụng Transaction Binding=Explicit Unbind
trong chuỗi kết nối như được đề xuất here vì tôi cũng đang sử dụng TransactionScope với thời gian chờ. Vấn đề là các kết nối dường như không đóng sau khi được xử lý và cuối cùng không có kết nối nào có sẵn trong nhóm kết nối. Tôi đã nhận được kết quả tương tự khi tôi sửa đổi TransactionTimeoutIssueDemo (xem liên kết) và chạy TransactionScopeTest() (với chuỗi kết nối unbind rõ ràng) đủ thời gian trong một vòng lặp để sử dụng hết tất cả các kết nối có sẵn trong nhóm kết nối. Giá trị mặc định cho các kết nối trong nhóm là 100 nhưng điều này có thể được thay đổi bằng cách sử dụng thiết lập Max Pool Size =10
chẳng hạn. Dường như các kết nối sẽ không được giải phóng khi sử dụng unbind rõ ràng mặc dù cả SqlConnection và TransactionScope được sử dụng với mệnh đề using
. Bất cứ ai biết làm thế nào để xử lý này?Kết nối sẽ không đóng khi sử dụng Giao dịch ràng buộc = Không rõ ràng; trong chuỗi kết nối
5
A
Trả lời
3
Các kết nối chỉ dường như ở lại trong hồ bơi và không được sử dụng lại trong trường hợp bạn nhận được ngoại lệ, giống như ví dụ. Nếu bạn tăng thời gian chờ, kết nối sẽ được sử dụng lại.
Một cách giải quyết cho vấn đề này là để xóa các hồ bơi kết nối trong trường hợp bạn có được một ngoại lệ như thế này:
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
try
{
Console.WriteLine("Server is {0}", con.ServerVersion);
Console.WriteLine("Clr is {0}", Environment.Version);
for (int i = 0; i < 5; i++)
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "insert into TXTEST values (" + i + ")";
cmd.ExecuteNonQuery();
}
Console.WriteLine("Row inserted");
}
Thread.Sleep(TimeSpan.FromSeconds(1));
}
catch
{
SqlConnection.ClearPool(con);
throw;
}
}
Trong hầu hết các trường hợp, các giao dịch sẽ hoàn thành trong thời gian chờ và mọi thứ sẽ ổn thôi và dandy. Khi giao dịch thực sự làm thời gian chờ bạn xóa hồ bơi để làm sạch các kết nối bẩn sẽ không được sử dụng lại. Điều này tất nhiên sẽ ảnh hưởng đến các kết nối khác trong hồ bơi mà không bị ảnh hưởng bởi vấn đề này.
Đây là giải pháp xấu nhưng có vẻ như hoạt động.
0
Đối với những gì đáng giá, sự cố này đã được khắc phục trong .Net 4.0.
Các vấn đề liên quan
- 1. Trình quản lý giao dịch Spring có ràng buộc kết nối với một luồng không?
- 2. Cách đóng kết nối Sqlite mà không gọi rõ ràng phương thức đóng bằng cách sử dụng .NET
- 3. Kết nối Doctrine 2 không có ràng buộc khóa ngoài
- 4. ResultSet không đóng khi kết nối đóng?
- 5. Lỗi khi sử dụng dịch vụ web: Kết nối hiện tại đã bị buộc đóng
- 6. Đóng kết nối cơ bản của DataSet một cách rõ ràng?
- 7. ODP.net có đóng con trỏ khi kết nối đóng không?
- 8. Ràng buộc và kết nối một dịch vụ android bên ngoài hoạt động
- 9. Chuỗi kết nối C# khi biên dịch
- 10. "Các ràng buộc để thực hiện giao diện rõ ràng ..."
- 11. Buộc giao thức TCP/IP trong chuỗi kết nối
- 12. Có cần khôi phục giao dịch rõ ràng không?
- 13. boost :: asio - Làm rõ ràng ràng buộc với một giao diện mạng cụ thể
- 14. SqlCommand.Dispose có đóng kết nối không?
- 15. Ngoại lệ NHibernate: Giao dịch không được kết nối hoặc bị ngắt kết nối
- 16. Grails & HibernateException: proxy kết nối không thể sử dụng được sau khi hoàn tất giao dịch
- 17. javascript WebSockets - kiểm soát kết nối ban đầu/khi nào OnOpen bị ràng buộc
- 18. Python-mysql: khi rollback một cách rõ ràng giao dịch
- 19. Java HttpURLConnection không kết nối khi tôi gọi kết nối()
- 20. Kết nối đóng PDO
- 21. psycopg2 với bình, khi đóng kết nối
- 22. Cảnh báo kết nối ActiveRecord. (Kết nối cơ sở dữ liệu sẽ không tự động bị đóng)
- 23. Vứt bỏ kết nối hoặc Đóng kết nối
- 24. Kết nối vẫn không hoạt động sau khi đóng
- 25. Để đóng hay không đóng một kết nối Oracle?
- 26. dojo.connect sẽ không kết nối 'onclick' với nút
- 27. Node.js MongoDB đóng kết nối
- 28. Điều gì sẽ xảy ra khi kết nối với MongoDB không bị đóng?
- 29. Khung thực thể đa luồng: Kết nối không được đóng. Trạng thái hiện tại của kết nối đang kết nối
- 30. Đóng kết nối RabbitMQ ngay cả khi ứng dụng không kết thúc một cách duyên dáng