[.NET] GetType op een SingleCall SAO

Pagina: 1
Acties:

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 06-05 00:07

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
Schets
Ik maak gebruik van SingleCall Server Activated Objects zoals in onderstaand voorbeeld:
C#:
1
2
3
MyType objectOfMyType = (Mytype)Activator.GetObject(typeof(MyType), strMyTypeUri);

Type myType = objectOfMyType.GetType();


Probleem
Nu is er voor objectOfMyType in principe geen "echte" Type informatie aanwezig, omdat die net pas runtime wordt bepaald. Dus:
C#:
1
2
3
typeof(MyType) != myType.GetType();

typeof(System.MarshalByRefObject) == myType.GetType();


Vraag
Bestaat er een mogelijkheid om via 1 of andere vorm van reflectie, zonder MyType aan te passen (door bv GetType te overriden), erachter te komen wat het "echte" (remote) Type van objectOfMyType is? Of stel ik nu een hele domme vraag?

Ik heb al gekeken naar Type.IsInstanceOfType, maar die gaat ook niet over de remoting boundaries heen.

Wij onderbreken deze thread voor reclame:
http://kalders.be


Verwijderd

Ik heb er verder 0 verstand van, maar misschien is het een optie om je remote object een Type property te geven met het type dat je krijgt met een typeof( object ) op de server? En als dit niet bekend is op de client, misschien heb je aan alleen de naam van het type genoeg en kun je gewoon een string met de naam gebruiken voor de property?

Zoals ik al zei weet ik hier niks van, maar het lijkt me een veelvoorkomend probleem en ik kan me niet voorstellen dat dit niet netter kan worden opgelost... of ik begrijp je vraag niet, dat kan natuurlijk ook :+

Iemand? :)

[ Voor 1% gewijzigd door Verwijderd op 17-06-2005 14:16 . Reden: Had niet goed gelezen, MyType mocht niet worden aangepast ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:59
Wat wil je eigenlijk precies doen ?

Je weet toch het type van het object, want je hebt het zelf net gemaakt, en je hebt type-informatie moeten doorgeven ?

https://fgheysels.github.io/


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 06-05 00:07

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
De kloterij is dat normaal die type informatie zit in ObjRef.TypeInfo, de gemarshalde versie van het object. Maar omdat het hier om SingleCall gaat, is objRef in het onderstaande voorbeeld null.
C#:
1
2
3
MarshalByRefObject refToObjectOfMyType = (MarshalByRefObject)objectOfMyType;

ObjRef objRef = RemotingServices.GetObjRefForProxy(refToObjectOfMyType);


Zelf marshallen heeft natuurlijk geen zin, want dan gooit ie er gewoon client-side type information omheen (en ik heb net het type van op de server nodig).
C#:
1
2
3
ObjRef objRef = RemotingServices.Marshal(refToObjectOfMyType);

objRef.TypeInfo.Name == "System.MarshalByRefObject, mscorlib, Version=1.0.3300.0, Culture=neutral";
whoami schreef op vrijdag 17 juni 2005 @ 14:29:
Je weet toch het type van het object, want je hebt het zelf net gemaakt, en je hebt type-informatie moeten doorgeven ?
Ik heb die MyType objecten op een andere plek aangemaakt waardoor ze nu alleen maar als object beschikbaar zijn. Behalve MyType, zijn er ook MyTypeA, MyTypeB, etc, dus ik weet niet welke types er rondslingeren.

Nu kan ik op zich die MyType's wel nog achterhalen op een andere manier, en dat is ook hoe ik mijn probleem ga oplossen. Maar ik vroeg me dus af of je niet het type kan achterhalen van een object op de server dat via SingleCall wordt aangemaakt.

Bij nader inzien is dat eigenlijk best onzinnig, want de server kan best een type implementeren waar je client-side niet over beschikt, maar het probleem was dat ik er dynamisch achter wou komen of objectOfMyType een bepaalde interface implementeerde. Maar zoals het er nu naar uit ziet, kan je daar niet runtime achterkomen zonder dat je zelf een mechanisme hiervoor voorziet.

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
Het probleem is dat je op de server EN op de client je types moet hebben gedefinieerd wil je deze kunnen terugcasten. Er zijn verschillende truken om dat te doen. Lees bijv dit eens.
Een heel goed boek hierover is van van Ingo Rammer

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:59
Idd, de client moet 'iets' afweten van het type dat je gecreeërd hebt.

Mijn remoted objects implementeren bv een bepaalde interface. Die interface is op de client gekend.

https://fgheysels.github.io/


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 06-05 00:07

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
joopst schreef op vrijdag 17 juni 2005 @ 14:44:
Het probleem is dat je op de server EN op de client je types moet hebben gedefinieerd wil je deze kunnen terugcasten. Er zijn verschillende truken om dat te doen. Lees bijv dit eens.
Alleen jammer dat het stuk waarin gebeurt wat ik wil, net alleen over client-activation gaat :) Toch bedankt voor de link (Ingo Rammer was ik al bekend mee).
whoami schreef op vrijdag 17 juni 2005 @ 14:47:
Idd, de client moet 'iets' afweten van het type dat je gecreeërd hebt.

Mijn remoted objects implementeren bv een bepaalde interface. Die interface is op de client gekend.
Hmja, op zich zijn de interfaces bij mij ook bekend (aparte interface dll) en weet ik van elk objectOfMyType welk MyType het is. Alleen is het onmogelijk om daar runtime mee te spelen. Immers:
C#:
1
2
3
typeof(MyType).GetInterfaces().Length != 0;

objectOfMyType.GetType().GetInterfaces().Length == 0;


Maar goed, ik denk dat we dezelfde conlusie trekken :)

edit:
Enige stukje dat ik hierover kon vinden op internet dat hier specifiek over gaat: http://blogs.msdn.com/manishg/archive/2004/09/09/227400.aspx

[ Voor 7% gewijzigd door GrimaceODespair op 17-06-2005 16:27 ]

Wij onderbreken deze thread voor reclame:
http://kalders.be


Verwijderd

Ik zou eens kijken naar Reflection

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 06-05 00:07

GrimaceODespair

eens een tettenman, altijd ...

Topicstarter
Verwijderd schreef op vrijdag 17 juni 2005 @ 21:43:
Ik zou eens kijken naar Reflection
Met reflectie kan je types onderzoeken. Op welke manier zou jij met reflectie dit probleem oplossen, als net het achterhalen van het type het probleem is?

Wij onderbreken deze thread voor reclame:
http://kalders.be

Pagina: 1