Aplikasi ADO.Net terkadang hanya dapat terhubung ke server lain di jaringan lokal. Tampaknya acak apakah upaya koneksi tertentu berhasil atau gagal. Koneksi menggunakan koneksi string berupa:
Server = THESERVER \ TheInstance; Database = TheDatabase; User Id = TheUser; Kata Sandi = Kata Sandi;
kesalahan yang dikembalikan adalah:
Connection Timeout Expired. Periode waktu tunggu berlalu saat mencoba menggunakan pengakuan jabat tangan pra-login.
Ini bisa jadi karena handshake pra-login gagal atau server tidak dapat merespons tepat waktu.
Durasi yang dihabiskan ketika mencoba untuk terhubung ke server ini adalah - [Pre-Login] inisialisasi = 42030; jabat tangan = 0;
Aplikasi .NET adalah aplikasi uji kecil yang menjalankan kode berikut:
using (SqlConnection conn = new SqlConnection(cs))
using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM TheTable", conn))
{
conn.Open();
int rowCount = (int)cmd.ExecuteScalar();
}
Tabel kecil, hanya 78 baris.
Namun, pada mesin yang sama di mana aplikasi .NET menerima kesalahan ini, saya dapat menyambung ke THESERVER menggunakan SSMS dan ID Pengguna / Kata Sandi yang disebutkan dalam string sambungan.
Mengapa koneksi gagal dari aplikasi ADO.Net, tetapi berhasil dengan kredensial identik dari SSMS?
sumber
Jawaban:
Ternyata TCP / IP diaktifkan untuk alamat IPv4, tetapi tidak untuk alamat IPv6, dari
THESERVER
.Rupanya beberapa upaya koneksi akhirnya menggunakan IPv4 dan yang lainnya menggunakan IPv6.
Mengaktifkan TCP / IP untuk kedua versi IP menyelesaikan masalah.
Fakta bahwa SSMS bekerja ternyata kebetulan (beberapa upaya pertama mungkin menggunakan IPv4). Beberapa upaya selanjutnya untuk menyambung melalui SSMS menghasilkan pesan kesalahan yang sama.
Untuk mengaktifkan TCP / IP untuk alamat IP tambahan:
sumber
Saya telah mengalami kesalahan yang sama yang baru saja muncul yang mencurigakan dengan putaran terbaru pembaruan Microsoft (09/02/2016). Saya menemukan bahwa SSMS terhubung tanpa masalah saat aplikasi ASP.NET saya mengembalikan "periode batas waktu berlalu ketika mencoba untuk menggunakan kesalahan pengakuan jabat tangan pra-masuk"
Solusi bagi saya adalah menambahkan batas waktu koneksi 30 detik ke dalam string koneksi, misalnya:
Dalam situasi saya, satu-satunya koneksi yang terpengaruh adalah koneksi yang menggunakan Keamanan terintegrasi dan saya meniru identitas pengguna sebelum terhubung, koneksi lain ke server yang sama menggunakan Otentikasi SQL berfungsi dengan baik!
2 sistem pengujian (klien terpisah dan server Sql) terpengaruh pada saat yang sama membuat saya mencurigai pembaruan microsoft!
sumber
Saya memecahkan masalah seperti Eric tetapi dengan beberapa perubahan lain:
DAN
sumber
Saya mengalami masalah yang sama, mencoba menyambung ke server di jaringan lokal (melalui VPN) dari Visual Studio, saat menyiapkan Model Data Entitas.
Berhasil menyelesaikan hanya dengan mengatur
TransparentNetworkIPResolution=false
di string koneksi. Di VS Add Connection Wizard, Anda dapat menemukannya di tab Advanced.sumber
Saya memiliki masalah jabat tangan yang sama saat koneksi ke server yang dihosting.
Saya membuka pusat jaringan dan berbagi saya dan mengaktifkan IPv6 pada koneksi jaringan nirkabel saya.
sumber
Eksekusi saya yang dibangun menggunakan .NET Framework 3.5 mulai melaporkan masalah koneksi ini di sekitar setengah dari waktu setelah beberapa Pembaruan Windows diinstal baru-baru ini (minggu 7 Agustus 2017).
Kegagalan sambungan disebabkan oleh .NET Framework 4.7 yang diinstal di komputer target (Penginstalan otomatis Pembaruan Windows aktif) - https://support.microsoft.com/?kbid=3186539
Menghapus instalasi .NETFramework 4.7 memecahkan masalah koneksi.
Rupanya, ada perubahan yang melanggar dalam .Net Framework 4.6.1 - TransparentNetworkIPResolution Memperbarui string koneksi sesuai artikel juga memecahkan masalah tanpa perlu memutar kembali versi kerangka kerja.
sumber
Saya memperbaiki kesalahan ini di Windows Server 2012 dan SQL Server 2012 dengan mengaktifkan IPv6 dan membuka blokir port masuk 1433.
sumber
Dalam kasus kami, masalah terjadi karena konfigurasi cluster ketersediaan. Untuk mengatasi masalah ini kami harus mengatur
MultiSubnetFailover
ke True di string koneksi.Detail lebih lanjut tentang MSDN
sumber
Saya memiliki masalah yang sama, berhasil menyelesaikannya dengan membuka / mengaktifkan port 1433 dan tcp / ip di SQL Server Configuration Manager dan kemudian Restart Server
sumber
Dalam kasus saya di atas semua opsi sudah ada.
Mengatasinya dengan meningkatkan Connection Time-out = 30.
sumber
Sebelum Anda kehilangan lebih banyak waktu untuk memecahkan masalah, seperti saya, coba restart mesin windows Anda . Bekerja untuk saya setelah menerapkan semua solusi lainnya.
sumber
Saya mengalami masalah ini saat melakukan migrasi SharePoint 2010 ke 2013. Saya curiga karena server basis data berada di sisi lain dari firewall yang tidak merutekan IP6 yang kemudian mencoba menggunakan IP6 dan gagal saat menyambung ke basis data.
Saya pikir masalahnya sekarang sudah terpecahkan. Kesalahan tampaknya telah berhenti. Apa yang saya lakukan adalah menonaktifkan IP6 (dengan menghapus centangnya) untuk adaptor jaringan di Server SharePoint.
sumber
Saya mengalami masalah yang sama, tetapi saya menghubungkan ke db jarak jauh menggunakan alamat IP statis. Jadi tidak ada solusi di atas yang menyelesaikan masalah saya.
Saya gagal menambahkan Pemetaan Pengguna yang tepat untuk Login keamanan yang saya gunakan, jadi solusi bagi saya adalah memastikan pengaturan Pemetaan Pengguna diatur untuk mengakses database saya.
sumber
Memecahkan masalah ini dengan memblokir / memasukkan alamat IP ke daftar hitam yang mencoba memaksa akun pengguna. Periksa log akses SQL Anda untuk sejumlah besar upaya login yang gagal (biasanya untuk akun 'sa').
sumber
Bagi saya, ternyata firewall di windows server memblokir port 1433 yang merupakan port default sql server. Jadi menambahkan aturan masuk untuk menerima koneksi tersebut membuat trik bagi saya.
sumber
Dalam kasus saya, parameter
Persist Security Info=true
dengan pengguna dan kata sandi dalam string koneksi menyebabkan masalah. Menghapus parameter atau mengatur untukfalse
memecahkan masalah.sumber
Coba restart SQL Server sederhana terlebih dahulu sebelum melakukan sesuatu yang drastis. Mungkin memperbaikinya. Itu untuk saya
sumber
Sayangnya, saya mengalami masalah dengan SQL Server Lokal yang diinstal dalam Visual Studio dan di sini banyak solusi tidak berhasil untuk saya. Yang harus saya lakukan adalah mengatur ulang Visual Studio saya, dengan membuka:
Panel Kontrol> Program & Fitur> Peluncur Pengaturan Visual Studio
dan klik tombol Lainnya dan pilih Perbaiki
Setelah itu saya dapat mengakses SQL Server Lokal saya dan bekerja dengan Database SQL lokal.
sumber
Saya mengalami masalah yang sama yang secara otomatis teratasi setelah pembaruan Microsoft windows terakhir, apakah ada yang mengalami hal yang sama?
sumber
Saya memiliki masalah yang sebenarnya, mencoba beberapa soultion tidak berhasil, terakhir memulai ulang sistem, itu berfungsi dengan baik.
sumber
Untuk melacak kesalahan "Connection Timeout expired" , Harap pastikan bahwa:
sumber
Menambahkan tanggapan di sini, meskipun jawaban telah diterima sebelumnya. Karena skenario saya dikonfirmasi sebagai DNS. Lebih khusus lagi, batas waktu dns selama jabat tangan pra-login. Dengan mengubah dari nama DNS ke Alamat IP (atau menggunakan entri file Host), Anda melewati masalah. Meskipun dengan biaya kehilangan resolusi ip otomatis.
Misalnya, bahkan dengan nilai batas waktu Connection String yang disetel ke 60 untuk satu menit penuh, itu masih akan terjadi dalam beberapa detik setelah percobaan. Yang membuat orang bertanya mengapa waktu tunggu sebelum periode batas waktu yang ditentukan? DNS.
sumber