2011-09-01 16 views
5

Próbuję uzyskać usługę WCF, aby wiedzieć, kiedy klient rozłączył się.Obsługa rozłączenia klienta w dupleksie Usługa WCF

Po przeczytaniu tego artykułu wcf notification on disconnect udało mi się przetestować projekt testowy.

Klient i serwer pozostają otwarte dopóki nie zamknę klienta, wtedy zdarzenie OperationContext.Current.Channel.Closed wydaje się uruchamiać po upłynięciu limitu czasu w poniższym wierszu.

<reliableSession enabled="true" ordered="true" inactivityTimeout="00:01:00" /> 

Po przetestowaniu tego działało jak chciałem, a następnie starałem się zintegrować go do większego projektu, który mam.

Wygląda na to, że zachowuje się inaczej, ponieważ OperationContext.Current.Channel.Closed uruchamia się nawet po czasie określonym w konfiguracji <reliableSession ordered="true" inactivityTimeout="00:01:00" />, nawet jeśli klient jest nadal otwarty.

Rzeczy, które zauważyłem, że są różne, to fakt, że nie mogę określić właściwości enabled = "true" w konfiguracji. Również drugi projekt używa WSDualHTTPBinding, podczas gdy pierwszy używa WSHTTPBinding.

Moje pytanie brzmi: dlaczego drugi projekt zachowuje się w ten sposób i jak mogę go zachowywać jak pierwszy?

Jeśli potrzebujesz plików z kodem lub wpisów konfiguracyjnych, daj mi znać, a otrzymam je od razu.

poważaniem

Ash

+0

Na jakich platformach działa klient? –

Odpowiedz

2

Protokół HTTP jest bezpaństwowcem i natury czysto żądanie/odpowiedź. Jak działa WSDualHTTPBinding jest to, że otwiera kanały zarówno na serwerze, jak i na kliencie, gdy serwer jest gotowy do wysłania wiadomości, użyje kanału hostowanego przez klienta do wysłania wiadomości. Tak więc, co się dzieje, że połączenie na kliencie jest otwarte, nic nie słychać przez minutę, co jest wykrywane jako "nieaktywne", a następnie klient zamyka połączenie. Nie jestem pewien, jakie są twoje wymagania, ale możesz rozważyć przełączenie na TCPBinding, ponieważ jest to połączenie stanowe.

Czy klient jest w stanie odbierać wiadomości z serwera? Czy wiadomości są regularnie wysyłane? Czy na pewno klient rzeczywiście utrzymuje połączenie otwarte?

+0

Cześć Jason dzięki za odpowiedź. Otrzymam odpowiedzi na twoje pytania i wkrótce je tutaj zamieszczę. – user589195