Mam projekt C# ASP.Net (inny niż MVC), który używa długo-sondowania Ajax Comet. Strona internetowa wywołuje HTTP do punktu końcowego obsługiwanego przez klasę implementującą IHttpAsyncHandler.Jak zrobić C# Ajax Comet przez WebAPI2?
Jeśli na stronie internetowej nie ma nic do zgłaszania (w ciągu kilku sekund), wysyłana jest pusta odpowiedź HTTP, a strona internetowa ponownie wywołuje. Jeśli jest coś do wysłania, a aktualizacja jest wysyłana, a strona internetowa przetwarza i ponownie wywołuje. Jest to dość standardowa technologia push i działa bardzo dobrze.
Teraz próbuję dodać punkty końcowe API, używając WebAPI2, non-MVC. Mam działające kontrolery synchroniczne, oparte na klasie ApiController.
Chciałbym skonfigurować technologię push dla wywołań interfejsu API, aby użytkownicy interfejsu API nie musieli sondować aktualizacji.
Podobnie jak w powyższej metodzie, wywołanie API punktu końcowego jest odbierane, a kontekst jest zapisywany. Jeśli upłynął limit czasu, połączenie zostanie zwrócone puste, a dzwoniący powinien ponownie zadzwonić. Jeśli aktualizacje danych w określonym limicie czasu, dane są zwracane do osoby dzwoniącej, a dzwoniący powinien ponownie zadzwonić i czekać na kolejne aktualizacje.
Problem polega na tym, że wydaje się, że nie ma asynchronicznej wersji ApiController. Celem jest uwolnienie wątku obsługującego wywołanie API, zwrócenie go do puli, a gdy dostępne są dane lub upłynął limit czasu, wątek roboczy jest używany do zwracania odpowiedzi.
Jak skonfigurować apiController, aby wątek przetwarzający połączenie został zwolniony, kontekst połączenia jest przechowywany i mogę wysłać odpowiedź na połączenie w późniejszym czasie?
Dlaczego nie używasz SignalR? –
Długie głosowanie działa i jest bardzo wydajne, szczególnie w przypadku złej jakości połączeń. Działa dobrze. Po prostu muszę dowiedzieć się, jak rozłączyć połączenie WebAPI2 tak, jakby było to standardowe żądanie HTTP. –