views:

102

answers:

1

We have a few thousand Windows XP client machines on various customer sites that are all running some interactive software which is instrumented to collect anonymous usage data. The client machines use some old, old, old client-server software that uploads the data to an internet-based server, pushes configuration info back down to them and can ask the clients to do some tasks like reboot.

In essence, we have the following features (in pseudo C#/IDL):

interface IClientToServer
{
  void LogUsage(clientMachineName, anonymousUserID, Pair[] usageData, startTime, endTime);
  void LogError(clientMachineName, errorMessage);
  void LogUptime(clientMachineName, bootTime);
  DateTime SyncClock(clientMachineName, timezone);
}

interface IServerToClient
{
  void UpdateSettings(Pair[] settings);
  Bitmap GetScreenshot();
  void Reboot();
  string Execute(cmdLine);
}

..but this code has reached its end of life (fragile, unmaintainable due to lack of skills).

We are about to embark on a greenfields, start-with-a-clean-slate project to rework this software using modern tools, SDKs and frameworks.

We have some functional requirements, which are:

  1. .NET based environment due to available engineering resources.
  2. Firewall-friendly - we can only talk 'out' from client sites to our internet-based server over HTTP/80 and internet access is flaky with relatively poor client bandwidth. VPNs are unpopular with our customer base.

We are rather overwhelmed by the sheer number of technologies that we could leverage here: .NET Remoting, .NET Web Services, WCF, Sync Framework, SQL Pub-Sub, SQL Sync, BITS, etc.

We could use some insight into what technology choices would best suit the design here.

Is there any 'natural' fit?

+1  A: 

I'd go with WCF. You could easily configure this to use basic HTTP. When needed you can change the bindings at either end, so you can use a different protocol for communication. This makes it flexible. Also you can choose to host the WCF service in a way that suites your needs (IIS, NT Service, or any other .NET process you can come up with). Also, WCF is easily setup and .NET gives you all the tools you need for communication, so you don't have to do as little plumbing as possible.

Jonathan van de Veen
Can WCF do Server->Client communication where the Client is behind a firewall, without us having to do polling?
JBRWilkinson
There is duplex WCF which allows you to do that. Technically that does polling internally, but that's handled for you. Using basic HTTP there is no way you can truly push anything from the server to the client, especially if the client is behind a firewall.HTH.
Jonathan van de Veen