Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Khắc phục: Lỗi hết thời gian khi kết nối bộ máy cơ sở dữ liệu nhân tạo nhà cung cấp dữ liệu của Khuôn khổ .NET cho hồ

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch thuật của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa lại thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung cấp các bài viết được cả biên dịch viên và phần mềm dịch thuật thực hiện và cộng đồng chỉnh sửa lại để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng nhiều ngôn ngữ Tuy nhiên, bài viết do máy dịch hoặc thậm chí cộng đồng chỉnh sửa sau không phải lúc nào cũng hoàn hảo. Các bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này: 2605597
Triệu chứng
Khi một ứng dụng sử dụng Microsoft Khuôn khổ .NET 3.5 hoặc nhà cung cấp dữ liệu Microsoft Khuôn khổ .NET 4 cho Microsoft SQL Server (hồ) để kết nối với bộ máy cơ sở dữ liệu nhân, bạn có thể nhận được thông báo lỗi sau:
Đã hết thời gian chờ. Thời gian chờ trôi qua trước khi hoàn thành các hoạt động hoặc máy chủ không đáp ứng.
tại System.Data.SqlClient.SqlInternalConnection.OnError (ngoại trừ SqlException, Boolean breakConnection)
tại System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
tại System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject stateObj, UInt32 lỗi)
tại System.Data.SqlClient.TdsParserStateObject.ReadSni (DbAsyncResult asyncResult, TdsParserStateObject stateObj)
tại System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
tại System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake (Boolean mã hóa, Boolean trustServerCert, Boolean & marsCapable)
tại System.Data.SqlClient.TdsParser.Connect (ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean mã hóa, Boolean trustServerCert, Boolean integratedSecurity)
tại System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin (ServerInfo serverInfo chuỗi newPassword, Boolean ignoreSniOpenTimeout, thời gian chờ TimeoutTimer, SqlConnection owningObject)
tại System.Data.SqlClient.SqlInternalConnectionTds.LoginWithFailover (Boolean useFailoverHost ServerInfo primaryServerInfo, Chuỗi failoverHost, Chuỗi newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, thời gian chờ TimeoutTimer)
Lưu ý: Nếu thuộc tính ConnectionTimeout được đặt thành giá trị mặc định của 15 phút, bạn có thể nhận được thông báo lỗi sau khi kết nối mở 1.2 giây.
Nguyên nhân
Sự cố này xảy ra vì một lỗi trong thuật toán thử kết nối bộ máy cơ sở dữ liệu nhân.

Thuật toán thử dùng nhà cung cấp dữ liệu chờ cuộc gọi đầu đọc (SniReadSync) để hoàn tất. Cuộc gọi được gửi tới nền máy tính đang chạy SQL Server và thời gian chờ được tính bằng cách nhân giá trị thời gian chờ kết nối 0,08. Tuy nhiên, các nhà cung cấp dữ liệu không đúng bộ kết nối trạm đậu tiêu trả lời là chậm và nếu cuộc gọi SniReadSync đầu không được hoàn thành trước khi hết thời gian chờ đợi.

Lưu ý: Phản ứng chậm trong trường hợp này có thể được kích hoạt bằng máy chủ hoặc độ trễ mạng.
Giải pháp
Vấn đề này được giải quyết trong Khuôn khổ .NET 4.5.2. Thêm vào Khuôn khổ .NET 4.5.2, không có hotfix dành cho các phiên bản Khuôn khổ .NET như đã nêu trong phần sau.

Thông tin về cập nhật nóng

Cập nhật nóng được hỗ trợ do Microsoft cung cấp. Tuy nhiên, cập nhật nóng này chỉ được dùng để khắc phục sự cố được mô tả trong bài viết này. Chỉ áp dụng cập nhật nóng này cho hệ thống đang gặp sự cố được mô tả trong bài viết này. Cập nhật nóng này có thể được kiểm tra thêm. Vì vậy, nếu bạn không bị ảnh hưởng nghiêm trọng bởi sự cố này, chúng tôi khuyên bạn đợi bản cập nhật phần mềm tiếp theo có chứa cập nhật nóng này.

Nếu cập nhật nóng này sẵn có để tải xuống thì sẽ có phần "Cập nhật nóng có sẵn để tải xuống" ở đầu bài viết Cơ sở Kiến thức này. Nếu phần này không xuất hiện, hãy liên hệ với bản ghi dịch vụ Khách hàng và Bộ phận Hỗ trợ của Microsoft để nhận được các cập nhật nóng.

Lưu ý: Nếu sự cố khác xảy ra hoặc nếu cần khắc phục sự cố, bạn có thể phải tạo một yêu cầu bản ghi dịch vụ riêng. Chi phí hỗ trợ thông thường sẽ tính cho các câu hỏi hỗ trợ bổ sung và các sự cố không phù hợp với cập nhật nóng cụ thể này. Để có danh sách đầy đủ số điện thoại của Bộ phận Hỗ trợ và bản ghi dịch vụ Khách hàng của Microsoft hoặc để tạo yêu cầu bản ghi dịch vụ riêng, hãy truy cập website sau của Microsoft: Lưu ý: Mẫu "Tải xuống cập nhật nóng sẵn có" hiển thị các ngôn ngữ mà cập nhật nóng này sẵn có. Nếu bạn không thấy ngôn ngữ của mình thì đó là do cập nhật nóng này hiện không có ngôn ngữ đó.

Điều kiện tiên quyết

Có hai hotixes cho vấn đề này. Một hotfix áp dụng cho Khuôn khổ .NET 3.5.1 và một hotfix áp dụng cho Khuôn khổ .NET 4.0. Để áp dụng hotfix cho Microsoft Khuôn khổ .NET 3.5.1, bạn phải có Khuôn khổ .NET 3.5.1 trên máy tính đang chạy một hệ điều hành sau:
  • Gói bản ghi dịch vụ 1 (SP1) của Windows 7
  • Windows Server 2008 R2 gói bản ghi dịch vụ 1 (SP1)
Lưu ý: Tính năng của Khuôn khổ .NET 3.5.1 có Microsoft Khuôn khổ .NET 2.0 Service Pack 2 (SP2).

Yêu cầu khởi động lại

Bạn không phải khởi động lại máy tính sau khi bạn áp dụng hotfix này.

Thông tin thay thế cập nhật nóng

Cập nhật nóng này không thay thế cập nhật nóng được phát hành trước đó.

Thông tin về tệp

Phiên bản toàn cầu của hotfix này có các thuộc tính tệp (hoặc thuộc tính tệp mới hơn) được liệt kê trong bảng sau. Ngày và giờ của các tệp này được liệt kê theo Giờ Quốc tế Phối hợp (UTC). Khi bạn xem thông tin về tệp, ngày và giờ được chuyển đổi thành giờ địa phương. Để tìm sự khác nhau giữa UTC và giờ địa phương, sử dụng tab múi thời gian trong mục Ngày và Giờ trong Pa-nen điều khiển.

Thông tin về tệp cho NET Framework 3.5.1

Đối với tất cả phiên bản dựa trên x86 được hỗ trợ của Windows 7
Tên tệpPhiên bản tệpKích thước tệpNgàyGiờNền tảng
System.Data.dll2.0.50727.56972,927,61630 tháng năm 201122:34x86
Cho tất cả các hỗ trợ x64 dựa trên phiên bản của Windows 7 và Windows Server 2008 R2
Tên tệpPhiên bản tệpKích thước tệpNgàyGiờNền tảng
System.Data.dll2.0.50727.56973,095,55230 tháng năm 201122:28x64
Đối với tất cả các hỗ trợ IA-64 – dựa trên các phiên bản của Windows Server 2008 R2
Tên tệpPhiên bản tệpKích thước tệpNgàyGiờNền tảng
System.Data.dll2.0.50727.56973,234,81630 tháng năm 201122:21IA-64

Tệp thông tin cho NET Framework 4.0

Đối với tất cả phiên bản dựa trên x86 được hỗ trợ của Windows 7
Tên tệpPhiên bản tệpKích thước tệpNgàyGiờNền tảng
System.Data.dll4.0.30319.5453,027,72816 tháng 12 năm 201107:59x86
Cho tất cả các hỗ trợ x64 dựa trên phiên bản của Windows 7 và Windows Server 2008 R2
Tên tệpPhiên bản tệpKích thước tệpNgàyGiờNền tảng
System.Data.dll4.0.30319.5453,174,16016 tháng 12 năm 201108:37x64
Cho tất cả các hỗ trợ IA-64 – dựa trên các phiên bản của Windows Server 2008 R2
Tên tệpPhiên bản tệpKích thước tệpNgàyGiờNền tảng
System.Data.dll4.0.30319.5453,366,16016 tháng 12 năm 201109:16IA-64
Lưu ý: Vấn đề này được giải quyết trong Microsoft Khuôn khổ .NET 4.5.2. Do đó, nhà cung cấp dữ liệu của Khuôn khổ .NET 4, nâng cấp Khuôn khổ .NET 4 vào Khuôn khổ .NET 4.5.2 là một giải pháp.
Cách giải quyết khác
Để khắc phục sự cố này, sử dụng một trong các phương pháp sau:
  • Đặt chuỗi kết nối thời gian chờ là 150 tương đương với khoảng thời gian là 150 giây. Khi bạn thực hiện việc này, các nhà cung cấp dữ liệu chờ 12 giờ để kết thúc gọi đầu đọc. (Sự cố xảy ra nếu cuộc gọi kết thúc trong 12 giây.)
  • Thêm các Min nhóm kích thước = 20 đặt chuỗi kết nối. Sau khi bạn thêm thiết đặt này, các nhà cung cấp dữ liệu duy trì kết nối ít nhất 20 nhóm kết nối dữ liệu ứng dụng. Do đó, nhiều cơ hội được cung cấp để tái sử dụng kết nối hiện có thay vì mở kết nối mới. Và khi sử dụng kết nối hiện có, bạn không nhận được thông báo lỗi được đề cập trong phần "Triệu chứng".

    Lưu ý giá trị mặc định lượng nhóm tối thiểu là 0.
Thông tin thêm
Ảnh chụp màn hình sau đây sẽ hiển thị một mạng thu thập giữa các ứng dụng và SQL Server lúc sự cố xảy ra trong trường hợp kiểm tra:



Trong ví dụ này, chúng tôi có thể thấy rằng máy phục vụ ứng dụng đóng kết nối (khung 670 AF gói) khoảng một chút vào giai đoạn ban đầu nối (TDS:Prelogin). Khi SQL Server đáp ứng năm giây, này là trễ và khách hàng lại kết nối. Như giải thích trong phần "Nguyên nhân", thời gian chờ kết nối nằm 15 phút (giá trị mặc định), thời gian chờ kết nối thực tế được tính bằng thuật toán thử kết nối để phản ánh là bằng 1.2 giây (. 08 * 15).

Dưới đây là một Theo dõi giá đã bị từ kiểm tra máy chủ ứng dụng:

<prov.DbConnectionHelper.ConnectionString_Set|API> 1#, 'Data Source=MySQLServer;Failover Partner=MySQLServer2; Initial Catalog= TestMirror;Integrated Security=SSPI;Connection Timeout=15'enter_02 <SNIReadSync|API|SNI> 2#{SNI_Conn}, pConn: 007D9EA8{SNI_Conn*}, ppNewPacket: 0671E268{SNI_Packet**}, timeout: 1134enter_03 <Np::ReadSync|API|SNI> 3#, ppNewPacket: 0671E268{SNI_Packet**}, iTimeOut: 1134<SNI_Packet::SNIPacketAllocateEx2|API|SNI> pConn: 007D9EA8{SNI_Conn*}, IOType: 0, consumer: 0<SNI_Packet::SNIPacketNew|API|SNI> pConn: 007D9EA8{SNI_Conn*}, IOType: 0ObtainIDa 5# <SNI_Packet::SNI_Packet|ID|SNI> 0624EEF0{.}<SNI_Packet::SNI_Packet|SNI> 5#{SNI_Packet} created by 2#{SNI_Conn}<SNI_Packet::SNIPacketNew|RET|SNI> 0624EEF0{SNI_Packet*}<SNI_Packet::SNIPacketAllocateEx2|RET|SNI> 0624EEF0{SNI_Packet*}<Np::ReadSync|ERR|SNI> ProviderNum: 4{ProviderNum}, SNIError: 11{SNIError}, NativeError: 258{WINERR}<Np::ReadSync|RET|SNI> 258{WINERR}leave_03<SNIReadSync|RET|SNI> 258{WINERR}, Packet: 00000000leave_02<sc.SqlError.SqlError|ERR> infoNumber=-2, errorState=0, errorClass=11, errorMessage='Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.', procedure='', lineNumber=0<sc.SqlInternalConnectionTds.BreakConnection|RES|CPOOL> 4#, Breaking connection.<prov.DbConnectionInternal.|RES|INFO|CPOOL> 4#, Dooming<sc.SqlInternalConnectionTds.LoginFailure|RES|CPOOL> 4# DoomThisConnection|RES|INFO|CPOOL> 4#, Dooming<sc.SqlInternalConnectionTds.LoginFailure|RES|CPOOL> 4#
Tương tự, khi bạn kiểm tra kết nối vòng đệm cho giờ kí nhập trên máy chủ SQL, bạn nhận thấy rằng quá trình kí nhập đã hết thời gian trong một khoảng thời gian ngắn mili giây.

Để có được vòng đệm ra khỏi Management Studio, chạy truy vấn sau đây:

SELECT CAST(record AS XML) FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_CONNECTIVITY'

Tham khảo
Để biết thêm thông tin về nhà SqlConnection.ConnectionTimeout , ghé thăm website sau của MSDN:Để biết thêm thông tin về thuật toán thử kết nối kết nối, hãy ghé thăm website sau của MSDN:Để biết thêm thông tin về tên System.Data.SqlClient , ghé thăm website sau của MSDN:Để biết thêm chi tiết về bộ máy cơ sở dữ liệu phản ánh, hãy ghé thăm website sau của MSDN:

Ánh xạ; SQL Server;. Nhà cung cấp mạng hồ


Tình trạng
Microsoft đã xác nhận rằng đây là sự cố trong sản phẩm của Microsoft được liệt kê trong phần "Áp dụng cho".

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 2605597 - Xem lại Lần cuối: 07/03/2016 22:55:00 - Bản sửa đổi: 9.0

Microsoft .NET Framework 3.5 Service Pack 1, Microsoft .NET Framework 4.0, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Enterprise Evaluation, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Standard Edition

  • kbqfe kbhotfixserver kbfix kbexpertiseadvanced kbsurveynew kbmt KB2605597 KbMtvi
Phản hồi
>