Ich habe einen DataSnap-Server, den ich weiter laufen oder zumindest nicht aktualisieren kann. Ich möchte mit einem neuen Client verbinden.Beim Refactoring kann mein Datennap-Server nicht marshallen, wenn ich eine Klasse auf eine andere Einheit verschoben habe
Der gesamte Code ist der gleiche, aber ich habe etwas Code überarbeitet, so dass jetzt eine Klasse, die ich benutze, um eine Verbindung zum Server herzustellen, in einer anderen Einheit ist.
Die Servermethoden ist eine Funktion, die TMyObject
zurückgibt. In Wirklichkeit gibt der Server jedoch ein Marshalled-Objekt vom Typ Oldunit.TMyObject
zurück. Dies wird jedoch vom Kunden nicht erkannt.
function TJSONUnMarshal.CreateObject(JsonObj: TJSONObject): TObject;
var
objType: string;
ObjId: string;
objFields: TJSONObject;
Obj: TObject;
rttiType : TRttiType;
attr : TCustomAttribute;
customizer : TJSONPopulationCustomizer;
JsonPairID: TJSONPair;
JsonPairType: TJSONPair;
JsonPairFields: TJSONPair;
JsonPairRefName: TJSONPair;
begin
assert(JsonObj <> nil);
assert(JsonObj.Count > 1);
JsonPairID := JsonObj.Get(ID_NAME);
if JsonPairID <> nil then
begin
JsonPairType := JsonObj.Get(TYPE_NAME);
JsonPairFields := JsonObj.Get(FIELDS_NAME);
Assert(JsonPairFields <> nil);
Assert(JsonPairType <> nil);
objType := JsonPairType.JsonValue.Value;
ObjId := JsonPairID.JsonValue.Value;
objFields := TJSONObject(JsonPairFields.JsonValue);
Obj := ObjectInstance(FRTTICtx, objType); // returns nil, objtype is wrong
if Obj = nil then
raise EConversionError.Create(Format(SCannotCreateType, [objType]));
Haben Sie versucht, OldUnit.Pas vorübergehend in etwas anderes umzubenennen, OldUnit.Dcu zu löschen und dann Ihren Client neu zu kompilieren? Arbeitet der Server dann mit dem neu kompilierten Client? – MartynA
Ich habe das Gerät komplett entfernt, weil es jetzt leer war. Und es hat nicht funktioniert. –