2011-06-14 13 views
32

muszę korzystać z połączeń cross-AppDomain w mojej aplikacji, a czasami mam ten RemotingException:„Obiekt został odłączony lub nie istnieje na serwerze” wyjątek

obiektu „/ 2fa53226_da41_42ba_b185_ec7d9c454712/ygiw + xfegmkhdinj7g2kpkhc_7 .rem 'został odłączony lub nie istnieje na serwerze.

Obiekt docelowy jest wciąż żywy, sprawdziłem go.

UPD Ustawiłem punkt przerwania w finalizatorze docelowego obiektu i nigdy nie trafiłem. Tak więc obiekt ten jest żywy i nie został poddany GC.

Odpowiedz

30

Jest tak prawdopodobnie dlatego, że lokalny garbage collector po stronie serwera zbiera obiekt. Możesz temu zapobiec, odnawiając leasing. Możesz przeczytać więcej na ten temat w tych artykułach:

Aktualizacja: Niestety, kwestie MSDN Magazine od 2008 lub starsze nie są już przeglądać online, ale jedynie jako Pliki .chm, które musisz pobrać na lokalny komputer. Dotychczasowe problemy znaleźć można w:

+0

Nie może być GC, ponieważ po stronie serwera zachowuje odwołanie do tego obiektu. – user626528

+1

Jeśli wyłączyłeś zarządzanie Lifetime, obiekt pozostaje odsłonięty przez zdalne uruchamianie (więc nie można go włączyć), dopóki nie rozłączysz go po stronie serwera. – Guillaume

+0

@Guillaume, w jaki sposób mogę odłączyć odwołanie w bazie danych w wielu domenach? – user626528

12

To dlatego, że Dożywotnie zarządzanie po stronie serwera odłącza obiekt po wygaśnięciu dzierżawy, aby GC mogło go odebrać. Jeśli spróbujesz użyć go po stronie klienta, otrzymasz wyjątek, nawet jeśli nie został jeszcze przesłany GC na serwerze (np. Ponieważ nadal istnieje inne odniesienie do niego), ale umowa dzierżawy wygasła. Ma to na celu uniknięcie nieprzewidywalnego zachowania. Przyjęta odpowiedź stanowi dobre odniesienie do prawidłowego zarządzania czasem działania Zdalnych obiektów .NET.

+1

Dziękuję za wyjaśnienie, głosowałem – Shelest

0

w moim przypadku problemem było to, że w komputerze klienckim, nie było wirtualny adapter sieciowy aktywny, wyłączenie kart sieciowych wirtualnych, problem został rozwiązany

0

W moim przypadku to się dzieje z SQL LocalDB przechowywane w folderze App_Data wewnątrz projektu Web. Ilekroć próbuję użyć konsoli pakietu do uruchomienia update-database, aby zainicjować moją bazę danych Entity Framework za pomocą migracji, nic się nie dzieje. Potem po chwili dostaję tego błędu.

Rozwiązałem to, zmieniając uprawnienia do plików na App_Data. Raz ustalony, voila, zadziałało.

Powiązane problemy