Session Frequently Asked Questions
- Are Async calls and TROSessions thread-safe?
- How can I access async responses after restart?
- Is it possible to get hold of the ClientID property from within a TRORemotable class?
- What is the easiest way to send authentication information?
- Why sessions expire immediately after creation if timeout is set to 0?
Are Async calls and TROSessions thread-safe?
If threaded Remoting SDK calls can write to the same session object, you need to synchronize access to the session object. This can be done, for example, by providing a subclass that provides locking.
How can I access async responses after restart?
In order to do this, you need to persist both the Message ClientID and the ID of the request (for example to an .ini file), and restore them when restarting.
MessageID can be obtained and set by casting your async proxy interface to IROAsyncInterface and accessing its MessageID property.
Is it possible to get hold of the ClientID property from within a TRORemotable class?
Yes, just add the IRODispatchNotifier interface to its declaration and provide an implementation for the GetDispatchInfo method. When GetDispatchInfo gets called by the framework, it provides a pointer to the transport and message components used to invoke the request. The
Message component holds the right ClientID. The DispatchNotifier sample is a good example of how to intercept method calls and also get a lot of other information about the client.
What is the easiest way to send authentication information?
You need to do two things:
First, create a separate service inside your RODL file. This service should expose the
Logout methods like
method Login(username: String; password: String): Boolean; begin if MyValidate(username, password) then begin Session['user'] := username; exit true; end else begin self.DestroySession(); exit false; end; end; method Logout(); begin self.DestroySession(); end;
Secondly, set the
RequireSession property to True for the service you want to protect. If no session or no valid login information were found in the data call, the request to the protected service will be rejected immediately.
Why sessions expire immediately after creation if timeout is set to 0?
In .NET and in the MemorySessionManager, setting timeout to 0 results in immediate expiration of the session (so that every session expires immediately after creation).