(Edited to try to explain better)
We have an agent, written in C++ for Win32. It needs to periodically post information to a server. It must support disconnected operation. That is: the client doesn't always have a connection to the server.
Note: This is for communication between an agent running on desktop PCs, to communicate with a server running somewhere in the enterprise.
This means that the messages to be sent to the server must be queued (so that they can be sent once the connection is available).
We currently use an in-house system that queues messages as individual files on disk, and uses HTTP POST to send them to the server when it's available.
It's starting to show its age, and I'd like to investigate alternatives before I consider updating it.
It must be available by default on Windows XP SP2, Windows Vista and Windows 7, or must be simple to include in our installer. This product will be installed (by administrators) on a couple of hundred thousand PCs. They'll probably use something like Microsoft SMS or ConfigMgr. In this scenario, "frivolous" prerequisites are frowned upon. This means that, unless the client-side code (or a redistributable) can be included in our installer, the administrator won't be happy. This makes MSMQ a particularly hard sell, because it's not installed by default with XP.
It must be relatively simple to use from C++ on Win32. Our client is an unmanaged C++ Win32 application. No .NET or Java on the client.
- The transport should be HTTP or HTTPS. That is: it must go through firewalls easily; no RPC or DCOM.
- It should be relatively reliable, with retries, etc. Protection against replays is a must-have.
- It must be scalable -- there's a lot of traffic. Per-message impact on the server should be minimal.
- The server end is C#, currently using ASP.NET to implement a simple HTTP POST mechanism.
- (The slightly odd one). It must support client-side in-memory queues, so that we can avoid spinning up the hard disk. It must allow flushing to disk periodically.
- It must be suitable for use in a proprietary product (i.e. no GPL, etc.).