2015-08-28 15 views
5

Próbuję kontrolować maksymalny całkowity czas trwania pojedynczego połączenia w HttpListener. Zdaję sobie sprawę z właściwości TimeoutManager i około 5 różnych wartości limitu czasu, które zawiera, ale nie jest jasne, czy każda z tych wartości będzie sumować się do łącznej liczby miejsc, w których może wystąpić opóźnienie w połączeniu.HttpListener ustawianie całkowitego limitu czasu połączenia

Szukam czegoś więcej w stylu: "Jeśli mamy połączenie, które trwa dłużej niż x s od momentu otwarcia połączenia do teraz, przerwij je, nie wysyłając niczego innego ani nie czekając na nic innego."

EDIT

Aby wyjaśnić, scenariusz, że eksperymentował z polega na serwer próbuje wysłać odpowiedź i klient nie otrzymuje. To powoduje, że HttpListenerResponse.OutputStream.Write() zawiesza się w nieskończoność. Próbowałem znaleźć metodę, którą mogę wywołać z innego wątku, aby przerwać połączenie. Próbowałem użyć OutputStream.Close() i otrzymałem Cannot Close Stream until all bytes are written. Próbowałem też HttpListenerResponse.Abort(), który nie dawał widocznych efektów.

Odpowiedz

3

Żadna z tych właściwości nie zrobi tego, co chcesz. HttpListener ma kontrolować przepływ żądań, przychodzące i wychodzące dane, więc nie obsługuje czasu między momentem, w którym odpowiedź została w pełni odebrana a wysłaniem odpowiedzi, to Twoja odpowiedzialność za zajęcie się nią.

Powinieneś stworzyć swój własny mechanizm, aby przerwać żądanie, jeśli całkowity czas jest wyższy niż żądany, wystarczy zegar może wystarczyć, gdy nowe połączenie zostanie utworzone, wstawić zegar z całkowitym czasem oczekiwania jako upływającym czasem, jeśli żądanie kończy się, zanim upłynie czas, anuluj timer, w przeciwnym razie timer przerwie żądanie.

Powiązane problemy