2011-06-14 15 views
32

ho bisogno di usare le chiamate cross-AppDomain nella mia app, e qualche volta ho questo RemotingException:"L'oggetto è stato scollegato o non esiste sul server" eccezione

Oggetto '/ 2fa53226_da41_42ba_b185_ec7d9c454712/ygiw + xfegmkhdinj7g2kpkhc_7 .rem 'è stato disconnesso o non esiste sul server.

L'oggetto di destinazione è ancora vivo, l'ho controllato.

UPD Ho impostato il punto di interruzione nel finalizzatore dell'oggetto di destinazione e non ha mai raggiunto. Quindi, questo oggetto è vivo e non era GC'ed.

risposta

30

Ciò è probabilmente dovuto al fatto che il garbage collector locale sul lato server raccoglie l'oggetto. Puoi impedirlo rinnovando il leasing. Potete leggere di più su questo in questi articoli:

Aggiornamento: Purtroppo, i problemi MSDN Magazine dal 2008 o più anziani non sono più browseable on-line, ma solo come File .chm che devi scaricare sul tuo computer locale. I numeri precedenti si possono trovare in:

+0

Non può essere convertito in GC, perché il lato server continua a fare riferimento a questo oggetto. – user626528

+1

Se è stata disabilitata la gestione a vita, l'oggetto rimane esposto tramite remoting (quindi non può essere convertito in GC) finché non lo si disconnette dal lato server. – Guillaume

+0

@Guillaume, come posso disconnettere il riferimento marshalled interdominio? – user626528

12

Questo perché il La gestione a vita sul lato server disconnette l'oggetto al termine del lease, per consentire a GC di raccoglierlo. Se si tenta di usarlo dal lato client, si otterrà un'eccezione, anche se non è stata ancora GC sul server (ad esempio perché esiste ancora un altro riferimento ad esso) ma il lease è scaduto. Questo per evitare comportamenti imprevedibili. La risposta accettata fornisce un buon riferimento su come gestire correttamente la durata di Remote .NET Objects.

+1

Grazie per la spiegazione, votato – Shelest

0

nel mio caso, il problema è che nel computer client, v'è stato un adattatore di rete virtuale attiva, disabilitando le schede di rete virtuale, il problema è stato risolto

0

Nel mio caso, questo stava succedendo con SQL LocalDB memorizzati nella cartella App_Data all'interno del progetto Web. Ogni volta che cerco di utilizzare la console dei pacchetti per eseguire update-database per avviare il mio database Entity Framework utilizzando le migrazioni, non succede nulla. Poi dopo un po ', ottengo quell'errore.

Ho risolto questo problema modificando i permessi sui file su App_Data. Una volta risolto, voilà, ha funzionato.

Problemi correlati