Frage

Ich habe die folgende Funktion, die unter Verwendung von XML Https Anfrage

sendet
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;
}

Wenn ich diese Methode aufrufen, ich habe und „unerwartete EOF“ Ausnahme:

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

Jeder Hinweis?

Danke

War es hilfreich?

Lösung

Ich denke, Ihr Problem ist die UTF8-Codierung. Standardmäßig fügt UTF-8-Codierung eine BOM (ByteOrderMark), und die ContentLength ist nicht synchron mit den Daten übertragen werden. Versuchen Sie die Schaffung eines UTF8 ohne BOM (verwenden Sie eine andere Überlast) und es sollte das Problem beheben.

Außerdem würde ich den grundlegenden auth-Header selbst nicht hinzufügen. Ich würde nur das crdentials auf Antrag gesetzt und lassen Sie HttpWebRequest für mich die Auth tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top