Asynchrone Einschränkungen von .NET HTTPClient
Ich besitze eine kleine .NET 4.5 C # -App, die Informationen aus einer Datenquelle liest und diese Informationen dann mit einem einfachen Controller auf eine Website überträgt, bei der es sich um eine .NET 4.5-Web-API-Site handelt. Der Controller empfängt die Daten und legt sie in einer Datenbank ab.
Folgendes funktioniert für mich, so schnell die Anwendung lesen und schreiben kann und alles in der DB landet:
public static void PostDataToWebApi(MyDataClass tData)
{
HttpResponseMessage s = null;
try
{
s = client.PostAsJsonAsync("/api/Station/Collector", tData).Result;
s.EnsureSuccessStatusCode();
}
catch (Exception e)
{
Console.WriteLine("ERROR (ClientPost): " + e.ToString());
}
}
Folgendes funktioniert NICHT. Es gibt ungefähr 1000 Datensätze aus und zeigt dann eine Reihe von Fehlern an, die alle die Meldung "Eine Aufgabe wurde abgebrochen" enthalten. Nach etwa 10 Sekunden wird die Verarbeitung fortgesetzt:
public static async void PostDataToWebApi(MyDataClass tData)
{
HttpResponseMessage s = null;
try
{
s = await client.PostAsJsonAsync("/api/Station/Collector", tData);
s.EnsureSuccessStatusCode();
}
catch (Exception e)
{
Console.WriteLine("ERROR (ClientPost): " + e.ToString());
}
}
Der volle Fehler ist:
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at IICE_DataCollector_Remote.Program.<PostDataToWebApi>d__7.MoveNext() in e:\Users\TestUser.TEST\Documents\Visual Studio 2012\Projects\Test_App-trunk\TestCollector\Program.cs:line 475
Irgendwelche schnellen Lösungen dafür? Soweit ich das beurteilen kann, geht etwas aus, Threads, Sockets, wer weiß :-)
Für jeden Hinweis wäre ich dankbar. Ich würde es begrüßen, wenn dies funktioniert, da Sie sich vorstellen können, dass das synchrone Durchführen des POST erheblich langsamer als asynchron ist.
Nur um sicherzugehen, dass es nicht mein Computer, lokales Antivirus-Programm oder Netzwerk war, das ich auf einem W2k8 R2-Server, einem virtuellen Windows 7-Gast-Desktop (neuer Build) und einem Windows 8-Computer ausprobiert habe, mit demselben Ergebnis.
Mehr Info : Ich habe dies mit teilweisem Erfolg anhand einer LAN-Verbindung mit einem kleineren Datensatz (10.000 Datensätze) und einem DefaultConnectionLimit von 100 getestet. In der Produktion mit 500.000 Datensätzen jedoch beim Posten auf einem Remote-Server über das Internet (immer noch niedrige Latenz von 25 ms) -50ms) Ich hatte keinen Erfolg.
Vielen Dank im Voraus für jede Hilfe :-)