Tôi có thể tăng thời gian chờ bằng cách sửa đổi chuỗi kết nối trong web.config
?
Tôi có thể tăng thời gian chờ bằng cách sửa đổi chuỗi kết nối trong web.config
?
Câu trả lời:
Có, bạn có thể thêm ;Connection Timeout=30
vào chuỗi kết nối của mình và chỉ định giá trị bạn muốn.
Giá trị thời gian chờ được đặt trong thuộc Connection Timeout
tính là thời gian được biểu thị bằng giây . Nếu thuộc tính này không được đặt, giá trị thời gian chờ cho kết nối là giá trị mặc định (15 giây).
Hơn nữa, đặt giá trị thời gian chờ thành 0
, bạn đang chỉ định rằng nỗ lực kết nối của bạn sẽ chờ một khoảng thời gian vô hạn. Như được mô tả trong tài liệu, đây là điều bạn không nên đặt trong chuỗi kết nối của mình:
Giá trị 0 cho biết không có giới hạn và nên tránh trong Chuỗi kết nối vì nỗ lực kết nối chờ vô thời hạn.
Hừm ...
Như Darin đã nói, bạn có thể chỉ định giá trị thời gian chờ kết nối cao hơn, nhưng tôi nghi ngờ đó thực sự là vấn đề.
Khi bạn gặp sự cố hết thời gian kết nối, đó thường là sự cố với một trong những điều sau:
Cấu hình mạng - kết nối chậm giữa máy chủ web / hộp phát triển của bạn và máy chủ SQL. Việc tăng thời gian chờ có thể khắc phục điều này, nhưng sẽ khôn ngoan hơn nếu bạn điều tra vấn đề cơ bản.
Chuỗi kết nối. Tôi đã gặp sự cố trong đó tên người dùng / mật khẩu không chính xác, vì một số lý do, sẽ xuất hiện lỗi hết thời gian chờ thay vì lỗi thực cho biết "quyền truy cập bị từ chối". Điều này không nên xảy ra, nhưng đó là cuộc sống.
Chuỗi kết nối 2: Nếu bạn chỉ định tên của máy chủ không chính xác hoặc không đầy đủ (ví dụ: mysqlserver
thay vì mysqlserver.webdomain.com
), bạn sẽ gặp phải tình trạng hết thời gian chờ. Bạn có thể ping máy chủ bằng cách sử dụng tên máy chủ chính xác như được chỉ định trong chuỗi kết nối từ dòng lệnh không?
Chuỗi kết nối 3: Nếu tên máy chủ có trong DNS của bạn (hoặc tệp máy chủ), nhưng trỏ đến một IP không chính xác hoặc không thể truy cập được, bạn sẽ gặp phải lỗi hết thời gian chờ thay vì lỗi máy không tìm thấy.
Truy vấn bạn đang gọi đã hết thời gian chờ. Có thể có vẻ như kết nối với máy chủ là vấn đề, tuy nhiên, tùy thuộc vào cách ứng dụng của bạn được cấu trúc, bạn có thể chuyển nó đến giai đoạn mà truy vấn của bạn đang thực thi trước khi thời gian chờ xảy ra.
Rò rỉ kết nối. Có bao nhiêu quy trình đang chạy? Có bao nhiêu kết nối mở? Tôi không chắc liệu ADO.NET thô có thực hiện gộp kết nối, tự động đóng các kết nối khi cần thiết với Thư viện doanh nghiệp hay nơi tất cả những gì được định cấu hình. Đây có lẽ là một con cá trích đỏ. Tuy nhiên, khi làm việc với WCF và các dịch vụ web, tôi đã gặp vấn đề với các kết nối chưa được đóng kín gây ra thời gian chờ và các hành vi không thể đoán trước khác.
Những điều nên thử:
Bạn có bị hết thời gian chờ khi kết nối với máy chủ bằng SQL Management Studio không? Nếu vậy, cấu hình mạng có thể là vấn đề. Nếu bạn không thấy sự cố khi kết nối với Management Studio, thì sự cố sẽ nằm ở ứng dụng của bạn, không phải ở máy chủ.
Chạy SQL Profiler và xem những gì thực sự đang diễn ra trên dây. Bạn sẽ có thể biết liệu bạn đang thực sự kết nối hay một truy vấn là vấn đề.
Chạy truy vấn của bạn trong Management Studio và xem mất bao lâu.
Chúc may mắn!
Nếu bạn muốn thay đổi động nó, tôi thích sử dụng SqlConnectionStringBuilder .
Nó cho phép bạn chuyển đổi ConnectionString tức là một chuỗi thành Đối tượng lớp, Tất cả các thuộc tính của chuỗi kết nối sẽ trở thành Thành viên của nó.
Trong trường hợp này, lợi thế thực sự sẽ là bạn không phải lo lắng về việc Nếu phần chuỗi ConnectionTimeout đã tồn tại trong chuỗi kết nối hay chưa?
Cũng vì nó tạo ra một Đối tượng và nó luôn tốt để gán giá trị trong đối tượng hơn là thao tác chuỗi.
Đây là mẫu mã:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);
ConnectionTimeout
tính ở SqlConnection
loại chỉ đọc được cho là một ý tưởng hay.