Question

J'ai la fonction suivante qui envoie XML à l'aide d'une requête Https

public WebResponse SendXmlPost(string url, string xml)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.KeepAlive = false;
    request.ProtocolVersion = HttpVersion.Version11;
    request.Method = "POST";

    if (this.UseBasicAuthentication)
    {
        string usernamePassword = this.Login + ":" + this.Password;
        request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
        NetworkCredential cred = new NetworkCredential(this.Login, this.Password);
        request.Credentials = cred;
    }

    if (this.desactivateCertificateChecking)
    {
        System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        };
    }

    byte[] postBytes = Encoding.UTF8.GetBytes(xml);

    request.ContentType = "text/xml";
    request.ContentLength = postBytes.Length;
    Stream requestStream = request.GetRequestStream(); //error occurs here

    requestStream.Write(postBytes, 0, postBytes.Length);
    requestStream.Close();

    WebResponse response = request.GetResponse();

    return response;
}

Lorsque j'appelle cette méthode, j'ai et "EOF inattendu". exception:

System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count) +7067555
   System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) +116
   System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) +123
   System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) +7243141
   System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) +217
   System.Threading.ExecutionContext.runTryCode(Object userData) +376

Avez-vous un indice?

Merci

Était-ce utile?

La solution

Je pense que votre problème est le codage UTF8. Par défaut, le codage UTF-8 ajoute une nomenclature (ByteOrderMark) et votre ContentLength n'est pas synchronisé avec les données en cours de transmission. Essayez de créer un encodage UTF8 sans nomenclature (utilisez une autre surcharge) et cela devrait résoudre le problème.

De plus, je n’ajouterais pas moi-même l’en-tête d'authentification de base. Je voudrais simplement définir les références sur la demande et laisser HttpWebRequest se charger de l’authentification pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top