2017-09-07 13 views
0

Ich muss einen Legacy-Dienst von Drittanbietern mit XML-Payload als POST-Anfrage von Asp.net Web API aufrufen, aber ich bekomme eine Ausnahme, es funktioniert gut aus dem Konsolenprogramm. Jede Idee, wie dies zu erreichen ist, wird sehr geschätzt.WebRequest.GetRequestStream löst Ausnahme beim Aufruf von AP.Net Webapi

Ausnahme bei der Ausführung der Codelinie Stream-Datenstrom = webRequest.GetRequestStream() in der SubmitRequest(): die zugrundeliegende Verbindung wurde geschlossen: ein unerwarteter Fehler bei einem senden. Innere Ausnahme: Daten von der Transportverbindung konnten nicht gelesen werden: Eine bestehende Verbindung wurde vom Remote-Host zwangsweise geschlossen.

Um dies zu testen, habe ich gerade die SubmitRequest() private Methode von Home \ Index Aktion mit einer gültigen URL WebRequest.Create aufgerufen.

Ich habe eine falsche URL (https://test.legacy3rdparty.com/API/API.aspx) anstelle von echten hier in der Frage gestellt. Aber es ist "https" URL.

private static void SubmitRequest(string request) 
{ 
byte[] dataToSend = Encoding.UTF8.GetBytes(request); 

// Change the following URL to point to production instead of integration 
WebRequest webRequest = WebRequest.Create("https://test.legacy3rdparty.com/API/API.aspx"); 
webRequest.Method = "POST"; 
webRequest.ContentLength = dataToSend.Length; 
webRequest.ContentType = "text/xml"; 
try 
{ 
    Stream dataStream = webRequest.GetRequestStream(); //THIS LINE CAUSES THE EXCEPTION 
    dataStream.Write(dataToSend, 0, dataToSend.Length); 
    dataStream.Close(); 

    string response = string.Empty; 

    try 
    { 
     WebResponse apiResponse = webRequest.GetResponse(); 


     using (StreamReader sr = new StreamReader(apiResponse.GetResponseStream())) 
     { 
      response += sr.ReadToEnd(); 
     } 
    } 
    catch (WebException wex) 
    { 
     HttpWebResponse httpResponse = wex.Response as HttpWebResponse; 
     using (Stream responseStream = httpResponse.GetResponseStream()) 
     using (StreamReader reader = new StreamReader(responseStream)) 
     { 
      response = reader.ReadToEnd(); 
     } 
    } 
} 
catch (Exception ex) 
{ 

    throw; 
} 
// Call Parse Function for the XML response 
//ParseResponse(response); 
} 

Antwort

0

Dies hatte mit TLS-Handshake zu tun. Als ich das .NET-Laufzeit-Framework in der Datei "Web.config" auf 4.6 aktualisiert habe, funktionierte es also.

<system.web> 
<httpRuntime targetFramework="4.6" /> 
</system.web> 
Verwandte Themen