2017-05-09 4 views
0

Ich erstelle eine WebAPI in. NetCore 1.1, die einen externen Dienst aufrufen muss. Wenn ich es mit dotnet run laufen funktioniert es perfekt, aber wenn ich Docker verwenden erhalte ich eine. NetCore PostAsync und GetAsync funktionieren nicht mit Docker

mindestens ein Fehler aufgetreten. (Ein Fehler ist aufgetreten, während die Anfrage zu senden.)

Das ist mein Beitrag Methode:

public static string Post(string url, string jsonObject, string serviceName) 
{ 
    // opening a connection to the microservice 
    using (HttpClient client = new HttpClient()) 
    using (HttpResponseMessage response = client.PostAsync(url, new StringContent(jsonObject, Encoding.UTF8, "application/json")).Result) 
    { 
    LogWrapper.SafeInfo(LoggingEvents.SERVICECALLER_GETSERVICESRESPONSE, "Let's test if we get an OK response from " + serviceName); 
    // we'll throw an exception in case status code is different from 200 
    response.EnsureSuccessStatusCode(); 

    LogWrapper.SafeInfo(LoggingEvents.SERVICECALLER_GETSERVICESRESPONSE, "We got an OK response from " + serviceName); 

    using (HttpContent responseContent = response.Content) 
    { 
     return responseContent.ReadAsStringAsync().Result; 
    } 
    } 
} 

Der Fehler wird client.PostAsync in Linie geworfen. Derselbe Fehler tritt in der GET-Methode auf.

Ich überprüfe bereits die URL und die Parameter.

Was es noch interessanter macht, ist, dass es nur passiert, wenn ich meine Anwendung in einem Andock-Container ausführen. Wenn ich meine Anwendung ohne Docker ausführe funktioniert es sehr gut.

Danke für Ihre Hilfe.

+0

Sie müssen tiefer gehen und die Ausnahme protokollieren. Überprüfen Sie es auf innere Ausnahmen mit zusätzlichen Informationen. Für jetzt ist deine Beschreibung zu breit. 1 möglicher Grund von 1000 - Ziel-Host ist nicht erreichbar von Andock-Netzwerk. –

+0

Run was wie? Sie müssen mehr Informationen bereitstellen. Befehle, die Sie ausführen. Wofür wird die URL gesendet? Wo diese URL ausgeführt wird Protokolliert für jeden der beteiligten Dienste. Welche Docker-Version. Wenn Docker lokal ist, wie wird es installiert/ausgeführt? –

+0

Sidenote: Sie verwenden Async-Methode in synchroner Weise mit blockierenden Aufruf '.Result', die schlechte und gefährliche Praxis ist. Verwenden Sie 'erwarten' in diesem Fall – VMAtm

Antwort

0

Sorry für den Mangel an Details, aber nach einigem Lesen und Googeln habe ich endlich das Problem entdeckt.

I hatte zwei Container auf localhost laufen so dass ich einen Dienst aus dem Behälter A zu dem Behälter B anfordernden

I die http://127.0.0.1:356/api/LogIn Adresse verwendet, aber das Problem ist, dass lokale Host in diesem Fall nicht den Fall ist weisen zu meiner Maschine, aber zu dem Behälter A selbst. Deshalb könnte ich es mit dotnet run aber nicht mit Docker arbeiten lassen.

In der Tat, this answer ließ mich meinen Fehler sehen.

Verwandte Themen