The message does not have an interface name

Delphi 11.2. RO 1549

Firemonkey app. Runs ok on windows. raise this exception when run on linux.

EventReceiverPollException

‘An exception was raised on the server: The message does not have an interface name’

Any clue?

Hi,

Can you create a simple testcase that reproduces this, pls?
you can drop email to support@ for keeping privacy

Honestly i try with simple event receiver and cant reproduce. Maybe if i give you access to my pc and you can see the code?

Hi,

I don’t think, that I can easily detect what is wrong.
try to add additional event sink to your project. use code from simple testcase. if it work, you can replace “broken” one with new one

I forget to say it works perfect on D 10.4 DA 1489. For this reason i doubt is a problem with my code.

Still cant fix this problem, i try doing debug. New discover maybe help you @EvgenyK to give me a light to what check

The bug code is on client app compiled for LINUX using D11.2 Alexandria and DA 1549, dont matter wich server compiled combination is (on windows) I try server build for windows with D10.4 DA 1489 and D11.2 with DA 1549.

In both situations the LINUX client (not windows client) compiled with D11.2 and DA 1549 , on some message on ROSERVER unit lines 685 brings empty aMessage.InterfaceName and aMessage.MessageName so the err_UnspecifiedMessage error is raised.

The problem raises when event manager is attached
Some internal messages , generated by RO, have this values empty

Even the serializer fails… many errors on linux

procedure TPetroBoxService_Proxy.GetClientByPatente(const NroTerminal: Integer; const Patente: ROAnsiString; var DatosPos: TerminalesPOS_Types_intf.TDatosPos; var EncontradoporTAG: Boolean);
var
  lMessage: IROMessage;
  lTransportChannel: IROTransportChannel;
begin
  lMessage := __GetMessage();
  lMessage.SetAutoGeneratedNamespaces(DefaultNamespaces());
  lTransportChannel := __TransportChannel;
  try
    lMessage.InitializeRequestMessage(lTransportChannel, 'PetroBoxDataLibrary', __InterfaceName, 'GetClientByPatente');
    lMessage.Write('NroTerminal', System.TypeInfo(Integer), NroTerminal, []);
    lMessage.Write('Patente', System.TypeInfo(ROAnsiString), Patente, [paAsAnsiString]);
    lMessage.Write('DatosPos', System.TypeInfo(TerminalesPOS_Types_intf.TDatosPos), DatosPos, []); <---- here fails...
    lMessage.Write('EncontradoporTAG', System.TypeInfo(Boolean), EncontradoporTAG, []);
    lMessage.Finalize();

    lTransportChannel.Dispatch(lMessage);

    lMessage.Read('DatosPos', System.TypeInfo(TerminalesPOS_Types_intf.TDatosPos), DatosPos, []);
    lMessage.Read('EncontradoporTAG', System.TypeInfo(Boolean), EncontradoporTAG, []);
  finally
    lMessage.UnsetAttributes(lTransportChannel);
    lMessage.FreeStream();
    lMessage := nil;
    lTransportChannel := nil;
  end;
end;

Hi,

this line should be failed:

lMessage.InitializeRequestMessage(lTransportChannel, 'PetroBoxDataLibrary', __InterfaceName, 'GetClientByPatente');

instead of

lMessage.Write('DatosPos', System.TypeInfo(TerminalesPOS_Types_intf.TDatosPos), DatosPos, []); <---- here fails...

try to pass events via json message instead of bin one
not sure, but it may solve this issue.

No, this is another bug. Happens i was freeandnil a trocomplex inside another torcomplex and seems like assign method don´t handle this situation Already fixed, removing the freeandnil.

The interface and message empty is absolutely related to event receiver.

I do, now the error message change to this.

Screen Shot 2022-11-11 at 10.45.31 AM

The problem is related to event receiver. If i disable event receiver register on client app, the problem is gone and communication with services and messages run fine, no errors.

Hi,

try to store whole event message. it will be useful for investigation.
it can be done with the OnReadFromStream/OnWriteToStream events of server channel or the OnSendStream/OnReceiveStream events of client channel.