J'ai une application qui utilise des plugins. Je charge les plugins dans un autre domaine. J'utilise la classe RemoteHandle de http://www.pocketsilicon.com/post/Things-That-Make-My-Life-Hell-Part-1-App-Domains.aspx pour empêcher que l'objet soit collecté après 5 minutes.Annuler l'inscription Lease throws InvalidOperationException
Cela fonctionne très bien aussi longtemps que ma demande est en cours d'exécution, mais quand il est en cours d'arrêt i obtenir un InvalidOperationException lorsque Désenregistrement
internal static void Unregister(MarshalByRefObject value)
{
if (value != null && RemotingServices.IsTransparentProxy(value))
{
lock (_syncLock)
{
ReferencedLease r;
if (_leaseReferences.TryGetValue(value, out r) && --r.ReferenceCount <= 0)
{
// Note: Dictionary clears key and value from bucket list upon remove.
_leaseReferences.Remove(value);
r.Lease.Unregister(_instance); // <----- Here i get the exception
}
}
}
}
Stacktrace:
System.InvalidOperationException: Handle is not initialized.
at System.WeakReference.set_Target(Object value)
at System.Runtime.Remoting.IdentityHolder.SetIdentity(Identity idObj, String URI, DuplicateIdentityOption duplicateOption)
at System.Runtime.Remoting.IdentityHolder.FindOrCreateIdentity(String objURI, String URL, ObjRef objectRef)
at System.Runtime.Remoting.RemotingServices.InternalUnmarshal(ObjRef objectRef, Object proxy, Boolean fRefine)
at System.Runtime.Remoting.ObjRef.GetRealObjectHelper()
at System.Runtime.Remoting.Lifetime.ILease.Unregister(ISponsor obj)
at Quick3PlugInManager.Sponsor.Unregister(MarshalByRefObject value)
at Quick3PlugInManager.RemoteHandle`1.Dispose(Boolean disposing)
at Quick3PlugInManager.RemoteHandle`1.Finalize()
Pourquoi ai-je cette exception?
C'est exact. Le domaine est déchargé et puis j'essaye de disposer le prochain plugin ... Puis-je placer les deux comme acceptés? – klundby
Je suis certain que vous ne pouvez en marquer qu'un comme accepté. –