Push notification with SignalR across session state
Using SignalR is pretty simple for implemeting push notification service. One thing to keep in mind is: SignalR connections (including the connection underlying all Hub operations for a client) do not support Session state. So it's not possible to access session data from signalr hub.
Now let's assume one scenario, where we need to perform a database operation on postback (e.g. post action in an mvc controller) based on a user action and after that we need to redirect to a listing/default page. But we want to let user know if the operation succeeded or not.
Here is a Hub implemented to send client notification:
Here is how it is initialized:
And here is the client side script:
The final thing is to invoke the client side
showNotification() function when the redirected view page is loaded.
But problem is: the calling page and the redirected page are two different views and the session state is changed in the meantime. After redirection client hub in the calling page is closed and we must init the hub again before we can send notification. So, even if we re-open the hub on page load we must know few notification data (e.g. message) that should actually come from previous page.
But problem is: the calling page and the redirected page are two different views and the session state is changed in the meantime. After redirection client hub in the calling page is closed and we must init the hub again before we can send notification. So, even if we re-open the hub on page load we must know few notification data (e.g. message) that should actually come from previous page.
Since signalr doesn't allow session data, these piece of data must persist somewhere else while the state change is taking place.
Here is how it is done using static variable:
So remaining is to push the notification on completion of database operation and then show the push notification on page load.
Pushing notification to hub:
Displaying push notification:
That's all! Now the push notification will be displyed when redirected page is loaded.
Comments
Post a Comment