2012-03-12 12 views
6

Mamy bardzo trudny problem z interoperem, w którym wątek używany do inicjowania systemu innej firmy musi być tym samym wątkiem, w którym został przerwany. Nieprzestrzeganie tego spowoduje zakleszczenie. Wykonujemy współdziałanie z usługi WCF hostowanej w IIS. Obecnie to oczyszczanie odbywa się w dyspozycji i zwykle działa bardzo dobrze. Niestety, przy dużym obciążeniu IIS zrobi niegrzeczny rozładunek i nigdy nie zadzwonimy do dispose. Możemy przenieść logikę zamknięcia do krytycznego finalizatora, ale to nie pomaga, ponieważ nie mamy już dostępu do wątku inicjującego! W tym momencie wydaje nam się, że jedynym regresem jest powiadomienie o CLR, że AppDomain jest teraz prawdopodobnie w stanie uszkodzonym. Jednak nie jestem pewien, jak to zrobić (lub jeśli jest to nawet możliwe). Być może jest to użyteczność umów na poziomie klasy, ale przyznaję, że tak naprawdę nie rozumiem ich w pełni.Czy można używać jednostek CER, aby finalizacja nigdy nie była wywoływana?

EDYCJA: Alternatywnie może to być postrzegane jako problem z powinowactwem do gwintów w finalizatorze. Jeśli ktoś ma sprytne rozwiązanie, mam tylko uszy :)

+0

Czy komponent, z którym masz do czynienia, jest natywny czy zarządzany? – JaredPar

+0

Natywny. To jest api do systemu z własnym zarządzaniem pamięcią, itp. – Jeff

Odpowiedz

1

Spróbuj podzielić kod, który zależy od tej rodzimej zależności od autonomicznej aplikacji usług Windows, jeśli to możliwe. Jeśli nie działa dobrze z WCF/IIS, należy unikać konfliktów zamiast walczyć z nim.

+0

Tak, możesz mieć rację. Rozmawialiśmy o tym, chociaż niechętnie podaję się jeszcze :) – Jeff

+0

Powinienem był również powiedzieć - nie jestem pewien, czy to faktycznie rozwiązuje problem, ponieważ rozładowania CLR są prawdopodobnie faktem (choć mniej prawdopodobne w twoje rozwiązanie, jestem pewien). – Jeff

+0

Masz na myśli, że źle się czujesz po zwolnieniu aplikacji? Jest to zgodne z projektem, ponieważ pula aplikacji będzie okresowo poddawana recyklingowi (zapoznaj się z ustawieniami), a program ASP.NET również uruchomi się ponownie, http://stackoverflow.com/questions/829392/how-to-discover-the-reason-of- asp-net-application-restart –

Powiązane problemy