Wie zum Aufruf eines REST-API aus einer Windows-Dienst
Ich versuche zu rufen, eine Rest-API aus einer windows-Dienst. Ich habe nie versucht, diese vor. Ich bin nicht sicher, warum bin ich nicht in der Lage, den Anruf zu tätigen.
Mein code:
string urlParameter = "posts/1";
var client = new HttpClient();
client.BaseAddress = new Uri("http://jsonplaceholder.typicode.com/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.GetAsync(urlParameter).Result;
if (response.IsSuccessStatusCode)
{
var dataObj = response.Content.ReadAsAsync<IEnumerable<MyType>>().Result;
}
Ich erhalte die folgende Fehlermeldung:
- Meldung: Fehler beim senden der Anfrage.
- Innere Ausnahme, Meldung: {"Die zugrunde liegende Verbindung wurde geschlossen: Die
Verbindung wurde unerwartet geschlossen."} - Inneren Ausnahme-Stack-Trace-bei
System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult
ar)
Dieser Fehler wird generiert, auf die folgende Zeile:
HttpResponseMessage response = client.GetAsync(urlParameter).Result;
Irgendwelche Vorschläge würden geschätzt.
EDIT: (Aktualisiert Code)
string urlParameter = "posts/1";
var client = new HttpClient();
client.BaseAddress = new Uri("http://jsonplaceholder.typicode.com/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
try
{
//var response = await client.GetAsync(urlParameter);
var task = client.GetAsync(urlParameter);
task.Wait();
var response = task.Result;
if (response.IsSuccessStatusCode)
{
var dataObj = response.Content.ReadAsAsync<IEnumerable<MyType>>().Result;
}
}
catch (Exception ex)
{
string a = ex.Message;
string b = ex.ToString();
}
EDIT 2: (Noch immer die gleichen Fehler)
private static async void TestAPI2()
{
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Get", "application/json");
var response = await client.GetAsync("http://jsonplaceholder.typicode.com/posts/1");
string context = await response.Content.ReadAsStringAsync();
}
}
Hey, soz verpasste ich die chat-Anfrage früher, klingt wie du bist es immer, ich in der Regel hängen in der c# - chat-Raum, wenn Sie weitere Hilfe benötigen, auf diese, die pop-in. chat.stackoverflow.com/rooms/7/c
InformationsquelleAutor John Doe | 2016-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Problem hier ist, dass ...
... gibt eine Aufgabe, die Sie brauchen, zu warten, bis es als Erster über die Ziellinie.
Der sauberste Weg, um diesen Aufruf ist wie folgt ...
... dies erfordert der code ausgeführt werden, in einer async-Methode wie diese ...
... oder Sie können einfach sagen, den compiler zu warten ...
... oder eine kompaktere version sein könnte, um zu verwenden, eine Fortsetzung wie diese ...
... dieser wird die Anfrage dann, wenn die Anfrage wieder kommt asyncronously analysieren es für Sie und Ausgliedern der Aufgabe gibt die "innere Ergebnis", wie dieser code erstellt eine Aufgabe>> und Sie wollen einfach nur die IEnumerable-also warten auf die gelöste Aufgabe bekommt man das Ergebnis von 2 Aufgaben werden nacheinander ausgeführt 🙂
... Ich schaute auf Ihre spezifischen code und lief, in eine neue Konsole app, aktualisieren Sie bitte diese ...
Hmmm ... ok, wenn Sie konnte, aktualisieren Sie den code in deine Frage vielleicht mit einem zu Bearbeiten, die zeigt, dass die Aufgabe richtig eingesetzt, werden details der neuen Ausnahme-ich sollte in der Lage sein, um Ihnen zu helfen, aber das ist schwer zu sagen, ohne dass der eigentliche code stecken Sie mit. Ich weiß, meine Antwort funktioniert wie ich diese Art der Sache die ganze Zeit.
Aktualisiert code, wie verlangt
ok einige Probleme gefunden ... Siehe aktualisierte Antwort, das funktioniert perfekt für mich, sieht aus wie Sie wern nicht mit warten auf die zweite Aufgabe, und Sie wurden versucht zu Lesen, eine Sammlung, wenn Sie nur 1 Artikel zu Lesen
Ja, es funktioniert, in eine "console-app", jedoch der gleiche code funktioniert nicht in einer Windows-Dienst.
InformationsquelleAutor War
Ja, es funktioniert, in eine "console-app", jedoch der gleiche code funktioniert nicht in einer Windows-Dienst. – John Doe
Möchte Antworten auf diesen Kommentar. Ich habe konfrontiert, die das ähnliche Problem . Rest-API fehlgeschlagen zu machen, rufen Sie aus windows-Dienst, aber es funktionierte von der console-Anwendung.
gezeigt, wie
Alles passiert ist für mich aufgrund der firewall-Problem. Und schließlich in der Lage, diese zu lösen, mithilfe der proxy-Einstellungen im RestClient und es funktionierte.
InformationsquelleAutor JSH