Une erreur au niveau du transport s'est produite lors de la réception des résultats du serveur [fermé]


169

J'obtiens une erreur SQL Server:

Une erreur au niveau du transport s'est produite lors de la réception des résultats du serveur. (fournisseur: fournisseur de mémoire partagée, erreur: 0 - le handle n'est pas valide.)

J'exécute Sql Server 2008 SP1, Windows 2008 Standard 64 bits.

C'est une application Web .Net 4.0. Cela se produit lorsqu'une demande est faite au serveur. C'est intermittent. Une idée comment je peux le résoudre?


3
Cela peut se produire si la base de données a été créée sur une ancienne version de SQL Express / MSDE qui a défini AUTO_CLOSE sur True. Ou l'instance de service SQL Server a été redémarrée.
devstuff

1
Je peux être causé par une action en attente sur votre base de données. cela entraîne un verrou DB.
pix

4
La réponse marquée n'est pas une réponse. La réponse de Michael Olivero ci-dessous qui fournit réellement du contenu et qui suit a résolu le problème lorsque je suis tombé dessus. (Fermeture manuelle du serveur Web temporaire sur ma machine de développement.) Je recommande de changer la réponse.
Adam Miller

3
@Flexo Ceci est fermé comme hors sujet? Je viens de le faire m'arriver avec de nouvelles installations de VS 2017 et MS SQL 2016 Enterprise. Alors que cela fonctionnait très bien avec VS 2015 Community.
Edward

1
Cela ne devrait pas être hors sujet. Le problème n'a rien à voir avec le code utilisé, donc un MCVE ne peut pas être créé pour lui. En outre, la raison de la fermeture indique: this one was resolved in a manner unlikely to help future readers- mais 179k personnes ont rencontré cette question.
Nisarg

Réponses:


102

La connexion à la base de données est fermée par le serveur de base de données. La connexion reste valide dans le pool de connexions de votre application; par conséquent, lorsque vous récupérez la chaîne de connexion partagée et essayez de l'exécuter, il ne peut pas atteindre la base de données. Si vous développez Visual Studio, fermez simplement le serveur Web temporaire dans votre barre des tâches.

Si cela se produit en production, la réinitialisation de votre pool d'applications pour votre site Web devrait recycler le pool de connexions.


1
Celui-ci est la vraie réponse.
TheHuge_

2
Dans mon cas particulier, j'avais un MultipleActiveResultSets=Trueparamètre dans la chaîne de connexion qui a causé la même erreur.
Semyon Vyskubov

17

Essayez la commande suivante sur l'invite de commande:

netsh interface tcp set global autotuning=disabled

Cela désactive les capacités de mise à l'échelle automatique de la pile réseau


20
Pouvez-vous fournir des détails sur ce que cela fait réellement? Y a-t-il des raisons de ne pas fixer une telle valeur à l'échelle mondiale?
Drew Noakes

1
il désactive les capacités de mise à l'échelle automatique de la pile réseau.
Simmo

Ne fonctionne pas sous Windows XP SP3. L'interface Netsh n'a pas de sous-commande tcp dans Windows XP, mais elle fonctionne bien dans Windows 7 SP1.
Narayanan

Je sais que c'est vieux, mais c'était la seule solution qui fonctionnait pour moi (la plupart des problèmes / solutions tournent autour d'un serveur Web / application, ma situation est une application de bureau et un serveur de réseau local, pas d'IIS ou quelque chose comme ça). Pourquoi la désactivation de l'autoréglage / de l'autoscaling résoudrait-elle ce problème?
Trent

1
dans mon cas, ReOpen de SQL Server Management Studio a résolu le problème
Alex

15

J'ai eu le même problème. J'ai redémarré Visual Studio et cela a résolu le problème


12

Pour ceux qui n'utilisent pas IIS, j'ai eu ce problème lors du débogage avec Visual Studio 2010. J'ai arrêté tous les processus de débogage: WebDev.WebServer40.EXE qui a résolu le problème.


Veuillez indiquer les étapes à suivre pour mettre fin à ces processus. Je suis débutant et je ne sais pas ce que vous entendez par "terminé tout le processus de débogage"
Incassable

@Unbreakable Je viens d'utiliser le gestionnaire de tâches. Dans le gestionnaire de tâches, vous pouvez voir tous les processus en cours avec le nom WebDev.WebServer40.EXE. Voir betanews.com/2015/10/08/how-to-kill-a-windows-process pour savoir comment tuer un processus Windows.
jth_92

8

Les erreurs de niveau de transport sont souvent liées à la rupture de la connexion au serveur SQL ... généralement réseau.

Timeout Expired est généralement levé lorsqu'une requête SQL prend trop de temps à s'exécuter.

Si peu d'options peuvent être:

  1. Vérifiez la connexion dans VPN (si utilisé) ou dans tout autre outil
  2. Redémarrez IIS
  3. Redémarrer la machine
  4. Optimiser les requêtes SQL.

Réponse simple mais économisé mon temps.
Kirk

7

Tout ce dont vous avez besoin est d'arrêter le serveur de développement ASP.NET et de réexécuter le projet


4

Si vous êtes connecté à votre base de données via Microsoft SQL Server Management, fermez toutes vos connexions et réessayez. Eu cette erreur lors de la connexion à une autre base de données Azure et a fonctionné pour moi lors de sa fermeture. Je ne sais toujours pas pourquoi ...


C'était une solution qui a fonctionné pour moi. J'ai arrêté SQL Server Management Studio et je n'ai jamais revu cette erreur.
Beevik le

4

J'obtenais cela, toujours après environ 5 minutes de fonctionnement. Enquêté et trouvé qu'un avertissement de e1iexpress se produit toujours avant l'échec Il s'agit apparemment d'une erreur liée à certains adaptateurs TCP / IP. Mais le passage du WiFi au filaire ne l'a pas affecté.

J'ai donc essayé le plan B et redémarré Visual Studio. Ensuite, cela a bien fonctionné.

En étudiant de plus près, j'ai remarqué qu'en fonctionnant correctement, le message se The Thread '<No Name>' has exited with code 0produisait presque exactement au moment où l'exécution s'est plantée lors des tentatives précédentes. Certains googlages révèlent que ce message apparaît lorsque (entre autres) le serveur coupe le pool de threads.

Vraisemblablement, il y avait un faux thread dans le pool de threads et chaque fois que le serveur tentait de le "couper", il supprimait l'application.


4

Regardez le blog MSDN qui détaille cette erreur:

Suppression des connexions

Le pooler de connexions supprime une connexion du pool après qu'elle a été inactive pendant une longue période, ou si le pooler détecte que la connexion avec le serveur a été interrompue.

Notez qu'une connexion interrompue ne peut être détectée qu'après avoir tenté de communiquer avec le serveur. Si une connexion n'est plus connectée au serveur, elle est marquée comme non valide.

Les connexions non valides sont supprimées du pool de connexions uniquement lorsqu'elles sont fermées ou récupérées.

S'il existe une connexion à un serveur qui a disparu, cette connexion peut être établie à partir du pool même si le pooler de connexions n'a pas détecté la connexion interrompue et l'a marquée comme non valide.

C'est le cas parce que la surcharge de vérification de la validité de la connexion éliminerait les avantages d'avoir un pooler en provoquant un autre aller-retour vers le serveur.

Lorsque cela se produit, la première tentative d'utilisation de la connexion détecte que la connexion a été interrompue et une exception est levée.

Fondamentalement, ce que vous voyez est cette exception dans la dernière phrase.

Une connexion est prise à partir du pool de connexions, l'application ne sait pas que la connexion physique a disparu, une tentative d'utilisation est faite sous l'hypothèse que la connexion physique est toujours là.

Et vous obtenez votre exception.

Il y a quelques raisons courantes à cela.

  1. Le serveur a été redémarré, cela fermera les connexions existantes.

Dans ce cas, jetez un œil au journal SQL Server, qui se trouve généralement sous: C: \ Program Files \ Microsoft SQL Server \\ MSSQL \ LOG

Si l'horodatage du démarrage est très récent, nous pouvons soupçonner que c'est ce qui a causé l'erreur. Essayez de corréler cet horodatage avec l'heure de l'exception.

2009-04-16 11: 32: 15.62 Serveur Journalisation des messages SQL Server dans le fichier 'C: \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ LOG \ ERRORLOG'.

  1. Quelqu'un ou quelque chose a tué le SPID qui est utilisé.

Encore une fois, regardez dans le journal SQL Server. Si vous trouvez un kill, essayez de corréler cet horodatage avec l'heure de l'exception.

2009-04-16 11: 34: 09.57 L'ID de processus spidXX XX a été tué par le nom d'hôte xxxxx, l'ID de processus hôte XXXX.

  1. Il y a à nouveau un basculement (dans une configuration miroir par exemple), jetez un œil dans le journal SQL Server.

S'il y a un basculement, essayez de corréler cet horodatage avec l'heure de l'exception.

2009-04-16 11: 35: 12.93 spidXX La base de données en miroir «» change les rôles de «PRINCIPAL» à «MIRROR» en raison du basculement.


3

Vous recevez ce message lorsque votre script arrête le service SQL pour certaines raisons. donc si vous redémarrez SQL Service, votre problème sera peut-être résolu.


Veuillez fournir des étapes sur la façon de démarrer le service SQL. Je suis débutant et je viens de créer une application asp.net mvc 5. et quand j'exécute "enable-migrations" tout va bien alors je lance "add-migration" sdfd "tout va bien et puis quand je clique sur update-database j'obtiens cette erreur. Veuillez me guider
Incassable

3

Je sais que cela n'aidera peut-être pas tout le monde (qui sait, peut-être que oui), mais j'ai eu le même problème et après un certain temps, nous avons réalisé que la cause était quelque chose hors du code lui-même.

L'ordinateur essayant d'atteindre le serveur était dans un autre réseau, la connexion a pu être établie mais ensuite abandonnée.

La façon dont nous avions l'habitude de résoudre ce problème était d'ajouter une route statique à l'ordinateur, permettant un accès direct au serveur sans passer par le pare-feu.

route add p YourServerNetwork mask NetworkMask Router 

Échantillon:

route add p 172.16.12.0 mask 255.255.255.0 192.168.11.2 

J'espère que cela aide quelqu'un, il vaut mieux avoir cela, au moins comme indice, donc si vous y faites face, vous savez comment le résoudre.


2

J'ai eu la même erreur dans l'environnement de développement Visual Studion 2012, j'ai arrêté IIS Express et j'ai réexécuté l'application, cela a commencé à fonctionner.


2

Dans mon cas, le service serveur "SQL Server" s'est arrêté. Lorsque j'ai redémarré le service qui m'a permis d'exécuter la requête et d'éliminer l'erreur.

C'est également une bonne idée d'examiner votre requête pour savoir pourquoi la requête a arrêté ce service

entrez la description de l'image ici


1

J'ai eu le même problème. Je l'ai résolu en tronquant le journal SQL Server. Vérifiez cela, puis dites-nous si cette solution vous a aidé.


1

Pour moi, la réponse est de mettre à niveau le système d'exploitation de 2008R2 à 2012R2, la solution d'iisreset ou de redémarrer apppool n'a pas fonctionné pour moi. J'ai également essayé de désactiver le paramètre TCP Chimney Offload, mais je n'ai pas redémarré le serveur car il s'agit d'un serveur de production, qui ne fonctionnait pas non plus.


1

Pour moi, la solution était totalement différente.

Dans mon cas, j'avais une source d'objets qui nécessitait un paramètre datetimestamp. Même si ce paramètre ODS ConvertEmptyStringToNull était vrai, 1/1/0001 était passé à SelectMethod. Cela a à son tour provoqué une exception de dépassement de date SQL lorsque cette date a été transmise au serveur SQL.

Ajout d'une vérification supplémentaire pour datetime.year! = 0001 et cela l'a résolu pour moi.

Bizarre que cela génère une erreur de niveau de transport et non une erreur de dépassement de date / heure. Quoi qu'il en soit ..


1
il n'y a aucun moyen que cela soit lié, cela doit avoir été une coïncidence
Michiel Cornille

1

Nous avons rencontré cette erreur récemment entre notre serveur d'entreprise et notre serveur de base de données. La solution pour nous était de désactiver le «déchargement IP» sur les interfaces réseau. Puis l'erreur a disparu.


1

L'une des raisons pour lesquelles j'ai trouvé cette erreur est ' Packet Size = xxxxx ' dans la chaîne de connexion. si la valeur de xxxx est trop grande, nous verrons cette erreur. Supprimez cette valeur et laissez le serveur SQL la gérer ou conservez-la à un niveau bas, selon les capacités du réseau.


1

Cela m'est arrivé lorsque j'essayais de restaurer une base de données SQL et que j'ai coché la case à cocher dans l' Optionsonglet,

entrez la description de l'image ici

Comme il s'agit d'un serveur de base de données autonome, le simple fait de fermer SSMS et de le rouvrir a résolu le problème pour moi.


1

Cela se produit lorsque la base de données est supprimée et recréée, certaines ressources partagées considèrent toujours que la base de données existe toujours, donc lorsque vous réexécutez la requête d'exécution pour créer des tables dans la base de données après sa recréation, l'erreur ne s'affichera plus et le Command(s) completed successfully.message s'affichera à la place du message d'erreurMsg 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.) .

Ignorez simplement cette erreur lorsque vous supprimez et recréez des bases de données et réexécutez vos requêtes DDL sans souci.


0

J'ai rencontré le même problème récemment, mais je n'ai pas pu obtenir de réponse dans Google. J'ai donc pensé à le partager ici, pour qu'il puisse aider quelqu'un à l'avenir.

Erreur:

Lors de l'exécution de la requête, la requête fournira peu de résultats, puis elle lancera l'erreur ci-dessous.

"Une erreur de niveau de transport s'est produite lors de la réception de la sortie du serveur (TCP: fournisseur, erreur: 0 - le nom de réseau spécifié n'est plus disponible"

Solution:

  1. Vérifiez le fournisseur de ce serveur lié
  2. Dans les propriétés de ce fournisseur, activez l'option «Autoriser le processus» pour ce fournisseur particulier afin de résoudre le problème.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.