Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wraz z wprowadzeniem aplikacji rozproszonych i opartych na sieci, niektóre wywołania metod mogą zająć niedopuszczalnie długi czas. Opóźnienie połączenia sieciowego może być wysokie, maszyna serwera może obsługiwać wielu klientów lub składnik serwera może przekazywać dużą ilość danych, takich jak plik multimedialny. Użytkownicy powinni mieć możliwość anulowania żądania, które trwa zbyt długo, a aplikacja powinna mieć możliwość obsługi żądań anulowania i kontynuowania swojej innej pracy. W modelu COM można użyć interfejsu IMessageFilter, aby anulować oczekujące wywołanie pochodzące z jednowątkowego apartamentu.
Po splanowaniu wywołania serwer proxy tworzy obiekt anulowania, który implementuje interfejs ICancelMethodCalls. Obiekt cancel jest skojarzony zarówno z wywołaniem, jak i wątkiem, na którym wywołanie jest oczekujące.
Aby anulować oczekujące wywołanie, klient przekazuje żądanie anulowania za pośrednictwem obiektu cancel, który obsługuje szczegóły powiadamiania obiektu serwera o anulowaniu wywołania. Jeśli wywołana metoda nie została zwrócona, obiekt serwera, podczas wykrywania żądania anulowania, czyści wszystkie przydzielone zasoby programu i powiadamia klienta, zwracając odpowiednią wartość HRESULT, że anulował wykonywanie wywołania. Jeśli wywołana metoda została już zwrócona, obiekt cancel powiadamia klienta. W obu przypadkach wątek klienta jest odblokowany i może kontynuować przetwarzanie.
Sposób, w jaki obiekt serwera odpowiada na żądanie anulowania, jest według uznania implementatora serwera, ale wątek wywołujący na kliencie będzie zawsze odblokowany i zignoruje wszystkie wyniki, które serwer próbuje przekazać do niego. Anulowanie obiektów zapewnia metodę żądania anulowania aktualnie uruchomionej metody, ale nie ma gwarancji, że obiekt serwera przestanie przetwarzać wywołanie. Na przykład wywołanie mogło już zostać zwrócone lub obiekt serwera może nie obsługiwać anulowania obiektów.
Com automatycznie zapewnia standardową implementację obiektów anulowania dla obiektów i interfejsów klienta korzystających ze standardowego marshalingu. W przypadku obiektów i interfejsów korzystających z marshalingu niestandardowego należy zaimplementować własny obiekt anulowania.
Obecnie obiekty anulujące obsługują tylko wywołania synchroniczne.
Tematy pokrewne