HttpWebRequest Problème: le Système n'avait pas suffisamment d'espace mémoire tampon ou à cause d'une file d'attente était pleine
Je suis à l'aide d'un service d'extraire une liste d'hôtels dans la forme d'un document XML. Tout cela fonctionne très bien sur notre serveur de dev lors de l'essai, cependant shorty après le déploiement de vivre toutes les pages utilisant ce sont brisées et sont l'affichage de ce message d'erreur:
An operation on a socket could not be performed because the system lacked
sufficient buffer space or because a queue was full 91.103.175.187:80
Description: An unhandled exception occurred during the execution of the current
web request. Please review the stack trace for more information about the error
and where it originated in the code.
Exception Details: System.Net.Sockets.SocketException: An operation on a socket
could not be performed because the system lacked sufficient buffer space or
because a queue was full 91.103.175.187:80
Stack Trace:
[SocketException (0x2747): An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full 91.103.175.187:80]
System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) +305
System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) +699
[WebException: Unable to connect to the remote server]
System.Net.HttpWebRequest.GetResponse() +7859156
Laterooms.Gateway.LateroomsGateway.GetHotelsWithurl(String url)
Laterooms.Gateway.LateroomsGateway.GetHotelsByKeyword(String keyword, String orderBy)
Laterooms.LateroomsManager.GetHotelsByKeyword(String keyword, String orderBy, String lang)
Après avoir vu ce que je pensais peut-être à cause de la quantité de demandes, donc j'ai mis en œuvre la mise en cache mais toujours les mêmes problèmes sont survenus. Voici le code que j'utilise d'extraire les données:
HttpWebRequest request = null;
Uri uri = new Uri(url);
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.AllowWriteStreamBuffering = false;
request.ContentLength = 0;
request.KeepAlive = false;
using (WebResponse response = request.GetResponse())
{
using (Stream dataStream = response.GetResponseStream())
{
_LateroomsXml.Load(dataStream);
}
}
De nouveau ce problème se produit uniquement sur notre serveur live. Après de nombreuses heures de débogage et de recherches sur google je ne suis pas venu tout près de résoudre ce problème.
Toute aide serait grandement appréciée!
Il a 4 go assigné pour le moment il fonctionne seulement à 2 go. J'ai pensé que cela pourrait être la question ainsi, mais il ne semble pas l'être.
Double Possible de "une opération sur un socket n'a pas pu être effectuée car le système n'avait pas suffisamment d'espace mémoire tampon ou à cause d'une file d'attente était pleine"
OriginalL'auteur shoughton123 | 2013-06-18
Vous devez vous connecter pour publier un commentaire.
S'il vous plaît ne pas utiliser ce correctif. Votre problème est que vous devez garder avie désactivé, il est donc à l'aide d'une connexion différente pour chaque demande, et un port qui est alors incapable de être utilisés de nouveau pour un couple de minutes. Il fait exactement ce qu'il est censé faire.
Activer l'option " keep-alive et votre problème sera de s'en aller.
OriginalL'auteur user1495282
J'ai trouvé la solution pour cette fin juste au cas où quelqu'un d'autre est coincé!
De ici
https://support.microsoft.com/en-us/kb/196271
Démarrez L'Éditeur Du Registre.
Recherchez la sous-clé suivante dans le registre, puis cliquez sur Paramètres:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Sur le menu Edition, cliquez sur Nouveau, puis ajoutez l'entrée de registre suivante:
Nom De La Valeur: MaxUserPort
Valeur de Type: DWORD
Données de la valeur: 65534
Plage valide: 5000-65534 (décimal)
Par défaut: 0x1388 (5000 décimal)
Quittez l'Éditeur du Registre, puis redémarrez l'ordinateur.
Ceci, combiné avec une meilleure mise en cache de sorte que les données n'est pas d'être tiré à chaque fois qu'un utilisateur charge la page empêcher que cela se produise à nouveau.
Vous trouverez une réponse complète dans ce lien.
ce n'est pas une solution, c'est un hack, il suffit de reporter le problème jusqu'à ce que vous faites face à une charge élevée
OriginalL'auteur shoughton123