2012-03-30 16 views
6

Strona klienta używa javascript do publikowania wieloczęściowych danych formularzy (plików) w mojej witrynie ASP.NET (program obsługi ashx).Obsługa dużych równoczesnych poświadczeń HTTP POST w aplikacji ASP.NET

Użytkownik wybiera kilka plików i rozpoczyna równoczesne przesyłanie. Kiedy pliki są podobne do 150 MB +, generuje to kilka współbieżnych programów obsługi POST po stronie serwera ASP.NET.

Mam zaimplementowaną kontrolę sesji, wraz z funkcją captcha, aby dokładnie wiedzieć, czy to nie bot wylał mój serwer.

Ale problem dotyczy początkowego rozpoczęcia wysyłania.

każdym razem teleskopowa jest przetworzyć POST, sprawdza identyfikator sesji (session mój zwyczaj, po jednej stronie użytkownika) i dodaje rozmiar Request.ContentLength do całkowitej wielkości plików POST ed na sesję. Te dane są zapisywane w pliku XML.

Ale ponieważ kilka początkowych wpisów występuje równocześnie, program piszący XML, który rejestruje sumę bajtów "dławiki" i zgłasza 0 bajtów na sesję dla wszystkich początkowych POST s, ponieważ są one wysyłane w tym samym czasie.

Zaimplementowałem lock na moim obiekcie persister (który wykonuje zapis XML), ale teraz, dopóki jeden POST nie zostanie całkowicie przetworzony, inne nie będą mogły działać dalej.

Nawet jeśli nie robię nic z prośbami, które przychodzą po "limicie przesyłania", wciąż potrzebują czasu na przesłanie danych na serwer.

Więc moje pytania to:

Jaki jest prawidłowy wzór przetwarzać kilka jednoczesnych POST przesłane?

Czy istnieje sposób natychmiastowego porzucenia testu POST natychmiast po odfiltrowaniu żądania w kodzie obsługi programu ASP.NET i zapisaniu klienta w procesie przesyłania danych do usług IIS?

AKTUALIZACJA: Gdy lock ing tylko przy zapisie XML/obliczeniu maksymalnej długości sesji nadal mam współbieżność, która jest dobra. Teraz muszę tylko dowiedzieć się, jak usunąć sesję natychmiast z kodu obsługi Ashx.

+0

Czy wszystkie żądania HTTP z zapisem tego samego pliku? Brzmi jak zły projekt. Być może trzeba pomyśleć o użyciu usługi kolejkowania komunikatów, aby się tym zająć. Wskazane jest również utrzymywanie danych w bazie danych. – deostroll

+0

W tym przypadku chodzi w szczególności o to, że w tej samej sesji (czyli w tym samym folderze) zapisywane są dwa pliki o tej samej nazwie. Jeśli chodzi o bazę danych - jest to świetny pomysł, ale HttpPostedFile ma metodę SaveAs, która przyjmuje ścieżkę do systemu plików. Nie sprawdzałem, jak serializować publikowane pliki w DB z ASP.NET. –

Odpowiedz