web-dev-qa-db-fra.com

Une tentative de connexion a échoué car la partie connectée n'a pas répondu correctement après un certain temps ou la connexion établie a échoué

J'ai un problème:

Une tentative de connexion a échoué car la partie connectée n'a pas répondu correctement après un certain temps ou la connexion établie a échoué car l'hôte connecté n'a pas répondu à l'URL.

Je reçois également un problème comme:

System.IO.IOException: impossible d'écrire des données sur la connexion de transport: une connexion existante a été fermée de force par l'hôte distant

et

System.Net.WebException: l'opération a expiré à System.Net.WebClient.UploadFile (adresse Uri, méthode String, String fileName)

Je sais que cette question a déjà été posée, mais croyez-moi, j'ai essayé presque toutes les résolutions à ma fin.

Chose étrange, ce problème n'apparaît pas du tout et uniquement lorsque le client essaie d'utiliser ce qui n'est pas constant. Quelque temps, mon application fonctionne bien également.

Ce que j'essaie d'accomplir, c'est d'avoir créé une application de bureau (Win Forms & C #) et d'essayer de me connecter au client tout en envoyant une demande à mon serveur php api hébergé sur GODaddy.

var request = (HttpWebRequest)WebRequest.Create("url");
if (request != null)
{
    #region System.Net.WebException
    request.Method = "POST";
    if (!string.IsNullOrEmpty(body))
    {
        var requestBody = Encoding.UTF8.GetBytes(body);
        request.ContentLength = requestBody.Length;
        request.ContentType = "application/json";
        using (var requestStream = request.GetRequestStream())
        {
            requestStream.Write(requestBody, 0, requestBody.Length);
        }
    }
    else
    {
        request.ContentLength = 0;
    }
    request.Timeout = 15000;
    request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache);

    string output = string.Empty;
    try
    {
        using (var response = (HttpWebResponse)request.GetResponse())
        {
            using (var stream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(1252)))
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    while (!stream.EndOfStream)
                    {
                        output += stream.ReadLine();
                    }
                    output = stream.ReadToEnd();
                }
            }
        }
    }
    catch
    {
        // Excaption Caught here
    }
}

Sil te plait aide moi.

Merci d'avance.

11
Manish

Je pense avoir obtenu la réponse. J'ai pensé à le poster pour qu'il puisse aider quelqu'un d'autre.

Il s'agit très probablement du problème de machine ou de serveur, mais dans mon cas, j'ai essayé de définir Request.proxy = null et cela a fonctionné comme un charme.

1
Manish

Essayez d'ajouter ceci ...

request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
request.ServicePoint.ConnectionLimit = 12;

L'article MSDN recommande 12 connexions par CPU, d'où la limite de 12 car il est hébergé par GoDaddy, donc je suis sûr que les ressources du serveur sont limitées.

1
waltmagic