* whoami wijst naar de topictitel.
Dat is althans waar ik denk dat het probleem zit.
Ik heb een remoted object, een service die een kanaal en dat remote object 'registreerd' en een client applicatie die gebruik maakt van dat remote object.
Nu, wat is het probleem:
alles werkt perfect, tot wanneer ik de applicatie een tijdje open laat staan. Als ik na pakweg 10 minuten geen enkele method van m'n remote object aanroep, en daarna roep ik er wel nog eens een aan, dan werkt het boeltje niet meer.
Ik maak gebruik van een Sponsor om de lease van m'n remote object te vernieuwen, zodanig dat het object niet gecollect wordt door de Garbage collector.
Ik zal ff met wat code illustreren (enkel de relevante code ):
Remote object
In m'n client applicatie, registreer ik een Sponsor voor m'n remote object:
Ik ben er zeker van dat de sponsor van het remote object de lease gaat gaan verlengen als hij dat gevraagd wordt. Dat heb ik dmv debugging / tracing nagegaan.
In m'n clientApp heb ik dan bv volgende code:
Deze code werkt dus altijd goed. Als ik m'n applicatie opstart, en ik zorg ervoor dat die code uitgevoerd wordt, dan wordt m'n event getriggered.
Echter, als ik een aantal minuten wacht, en ik laat die code opnieuw uitvoeren, dan kom ik in de then - tak van die if (dat wil dus zeggen dat _remObj != null), en dan zou dus TriggerTheEvent moeten uitgevoerd worden.
Dat gebeurt dus niet, ik kan op dat moment ook niet in die method gaan steppen.
Is m'n remote object dan toch verschwunden?
MIsschien is er hier iemand met wat meer ervaring in remoting die ff een nieuw licht op m'n probleem kan laten schijnen.
Thx.
Dat is althans waar ik denk dat het probleem zit.
Ik heb een remoted object, een service die een kanaal en dat remote object 'registreerd' en een client applicatie die gebruik maakt van dat remote object.
Nu, wat is het probleem:
alles werkt perfect, tot wanneer ik de applicatie een tijdje open laat staan. Als ik na pakweg 10 minuten geen enkele method van m'n remote object aanroep, en daarna roep ik er wel nog eens een aan, dan werkt het boeltje niet meer.
Ik maak gebruik van een Sponsor om de lease van m'n remote object te vernieuwen, zodanig dat het object niet gecollect wordt door de Garbage collector.
Ik zal ff met wat code illustreren (enkel de relevante code ):
Remote object
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| class MyRemoteObject : MarshalByRefObj
{
public override object InitializeLifetimeService()
{
ILease lease = (ILease)base.InitializeLifetimeService();
if( lease.CurrentState == LeaseState.Initial )
{
lease.InitialLeaseTime = TimeSpan.FromMinutes(2);
lease.SponsorshipTimeout = TimeSpan.FromMinutes(3);
lease.RenewOnCallTime = TimeSpan.FromMinutes(2);
}
return lease;
}
} |
In m'n client applicatie, registreer ik een Sponsor voor m'n remote object:
code:
1
2
3
4
5
6
7
8
9
| // Creatie van het remote object: _remObj = (MyRemoteObject)Activator.GetObject(typeof(MyRemoteObject), .... ); // event handler aan event hangen: _remObj.MyEventHandler += new MyEventHandlerType(OnReceiveEvent); // Create a sponsor for this object: ILease lease = (ILease)RemotingServices.GetLifetimeService(_remObj); lease.Register(new MySponsor()); |
Ik ben er zeker van dat de sponsor van het remote object de lease gaat gaan verlengen als hij dat gevraagd wordt. Dat heb ik dmv debugging / tracing nagegaan.
In m'n clientApp heb ik dan bv volgende code:
code:
1
2
3
4
| if( _connected && _remObj != null )
{
_remObj.TriggerTheEvent();
} |
Deze code werkt dus altijd goed. Als ik m'n applicatie opstart, en ik zorg ervoor dat die code uitgevoerd wordt, dan wordt m'n event getriggered.
Echter, als ik een aantal minuten wacht, en ik laat die code opnieuw uitvoeren, dan kom ik in de then - tak van die if (dat wil dus zeggen dat _remObj != null), en dan zou dus TriggerTheEvent moeten uitgevoerd worden.
Dat gebeurt dus niet, ik kan op dat moment ook niet in die method gaan steppen.
Is m'n remote object dan toch verschwunden?
MIsschien is er hier iemand met wat meer ervaring in remoting die ff een nieuw licht op m'n probleem kan laten schijnen.
Thx.
https://fgheysels.github.io/