Ik maak in .NET een AppDomain aan waarin ik een applicatie wil hosten:
Nu wil ik een future-constructie opzetten om daar methodes op aan te roepen:
Bovenstaand code compileert en geeft geen runtime fouten. Alleen wordt de remote method call nooit uitgevoerd. Als ik de IMessage niet schedule, maar onmiddellijk uitvoer (met een call identiek hetzelfde als nu: GetRealProxy + Invoke), dan is het geen probleem.
Ik vermoed dat de scheiding van AppDomains hier voor iets tussenzit, maar hoe ik het precies kan oplossen, weet ik eigenlijk niet.
Iemand een idee?
C#:
1
2
3
| AppDomain appDomain = AppDomain.CreateDomain(...); MyApp myApp = (MyApp)appDomain.CreateInstanceAndUnwrap(...); |
Nu wil ik een future-constructie opzetten om daar methodes op aan te roepen:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| /******************************************************** * Afgeleide van RealProxy ********************************************************/ public class FutureProxy : RealProxy { public MyApp _myApp; public IMessage _futureReturnMessage; // Onthoud de originele proxy van het object public FutureProxy(MyApp myApp) { _myApp = myApp; } // Onderschep alle berichten, en schedule ze via de thread pool. // Geef als return-waard een lege message terug public override IMessage Invoke(IMessage message) { ThreadPool.QueueUserWorkItem(delegate { _futureReturnMessage = RemotingServices.GetRealProxy(_myApp).Invoke(message); }); return new ReturnMessage(/* fake empty message */); } } |
Bovenstaand code compileert en geeft geen runtime fouten. Alleen wordt de remote method call nooit uitgevoerd. Als ik de IMessage niet schedule, maar onmiddellijk uitvoer (met een call identiek hetzelfde als nu: GetRealProxy + Invoke), dan is het geen probleem.
Ik vermoed dat de scheiding van AppDomains hier voor iets tussenzit, maar hoe ik het precies kan oplossen, weet ik eigenlijk niet.
Iemand een idee?
Wij onderbreken deze thread voor reclame:
http://kalders.be