Kesalahan tingkat transportasi telah terjadi ketika menerima hasil dari server [ditutup]

169

Saya mendapatkan kesalahan SQL Server:

Kesalahan tingkat transportasi telah terjadi ketika menerima hasil dari server. (penyedia: Penyedia Memori Bersama, kesalahan: 0 - Pegangan tidak valid.)

Saya menjalankan Sql Server 2008 SP1, Windows 2008 Standard 64 bit.

Ini adalah aplikasi web .Net 4.0. Itu terjadi ketika permintaan dibuat ke server. Berselang. Adakah yang bisa saya selesaikan?

Chuck Conway
sumber
3
Ini dapat terjadi jika database dibuat pada versi SQL Express / MSDE yang lebih lama yang mengatur AUTO_CLOSE ke True. Atau contoh layanan SQL Server telah dimulai kembali.
devstuff
1
Saya bisa disebabkan oleh tindakan yang tertunda pada db Anda. ini menghasilkan kunci DB.
pix
4
Jawaban yang ditandai bukan jawaban. Jawaban oleh Michael Olivero di bawah ini yang sebenarnya menyediakan konten dan mengikutinya memecahkan masalah ketika saya menabraknya. (Secara manual menutup server web sementara pada mesin dev saya.) Saya sarankan jawabannya diubah.
Adam Miller
3
@Flexo Ini ditutup sebagai di luar topik? Saya baru saja mengalami hal itu dengan pemasangan baru VS 2017 dan MS SQL 2016 Enterprise. Sementara itu bekerja dengan baik dengan Komunitas VS 2015.
Edward
1
Ini tidak boleh di luar topik. Masalahnya tidak ada hubungannya dengan kode yang digunakan, sehingga MCVE tidak dapat dibuat untuk itu. Juga, alasan penutupan menyatakan: this one was resolved in a manner unlikely to help future readers- tetapi 179k orang telah menemukan pertanyaan ini.
Nisarg

Jawaban:

102

Koneksi basis data ditutup oleh server basis data. Koneksi tetap valid di kumpulan koneksi aplikasi Anda; akibatnya, ketika Anda mengambil string koneksi bersama dan mencoba untuk mengeksekusi itu tidak dapat mencapai database. Jika Anda mengembangkan Visual Studio, cukup tutup server web sementara di bilah tugas.

Jika itu terjadi dalam produksi, mengatur ulang kumpulan aplikasi Anda untuk situs web Anda harus mendaur ulang kumpulan koneksi.

Michael Olivero
sumber
1
Yang ini adalah jawaban yang sebenarnya.
TheHuge_
2
Dalam kasus khusus saya, saya memiliki MultipleActiveResultSets=Truepengaturan dalam string koneksi yang menyebabkan kesalahan yang sama.
Semyon Vyskubov
17

Coba perintah berikut pada prompt perintah:

netsh interface tcp set global autotuning=disabled

Ini mematikan kemampuan penskalaan otomatis dari tumpukan jaringan

Simmo
sumber
20
Bisakah Anda memberikan beberapa detail tentang apa yang sebenarnya dilakukannya? Adakah alasan untuk tidak menetapkan nilai semacam itu secara global?
Drew Noakes
1
ini mematikan kemampuan penskalaan otomatis dari tumpukan jaringan.
Simmo
Tidak berfungsi di Windows XP SP3. Antarmuka Netsh tidak memiliki sub perintah tcp di Windows XP, namun ia bekerja dengan baik di Windows 7 SP1.
Narayanan
Saya tahu ini sudah tua, tetapi ini adalah satu-satunya solusi yang bekerja untuk saya (sebagian besar masalah / solusi berputar di sekitar server / aplikasi, situasi saya adalah aplikasi desktop dan server jaringan lokal, tidak ada IIS atau yang seperti itu). Mengapa mematikan autotuning / autoscaling memperbaiki masalah ini?
Trent
1
dalam kasus saya, ReOpen dari SQL Server Management Studio memecahkan masalah
Alex
15

Saya memiliki masalah yang sama. Saya me-restart Visual Studio dan itu memperbaiki masalah

piris
sumber
12

Bagi mereka yang tidak menggunakan IIS, saya memiliki masalah ini ketika debugging dengan Visual Studio 2010. Saya mengakhiri semua proses debugger: WebDev.WebServer40.EXE yang memecahkan masalah.

jth_92
sumber
Tolong beri tahu langkah-langkah bagaimana Anda mengakhiri proses itu. Saya pemula dan saya tidak tahu apa yang Anda maksud dengan "mengakhiri semua proses debugger"
Unbreakable
@Unreakable Saya baru saja menggunakan Task Manager. Di pengelola tugas, Anda bisa melihat semua proses yang berjalan dengan nama WebDev.WebServer40.EXE. Lihat betanews.com/2015/10/10/how-to-kill-a-windows-process untuk cara membunuh proses windows.
jth_92
8

Kesalahan tingkat transportasi sering dikaitkan dengan koneksi ke server sql sedang rusak ... biasanya jaringan.

Timeout Expired biasanya dilemparkan ketika kueri sql terlalu lama untuk dijalankan.

Jadi beberapa opsi bisa:

  1. Periksa koneksi dalam VPN (jika digunakan) atau alat lain
  2. Mulai ulang IIS
  3. Mulai ulang mesin
  4. Optimalkan kueri sql.
NG.
sumber
Jawaban sederhana tetapi menghemat waktu saya.
Kirk
7

Yang Anda butuhkan adalah untuk Hentikan ASP.NET Development Server dan jalankan proyek lagi

MishMish
sumber
4

Jika Anda terhubung ke database Anda melalui Microsoft SQL Server Management, tutup semua koneksi Anda dan coba lagi. Mengalami kesalahan ini ketika terhubung ke Azure Database lain, dan berfungsi untuk saya ketika menutupnya. Masih tidak tahu kenapa ..

Watabou
sumber
Ini adalah perbaikan yang berhasil untuk saya. Saya mematikan SQL Server Management Studio dan kemudian saya tidak pernah melihat kesalahan ini lagi.
Beevik
4

Sedang mendapatkan ini, selalu setelah sekitar 5 menit operasi. Menyelidiki dan menemukan bahwa peringatan dari e1iexpress selalu terjadi sebelum kegagalan. Ini tampaknya adalah kesalahan yang berkaitan dengan adapter TCP / IP tertentu. Tetapi mengubah dari WiFi ke perangkat keras tidak mempengaruhinya.

Jadi coba Rencana B dan restart Visual Studio. Kemudian itu bekerja dengan baik.

Pada penelitian yang lebih dekat saya perhatikan bahwa, ketika bekerja dengan benar, pesan tersebut The Thread '<No Name>' has exited with code 0terjadi hampir tepat pada saat run mengalami crash pada upaya sebelumnya. Beberapa Googling mengungkapkan bahwa pesan itu muncul ketika (antara lain) server memangkas kumpulan utas.

Agaknya ada utas palsu di kumpulan utas dan setiap kali server mencoba untuk "memotong" itu butuh aplikasi.

Hot Licks
sumber
4

Lihatlah blog MSDN yang merinci kesalahan ini:

Menghapus Koneksi

Pooler koneksi menghapus koneksi dari pool setelah menganggur untuk waktu yang lama, atau jika pooler mendeteksi bahwa koneksi dengan server telah terputus.

Perhatikan bahwa koneksi terputus hanya dapat dideteksi setelah mencoba berkomunikasi dengan server. Jika ditemukan koneksi yang tidak lagi terhubung ke server, itu ditandai sebagai tidak valid.

Koneksi yang tidak valid dihapus dari kumpulan koneksi hanya ketika mereka ditutup atau direklamasi.

Jika ada koneksi ke server yang telah hilang, koneksi ini dapat diambil dari kolam bahkan jika pooler koneksi belum mendeteksi koneksi terputus dan menandainya sebagai tidak valid.

Ini terjadi karena overhead memeriksa bahwa koneksi masih valid akan menghilangkan manfaat memiliki pooler dengan menyebabkan bolak-balik ke server terjadi.

Ketika ini terjadi, upaya pertama untuk menggunakan koneksi akan mendeteksi bahwa koneksi telah terputus, dan pengecualian dilemparkan.

Pada dasarnya apa yang Anda lihat adalah pengecualian dalam kalimat terakhir.

Koneksi diambil dari kumpulan koneksi, aplikasi tidak tahu bahwa koneksi fisik hilang, upaya untuk menggunakannya dilakukan dengan asumsi bahwa koneksi fisik masih ada.

Dan Anda mendapatkan pengecualian Anda.

Ada beberapa alasan umum untuk ini.

  1. Server telah dihidupkan ulang, ini akan menutup koneksi yang ada.

Dalam hal ini, lihat log SQL Server, biasanya ditemukan di: C: \ Program Files \ Microsoft SQL Server \\ MSSQL \ LOG

Jika cap waktu untuk memulai sangat baru, maka kami dapat menduga bahwa inilah yang menyebabkan kesalahan. Coba kaitkan stempel waktu ini dengan waktu pengecualian.

2009-04-16 11: 32: 15.62 Server Logging Pesan SQL Server dalam file 'C: \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG'.

  1. Seseorang atau sesuatu telah membunuh SPID yang sedang digunakan.

Sekali lagi, lihat log SQL Server. Jika Anda menemukan pembunuhan, cobalah untuk menghubungkan timestamp ini dengan waktu pengecualian.

2009-04-16 11: 34: 09.57 spidXX Process ID XX dibunuh oleh hostname xxxxx, proses host ID XXXX.

  1. Ada failover (dalam pengaturan cermin misalnya) lagi, lihat log SQL Server.

Jika ada kegagalan, cobalah untuk menghubungkan timestamp ini dengan waktu pengecualian.

2009-04-16 11: 35: 12.93 spidXX Basis data yang dicerminkan "" mengubah peran dari "PRINCIPAL" menjadi "CERMIN" karena Failover.

Rahul Tripathi
sumber
3

Anda mendapatkan pesan ini saat skrip Anda membuat SQL Service berhenti karena beberapa alasan. jadi jika Anda memulai Layanan SQL lagi mungkin masalah Anda akan teratasi.

Mohammad Sheykholeslam
sumber
Mohon berikan langkah-langkah tentang cara memulai Layanan SQL. Saya seorang pemula dan saya baru saja membuat aplikasi asp.net mvc 5. dan ketika saya menjalankan "aktifkan-migrasi" semuanya baik-baik saja maka saya jalankan "add-migrasi" sdfd "semuanya baik-baik saja dan kemudian ketika saya klik pada pembaruan-database saya mendapatkan kesalahan ini. tolong pandu saya
dipecahkan
3

Saya tahu ini mungkin tidak membantu semua orang (siapa tahu, mungkin ya), tetapi saya memiliki masalah yang sama dan setelah beberapa waktu, kami menyadari bahwa penyebabnya adalah sesuatu yang keluar dari kode itu sendiri.

Komputer mencoba menjangkau server, berada di jaringan lain, koneksi dapat dibuat tetapi kemudian jatuh.

Cara yang kami gunakan untuk memperbaikinya, adalah dengan menambahkan rute statis ke komputer, memungkinkan akses langsung ke server tanpa melewati firewall.

route add p YourServerNetwork mask NetworkMask Router 

Sampel:

route add p 172.16.12.0 mask 255.255.255.0 192.168.11.2 

Saya harap ini membantu seseorang, lebih baik memiliki ini, setidaknya sebagai petunjuk, jadi jika Anda menghadapinya, Anda tahu bagaimana menyelesaikannya.

coloboxp
sumber
2

Saya mendapat kesalahan yang sama di lingkungan pengembangan Visual Studion 2012, menghentikan IIS Express dan menjalankan kembali aplikasi, itu mulai bekerja.

Murthy M
sumber
2

Dalam kasus saya, layanan Server "SQL Server" berhenti. Ketika saya memulai kembali layanan yang memungkinkan saya untuk menjalankan kueri dan menghilangkan kesalahan.

Ini juga merupakan ide bagus untuk memeriksa permintaan Anda untuk mencari tahu mengapa permintaan membuat layanan ini berhenti

masukkan deskripsi gambar di sini

pengguna3447136
sumber
1

Saya memiliki masalah yang sama. Saya memecahkannya, memotong LOG SQL Server. Periksa melakukan itu, dan kemudian beri tahu kami, jika solusi ini membantu Anda.

Lucas
sumber
1

Bagi saya jawabannya adalah meningkatkan OS dari 2008R2 ke 2012R2, solusi iisreset atau restart apppool tidak bekerja untuk saya. Saya juga mencoba untuk mengaktifkan pengaturan TCP Chimney Offload, tetapi saya tidak me-restart server karena ini adalah server produksi, yang juga tidak berfungsi.

Bruce Liu
sumber
1

Bagi saya solusinya sangat berbeda.

Dalam kasus saya, saya memiliki sumber objek yang memerlukan parameter datetimestamp. Meskipun parameter ODS, ConvertEmptyStringToNull benar 1/1/0001 diteruskan ke SelectMethod. Itu pada gilirannya menyebabkan pengecualian melimpah datetime sql ketika datetime itu dilewatkan ke server sql.

Menambahkan cek tambahan untuk datetime.year! = 0001 dan itu menyelesaikannya untuk saya.

Aneh bahwa itu akan menimbulkan kesalahan tingkat transportasi dan bukan kesalahan meluap datetime. Bagaimanapun ..

KonaRin
sumber
1
tidak mungkin ini terkait, itu pasti kebetulan
Michiel Cornille
1

Kami menemukan kesalahan ini baru-baru ini antara server bisnis kami dan server database kami. Solusi bagi kami adalah menonaktifkan "IP Offloading" pada antarmuka jaringan. Kemudian kesalahan itu hilang.

Dave
sumber
1

Salah satu alasan saya menemukan kesalahan ini adalah ' Paket Ukuran = xxxxx ' dalam string koneksi. jika nilai xxxx terlalu besar, kita akan melihat kesalahan ini. Hapus nilai ini dan biarkan SQL server menanganinya atau membuatnya tetap rendah, tergantung pada kapabilitas jaringan.

Naresh Mittal
sumber
1

Itu terjadi pada saya ketika saya mencoba untuk mengembalikan database SQL dan memeriksa kotak centang di Optionstab berikut,

masukkan deskripsi gambar di sini

Karena ini adalah server database yang berdiri sendiri hanya menutup SSMS dan membukanya kembali memecahkan masalah bagi saya.

Muhammad Raja
sumber
1

Ini terjadi ketika database dihapus dan dibuat ulang beberapa sumber daya bersama masih mempertimbangkan database masih ada, jadi ketika Anda menjalankan kembali menjalankan query untuk membuat tabel dalam database setelah itu dibuat kembali kesalahan tidak akan muncul lagi dan Command(s) completed successfully.pesan akan menampilkan bukannya pesan kesalahan Msg 233, Level 20, State 0, Line 0 A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.).

Abaikan saja kesalahan ini ketika Anda menjatuhkan dan membuat ulang basis data dan menjalankan kembali permintaan DDL Anda tanpa khawatir.

Ashraf Abusada
sumber
0

Saya menghadapi masalah yang sama baru-baru ini, tetapi saya tidak bisa mendapatkan jawaban di google. Jadi terpikir untuk membagikannya di sini, sehingga dapat membantu seseorang di masa depan.

Kesalahan:

Saat mengeksekusi kueri, kueri akan memberikan beberapa output kemudian akan menampilkan kesalahan di bawah ini.

"Kesalahan level transport telah terjadi ketika menerima output dari server (TCP: provider, error: 0- nama jaringan yang ditentukan tidak lagi tersedia"

Larutan:

  1. Periksa penyedia server tertaut itu
  2. Di properti penyedia itu, Aktifkan opsi "Izinkan proses" untuk penyedia tertentu itu untuk memperbaiki masalah.
Pradeepa.PK
sumber