Service Watcher based on Reactive Extensions
The code parts with Rx Observables are based on this blog entry.
This solution runs in Azure Emulator and receives client heartbeats via POST-requests.
We, at advarics GmbH, use a similar version to control our remote Services in real-time.
The ServiceWatcher utilizes a simple Database structure following the Code First workflow.
Every heartbeat entry gets inserted into the table Heartbeat and can be received via GET.
For example to receive all Heartbeats: http://localhost:81/odata/Heartbeats
A "heartbeat" is just a simple JSON payload that describes the client and which Rx Stream it belongs to. Rx Streams are configured via the Azure WebRole settings. There's also an option to configure the WebApp to run as an ordinary IIS application. In this case you'd use the Web.config settings.
I recommend Fiddler to send Heartbeat-Requests.
Heartbeats-Log in Azure Emulator
The configuration of streams is done in Azure WebRole config
Streams are defined in the RxStreams field as comma-separated values. Every stream has its own timeout settings which is by convention RxStreamTimerSTREAMNAME.
For example: RxStreamTimerWebShop for Stream named WebShop. If a stream has no explicit timeout set then the RxStreamTimerDefault will be used.
To be informed about disconnected clients (that is, clients who are not sending heartbeats within an expected time frame) you can set up an SMTP mail-server to deliver warning notices.
Developed at
advarics GmbH, Innsbruck (Austria)
Branch Office Bochum (Germany)
License
MIT