Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Kivételek az SQL Serverhez való csatlakozáskor
A kapcsolat létesítése több okból is meghiúsulhat. Íme néhány hibaelhárítási tipp, amelyek útmutatóként használhatók számos probléma elemzéséhez és megoldásához.
Nem sikerült betölteni a natív SNI-könyvtárat (kiszolgálói hálózati interfész)
Problémák a .NET-keretrendszer-alkalmazásokban
Stacktrace megfigyelt:
TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception.
DllNotFoundException: Unable to load DLL 'Microsoft.Data.SqlClient.SNI.x64.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception.
DllNotFoundException: Unable to load DLL 'Microsoft.Data.SqlClient.SNI.x86.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
Az SNI a natív C++ kódtár, amelytől az SqlClient függ a Windows rendszeren futó különböző hálózati műveletekhez. Az MSBuild Project SDK-val létrehozott .NET-keretrendszer-alkalmazásokban a natív DLL-ek nem visszaállítási parancsokkal kezelhetők. A NuGet-csomag tehát tartalmaz .targets egy Microsoft.Data.SqlClient.SNI fájlt, amely meghatározza a szükséges másolási műveleteket.
A mellékelt .targets fájlra automatikusan hivatkoznak, amikor közvetlen függőséget hoznak létre a Microsoft.Data.SqlClient könyvtárra. Olyan esetekben, amikor tranzitív (közvetett) hivatkozás történik, ezt a .targets fájlt manuálisan kell hivatkozni, hogy a "Másolás" műveletek szükség esetén végrehajthatók legyenek.
Ajánlott megoldás: Győződjön meg arról, hogy a .targets fájlra hivatkozik az alkalmazás projektfájljában, hogy a "Másolás" műveletek végrehajtásra kerülnek-e. Ebben a kapcsolódó GitHub-problémában egy projektfájl szerkesztésére találhat példát.
Ezek a célok csak a Microsoft jól ismert és gyakran használt céljaira vonatkoznak. Ha egy külső eszköz vagy alkalmazás egyéni célokat határoz meg a bináris fájlok másolásához, az eszközfenntartóknak új célokat kell meghatározniuk, hogy a natív SNI-DLL-ek a bináris fájlok mellett Microsoft.Data.SqlClient.dll legyenek másolva, és elérhetők legyenek az ügyfélalkalmazások végrehajtásakor.
Problémák a .NET Core-alkalmazásokban
Stacktrace megfigyelt:
System.TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.TdsParser' threw an exception.
---> System.TypeInitializationException: The type initializer for 'Microsoft.Data.SqlClient.SNILoadHandle' threw an exception.
---> System.DllNotFoundException: Unable to load shared library 'Microsoft.Data.SqlClient.SNI.dll' or one of its dependencies.
Note
Ez a hiba csak Windows-alkalmazásokban fordulhat elő. Ha Unix-környezetben fordul elő, győződjön meg arról, hogy az alkalmazás a Megfelelő Unix-futtatókörnyezethez készült, és nem a Windowshoz.
Az SNI a natív C++ kódtár, amelytől az SqlClient függ a Windows rendszeren futó különböző hálózati műveletekhez.
Microsoft.Data.SqlClient nem kezeli a könyvtár betöltését/kioldását a .NET Core-ban.
Ajánlott megoldás: Győződjön meg arról, hogy a "Végrehajtási" engedélyek azon a fájlrendszeren vannak megadva, ahol a natív futtatókörnyezeti kódtárak betöltve vannak a .NET Core-folyamatban. Ha ez nem oldja meg a problémát, további támogatásért a dotnet/runtime adattárban is elküldheti a problémát.
Natív SNI-hibák (pdb nem található)
Stacktrace megfigyelt:
An assembly specified in the application dependencies manifest (sql2csv.deps.json) was not found:
package: 'Microsoft.Data.SqlClient.SNI.runtime', version: '2.0.0'
path: 'runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.pdb'
Ajánlott megoldás: Győződjön meg arról, hogy az ügyfélalkalmazás a Microsoft.Data.SqlClient csomag legalább 2.1.0-s verziójára hivatkozik. Az EF Core használatakor adjon hozzá egy hivatkozást erre a csomagverzióra Microsoft.Data.SqlClient közvetlenül a függőség felülbírálásához.
Állomásnévfeloldási hibák
Stacktrace megfigyelt:
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: TCP Provider, error: 0 - No such host is known.)
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: TCP Provider, error: 35 - An internal exception was caught)
Microsoft.Data.SqlClient.SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: TCP Provider, error: 35 - An internal exception was caught)
---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (00000005, 0xFFFDFFFF): Name does not resolve
Lehetséges okok
A TCP/Named Pipes Protocol nincs engedélyezve az SQL Serveren
Ajánlott megoldás: Engedélyezze a TCP/Named Pipes Protokollt az SQL Server-példányon az SQL Server Configuration Manager konzolján.
A gazdagép neve nem ismert
Ajánlott megoldás: Győződjön meg arról, hogy a gazdagépnév a kiszolgáló IP-címére fejtődjön fel az ügyfélnél, ahonnan a kapcsolatot kezdeményezik.
Bejelentkezési fázis hibái
Stacktraces megfigyelt:
Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake.
(provider: SSL Provider, error: 31 - Encryption(ssl/tls) handshake failed)
System.IO.EndOfStreamException: End of stream reached
A connection was successfully established with the server, but then an error occurred during the login process.
(provider: SSL Provider, error: 0 - The target principal name is incorrect.)
Microsoft.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired. The timeout period elapsed during the post-login phase. The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections.
The duration spent while attempting to connect to this server was - [Pre-Login] initialization=837; handshake=394; [Login] initialization=3; authentication=15; [Post-Login] complete=1027;
---> System.ComponentModel.Win32Exception (258): Unknown error 258
at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)
Lehetséges okok és megoldások
Az SQL Server nem támogatja a TLS 1.2-t
Ez a hiba általában olyan ügyfélkörnyezetekben fordul elő, mint a Docker-lemezképtárolók, a Unix-ügyfelek vagy a Windows-ügyfelek, ahol a TLS 1.2 a minimálisan támogatott TLS-protokoll.
Ajánlott megoldás: Telepítse a legújabb frissítéseket az SQL Server támogatott verzióira, és győződjön meg arról, hogy a TLS 1.2 protokoll engedélyezve van a kiszolgálón.
Note
Tekintse meg az SqlClient-illesztőprogram támogatási életciklusát, amely tartalmazza az SQL Server különböző verzióinak listáját
Microsoft.Data.SqlClient.Nem biztonságos megoldás: Konfigurálja a TLS/SSL-beállításokat a Docker-rendszerképben/ügyfélkörnyezetben a TLS 1.0-hoz való csatlakozáshoz.
MinProtocol = TLSv1 CipherString = DEFAULT@SECLEVEL=1Note
Ha a Windows/Linux környezetből a
Microsoft.Data.SqlClientv2.0+ verzióval csatlakozik TLS 1.0 vagy TLS 1.1 használata esetén, a rendszer biztonsági figyelmeztetést küld, ha a cél SQL Server és az ügyfél nem tudja tárgyalni a TLS 1.2-es verzió minimumát a kapcsolat létrehozásakor.Security Warning: The negotiated <TLS1.0 | TLS1.1> is an insecure protocol and is supported for backward compatibility only. The recommended protocol version is TLS 1.2 and later.AZ SQL Server kényszerített titkosítása
Ha a célkiszolgáló egy Azure SQL-példány vagy egy helyszíni SQL Server, amelyen be van kapcsolva a "Force Encryption" tulajdonság, titkosított kapcsolat jön létre, amelyhez az ügyfélnek megbízhatóságot kell létesítenie a kiszolgálóval.
Ajánlott megoldás: A probléma megoldására két lehetőség áll rendelkezésre:
- Telepítse a cél SQL Server TLS-tanúsítványát az ügyfélkörnyezetben. A rendszer ellenőrzi, hogy szükség van-e titkosításra.
- (Kevésbé biztonságos) Állítsa be a "TrustServerCertificate=true" tulajdonságot a kapcsolati sztringben.
Nem biztonságos megoldás: Tiltsa le a "Force Encryption" beállítást az SQL Serveren.
Az SHA-256-os vagy újabb verzióval nem aláírt TLS-tanúsítványok.
Ajánlott megoldás: Hozzon létre egy új TLS-tanúsítványt annak a kiszolgálónak, amelynek kivonata legalább az SHA-256 kivonatoló algoritmussal van aláírva.
Szigorúan korlátozott titkosítási csomagok Linuxon .NET 5+ verzióval
A .NET 5 kompatibilitástörő változást vezetett be a Linux-ügyfelek esetében, ahol alapértelmezés szerint szigorúan korlátozott számú engedélyezett titkosítási csomag van használatban. Előfordulhat, hogy ki kell bontania az alapértelmezett titkosítási csomaglistát az örökölt ügyfelek elfogadásához (vagy az örökölt kiszolgálókhoz való kapcsolódáshoz) egy
CipherSuitePolicyérték megadásával vagy az OpenSSL konfigurációs fájl módosításával.További információért a Linuxra vonatkozó alapértelmezett TLS-titkosítási csomagokról a .NET esetében olvassa el az ajánlott lépéseket a .
Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.) ---> System.ComponentModel.Win32Exception (0x80090325): The certificate chain was issued by an authority that is not trusted.AZ SQL Server kényszerített titkosítása
Ha a célkiszolgáló egy helyszíni SQL Server, amelyen be van kapcsolva a "Force Encryption" tulajdonság és egy önaláírt tanúsítvány, titkosított kapcsolat jön létre, amelyhez az ügyfélnek megbízhatóságot kell létesítenie a kiszolgálóval.
Ajánlott megoldás: A probléma megoldására két lehetőség áll rendelkezésre:
- Telepítse a cél SQL Server TLS-tanúsítványát az ügyfélkörnyezetben. A rendszer ellenőrzi, hogy szükség van-e titkosításra.
- (Kevésbé biztonságos) Állítsa be a "TrustServerCertificate=true" tulajdonságot a kapcsolati sztringben.
Nem biztonságos megoldás: Tiltsa le a "Force Encryption" beállítást az SQL Serveren.
A kapcsolatkészlet kimerülési hibái
A veremkövetés megfigyelésre került:
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.
This may have occurred because all pooled connections were in use and max pool size was reached.
Lehetséges okok és megoldások
Az ügyfélalkalmazás több kapcsolatot nyit meg, mint amennyit a kapcsolatkészlet egy adott időpontban aktívként tárolhat.
Ajánlott megoldás: Konfigurálja a "Maximális készletméret" kapcsolati tulajdonságot magasabb értékre, és időben zárja be a nem használt kapcsolatokat.
Lépjen kapcsolatba a támogatási szolgálattal.
Ha ez az útmutató nem oldja meg a csatlakozási problémákat, megtekintheti a dotnet/sqlclient-adattárban meglévő problémákat, és szükség esetén megnyithat egy új problémát.