Autor Beitrag
peeage
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 08.11.12 13:34 
Hallo zusammen,

ich habe einen Soap- Service, über welchen Commands abgeholt werden.

Hier der Aufbau des Service- Interfaces:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
type
  ISoapSvc = interface( IInvokable )
  ['{44CCD15C-A354-47F0-B9FD-E2BA41FA6B40}']
    function GetCommand : TCommand; stdcall;
  end;

  TCommand = class( TRemotable );

  TCmdHostName = class( TCommand );

implementation

uses
  Soap.InvokeRegistry;

initialization
  InvRegistry.RegisterInterface( TypeInfo(ISoapSvc) );

  RemClassRegistry.RegisterXSClass( TCommand );
  RemClassRegistry.RegisterSerializeOptions( TCommand, [xoLiteralParam] );

  RemClassRegistry.RegisterXSClass( TCmdHostName );
  RemClassRegistry.RegisterSerializeOptions( TCmdHostName, [xoLiteralParam] );


Der Service stellt die Funktion "GetCommand" bereit. Zurückgegeben wird eine Instanz vom Typ "TCommand". Nun kommt es bspw. vor, dass der Command "TCmdHostName" (abgeleitet von TCommand) zurückgegeben wird. Auf der Gegenseite (Client) wird dann aber keine TCmdHostName- Instanz bereitgestellt, sondern eine Instanz der Basisklasse "TCommand".

Ich bin der Meinung, dass ich das Übergeben von abgeleiteten Instanzen vor Jahren schonmal hinbekommen habe.
peeage Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 08.11.12 23:13 
Hat sich erledigt!

Ich hatte für die Klassen TCommand und TCmdHostName als Converter- Option xoLiteralParam gesetzt (z.B.: RemClassRegistry.RegisterSerializeOptions(TCommand, [xoLiteralParam])). Im literalen Dokumentenstil werden Klassen, welche von TRemoteable abgeleiteten Klassen erben, nicht unterstützt.