Equals dans objet remote: Identity/ServerIdentity cast exception

Résolu
joebarthib Messages postés 7 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 13 octobre 2014 - 12 févr. 2007 à 16:56
joebarthib Messages postés 7 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 13 octobre 2014 - 13 févr. 2007 à 14:20
salut,


j'ai une appli client/serveur qui fait du .Net Remoting. J'ai redéfini le Equals d'un objet SCProfileImpl à moi :

publicoverridebool Equals(System.Object obj)
{
SCProfileImpl myobj = obj as SCProfileImpl;
// If parameter is null return false.
if(myobj == null)
returnfalse;
// If both are null, or both are same instance, return true.
if(System.Object.ReferenceEquals(this, myobj))
returntrue;
 
bool result = false;
try
{
string imei1 = this.GetIMEI();
string imei2 = myobj.GetIMEI(); // exception is raised here
string imsi1 = this.GetIMSI();
string imsi2 = myobj.GetIMSI(); result (imei1 imei2) && (imsi1 == imsi2);
}
catch(Exception e)
{
(...)
}
return result;
}


Dans mon client, lorsque je fais un appel à Array.IndexOf(desProfils,
unProfil), où ces SCProfileImpl ont préalablement été retournés par le
serveur, le IndexOf appelle en interne le SCProfileImpl.Equals, qui me
lance une exception "Unable to cast object of type 'System.Runtime.Remoting.Identity' to type 'System.Runtime.Remoting.ServerIdentity'".

Ca fait un moment que je cherche, je tourne en rond :-(

Je précise juste que dans ce SCProfileImpl, j'ai surchargé le InitializeLifetimeService
pour qu'il retourne null, et que l'exception ne se produit qu'après un
arrêt/relancement du serveur, alors que le client ne s'est pas arrêté
de tourner.


Est-ce que quelqu'un a une idée de l'origine de ce problème ?

Merci beaucoup !

Thibaud

1 réponse

joebarthib Messages postés 7 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 13 octobre 2014
13 févr. 2007 à 14:20
ok j'ai trouvé... mon Array.IndexOf(desProfils, unProfil) comparait "desProfils" obtenus par la nouvelle instance du serveur, alors que "unProfil" datait d'avant que le serveur ne se déconnecte puis se reconnecte ! Effectivement, pas très bon de garder des instances d'objet remote alors que le serveur s'est déconnecté. Donc maintenant je les mets à null lorsque je détecte la déconnexion. En espérant que ça serve à quelqu'un... en tout cas on peut pas dire que l'exception levée ait été très explicite !
3
Rejoignez-nous