Autor Beitrag
Dede
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 21

Win 2000, Suse Linux 8.0
D6 Ent
BeitragVerfasst: Mi 15.09.04 17:54 
Huhu =)

//edit: Sorry is mir irgendwie ins falsche Topic gerutscht... Sollte eigentlich unter .NET

Ich hab ein dickes Problem, ich bekomm es einfach nicht hin eine Clientaktivierung einer remotefähigen Klasse durchzuführen.

Fürs bessere Verständnis hier mal der vorhandene Code:

Mein Interface:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
unit SharedInterface;

{%UNSAFECODE ON}

interface
type
  iLoginManager = interface
    function UserLogin (Password : string; Username : string) : boolean;
    function getUsername : string;
  end;

implementation

end.


Hier der für den Server:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
var Chan : TcpChannel;
begin
  WriteLn('Server started...');

  Chan := TcpChannel.Create(4242);
  ChannelServices.RegisterChannel(Chan);

  // Befehl damit der Client ein Objekt der Klasse erstellen kann
  RemotingConfiguration.RegisterActivatedServiceType(typeof(tLogin));

  // Hiermit würde der Server eine Instanz der Klasse erstellen
  {RemotingConfiguration.RegisterWellKnownServiceType(typeof(tLogin)
  ,LoginResource
  ,WellKnownObjectMode.SingleCall); }


  WriteLn('Key quits Server');
  ReadLn;
end.


Hier der Header der Klasse:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  tLogin = class(MarshalByRefObject, iLoginManager)
  private
    fLoggedUser : Longword;
    fUName : string;
  public
    constructor Create;
    function UserLogin (Password : string; Username : string) : boolean;
    function getUsername : string;
  end;


Und hier der Abschnitt für den Client:
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:
24:
var Channel : TcpChannel;
    LoginManager : iLoginManager;

procedure RegisterChannel(Server : string);
var url : array [0..0of TObject;
begin
  if not Assigned(Channel) then
  begin
    Channel := TcpChannel.Create;
    ChannelServices.RegisterChannel(Channel);
  end;

  Server := 'tcp://' + Server +':4242/LoginManager';
  url[0] := Server;

  if not Assigned(LoginManager) then
  begin
    // Das würde ein bestehendes Objekt auf dem Server nutzen
    //LoginManager := Activator.GetObject(typeof(iLoginManager),Server,Channel);
    // Das soll ein Objekt auf dem Server erstellen und eine Referenz auf das Objekt an den Client übergeben
    LoginManager := iLoginManager(Activator.CreateInstance(typeof(iLoginManager),nil,url));
  end

end;


So *puuuuh*...
Also wenn ich das jetzt ausführe mault auch der Compiler nicht rum bekomm aber folgende Fehlermeldung:
Zitat:

Aktivierungsattribute werden für Typen, die nicht von 'MarshalByRefObject' abgeleitet werden, nicht unterstützt.


Ich weis damit nichts anzufangen, denn Schließlich ist meine Klasse doch von MarshalByRefObject abgleitet worden oder nicht?

Ich hoffe Ih könnt mir helfen und schonmal danke für eure Mühen.

Gruß
Dede
Dede Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 21

Win 2000, Suse Linux 8.0
D6 Ent
BeitragVerfasst: Do 16.09.04 18:28 
So hab nochn bißchen was gemacht klappt aber immer noch nich ganz...

s. Berechtigung verweigert in der .NET Sparte...