httpWebRequest (La connexion sous-jacente a été fermée: la connexion a été fermée de manière inattendue.)

Je développe une application en C# qui enregistre les données à partir d'un serveur web. Il envoie une requête post au serveur et attend la réponse.

    ///<summary>
    ///Function for obtaining testCgi data 
    ///</summary>
    ///<param name="Parameters"></param>
    ///<returns></returns>
    private string HttpmyPost(string Parameters)
    {
        string str = "No response";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriTestCGI);
        request.Method = "POST";

        byte[] bytes = Encoding.UTF8.GetBytes(Parameters);
        request.ContentLength = bytes.Length;

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(bytes, 0, bytes.Length);
        requestStream.Close();

            WebResponse response = request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream);

            try
            {
                var result = reader.ReadToEnd();
            stream.Dispose();
            str = result.ToString();
            reader.Dispose();
        }
        catch (WebException ex)
        {
            //System.Windows.Forms.MessageBox.Show(ex.Message);
            System.Diagnostics.Trace.WriteLine(ex.Message);

        }
        finally
        {
            request.Abort();
        }
        return str;
    }

J'obtiens l'erreur

> "The underlying connection was closed: The connection was closed
> unexpectedly"

J'ai essayé de chercher l'erreur, et j'ai utilisé le violoneux, afin de vérifier la requête post donnée à partir de Firefox. À ma grande surprise, quand Fiddler était mon programme fonctionnait parfaitement. Quand je ferme les violoneux je vais avoir le même message d'erreur.

Je soupçonne que, depuis Fiddler agit comme un proxy, il peut modifier certains paramètres.
J'ai essayé d'utiliser le client web et le résultat était le même.

Quand j'ai essayé de codage de la demande en python, tout a fonctionné comme il se doit, sans aucun problème. De cource j'ai la possibilité d'installer des IronPython et de l'envelopper cette fonction particulière, cependant je considère que ce exagéré, et manquant d'élégance, donc je suis à la poursuite d'un maigre approche. J'imagine que ce n'est rien de plus qu'un paramètre d'ajustement.

J'ai essayé de modifier et dans mon cas, il est indifférent.

request.Accept 
request.ReadWriteTimeout 
request.Timeout 
request.UserAgent 
request.Headers
request.AutomaticDecompression 
request.Referer
request.AllowAutoRedirect
//request.TransferEncoding 
request.Expect
request.ServicePoint.Expect100Continue 
request.PreAuthenticate 
request.KeepAlive 
request.ProtocolVersion 
request.ContentType

Avec ou sans les ajustements ci-dessus le code fonctionne quand Fiddler est la capture de données.

Il peut aussi être de noter que le programme génère le message d'erreur à

WebResponse response = request.GetResponse();

Mise à JOUR:
Suivant @EricLaw suggestions j'ai regardé dans les temps de Latence.
J'ai trouvé cet article
HttpWebRequest devient plus lent lors de l'ajout d'un Intervalle de
qui a suggéré de transformer de l'Algorithme Nagle.
Maintenant, il n'y a pas fermé les connexions, même si il y a un petit décalage dans la réponse globale (quand j'utilise winforms, et pas async).

source d'informationauteur NMech