Mam małą aplikację .Net 4.5 C#, która odczytuje informacje ze źródła danych, a następnie przekazuje te informacje do witryny internetowej, która jest witryną sieci Web .NET 4.5 Web API za pomocą prostego kontrolera. Kontroler otrzymuje dane i umieszcza je w bazie danych.Ograniczenia asynchroniczne .NET HTTPClient
Poniższe działa na mnie, tak szybko, jak aplikacja może czytać to może napisać i wszystko kończy się w PB:
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());
}
}
Poniższa nie działa. IT posty o tysiąc-dziwnych zapisów, a następnie pojawia się z wieloma błędami wszystko z komunikatem „zadanie zostało anulowane”, ale po około 10 sekundach wznawia przetwarzanie:
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());
}
}
Pełne błędu:
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
Jakieś szybkie poprawki do tego? Z tego, co mogę powiedzieć, zabrakło czegoś, nici, gniazd, kto wie :-)
Wszelkie wskazówki byłyby mile widziane, chciałbym, aby to działało, ponieważ możesz sobie wyobrazić, że robienie synchronizacji POST jest znacznie wolniejsze niż asynchronicznie.
Dla pewności nie był to mój komputer, lokalny program antywirusowy lub sieć, której próbowałem na serwerze W2k8 R2, wirtualny pulpit gościa systemu Windows 7 (nowa wersja) i komputer z systemem Windows 8, a także ten sam wynik.
Więcej informacji: Ja testowałem to z częściowym sukcesem z połączenia LAN z mniejszym zestawie danych (10000 rekordów), a DefaultConnectionLimit 100. Jednak w produkcji z 500.000 rekordów, podczas wysyłania do serwera zdalnego przez Internet (wciąż niskie opóźnienie 25ms-50ms) nie odniosłem żadnego sukcesu.
Dzięki z góry za wszelką pomoc :-)
Co za wiadomość dla tego wyjątku? –
Czy nie brakuje Ci "oczekującego" w swojej drugiej wersji? Wygląda na to, że nie powinno się nawet kompilować ... –
@JonSkontaktuj się z nami, skopiuj i wklej błąd w moim imieniu! Poprawiłem to. – Dominik