- Windows Server 2003 - IIS 6.x
- ASP.NET 3.5 (C#)
- IE 7,8,9
- FF (bez względu na ostatnie 10 wersjach)
Scenariusz użytkownika:
Użytkownik wprowadza kryteria wyszukiwania przeciwko dużemu zestawowi danych. Po zainicjowaniu żądania są one kierowane na stronę wyników, gdzie czekają na załadowanie danych, a następnie mogą zawęzić dane.
Scenariusz techniczne:
Po użytkownik wysyła kryteriów (poprzez wywołanie ajax), UI nazywa obsługę back-end. Usługa typu back-end wysyła zapytania do systemów transakcyjnych i umieszcza otrzymane dane w "pamięci podręcznej" db - zdenormalizowanej tabeli, konfiguracji do dalszego udoskonalania danych (tj. Sortowania, filtrowania). Interfejs użytkownika czeka, aż dane zostaną zapisane w pamięci podręcznej, a po otrzymaniu powiadomienia o zakończeniu procesu przejdzie do wynikowej strony. Wynikowa strona wywołuje następnie wywołanie danych z tabeli zdenormalizowanej.
Problem:
Wyszukiwanie jest stosunkowo powolny (15-25 sekund) dla dużych zapytań, które kończą się konieczności kwerendy wiele systemów opartych na kryteriach zawartych. Jest stosunkowo szybki w przypadku innych zapytań (< 4 sekundy).
Ograniczenia techniczne:
Nie możemy całkowicie ponownie architekt to wyszukiwanie/systemowe wyników. Istnieje tutaj wiele zawiłości między powiązaniem interfejsu i zaplecza. Strona jest wymagana (z powodu ograniczeń, których nie można rozwiązać za pomocą StackOverflow), aby włączyć po spełnieniu kryteriów wyszukiwania.
Nie możemy również poprosić organizacji o denormalizację danych przed wyszukiwaniem, ponieważ dane muszą być w czasie rzeczywistym, tzn. Jeśli użytkownik wprowadza zmiany w innych systemach, dane muszą się wyświetlać poprawnie, jeśli tak się dzieje. następnie przeszukanie.
proces, który chcę podążać:
chcę oszukać trochę. Chcę wydać żądanie "pamięci podręcznej" przez asynchroniczny HttpHandler w modelu zapomnieć ognia.
Po wysłaniu zapytania chcę przenieść stronę na wynikową stronę.
Na stronie przejściowej chcę odpytać tabelę "Pamięć podręczna", aby sprawdzić, czy dane zostały już w niej wstawione.
Powodem, dla którego chcę to zrobić od razu, jest to, że strona wynikowa jest kosztowna sama w sobie (nawet bez uzyskania danych) - nadal 2 sekundy czasu ładowania, zanim nawet otrzyma połączenie z usługą, która pobiera dane z pamięci podręcznej.
Pytanie:
będzie wątek ASP.NET, która jest wywoływana przez obsługi asynchronicznego niezawodnie kontynuować przetwarzanie nawet jeśli opuścisz strony przy użyciu javascript przekierować?
Granice techniczne 2:
Tak, wiem ... Ten proces wyszukiwania nie brzmi skuteczny. Nie mogę teraz nic na to poradzić. Próbuję zrobić wszystko, co w mojej mocy, aby uzyskać nieco lepszą jakość, podczas gdy my kontynuujemy badanie tego, jak zamierzamy go ponownie zaprojektować.
Jeśli odpowiedź brzmi: "wyrzuć to i zacznij od nowa", nie odpowiadaj. To nie do przyjęcia.
Ok, daj mi zobaczyć, czy to mam. Gdy użytkownicy wyślą pewne kryteria wyszukiwania, rozpoczniesz wykonywanie zapytania asynchronicznie i natychmiast przekieruje użytkownika na stronę wyników. Następnie na stronie wyników załadujesz stronę i będziesz nadal sprawdzać, czy zapytanie zostało zakończone na serwerze, aby wyświetlić wyniki dla użytkownika. Pytasz, czy wykonanie zapytania asynchronicznego będzie kontynuowane, jeśli użytkownik opuści stronę wyników? Czy to jest poprawne? –
To jest prawie poprawne. Pytanie nie jest kontynuowane, jeśli użytkownik opuści stronę z wynikami, ale raczej będzie kontynuował działanie, gdy użytkownik zostanie przeniesiony na stronę wyników. Podczas testowania na moim komputerze lokalnym operacja asynchronizacji wydaje się nadal działać. Chciałbym jednak sprawdzić, jak wiarygodny jest ten proces. Czy to jest zaprojektowane zachowanie ASP.NET czy przypadek "działa na moim komputerze"? –
Jeśli używasz przestrzeni nazw Threading (jesteś?) Do uruchomienia asynchronicznego przetwarzania na serwerze sieci Web, nie sądzę, aby był to przypadek "działa na moim komputerze". Powinno to zdecydowanie działać zgodnie z oczekiwaniami na IIS. –