我们在不同的客户站点上有几千台 Windows XP 客户端机器,它们都在运行一些交互式软件,这些软件用于收集匿名使用数据。客户端机器使用一些旧的、旧的、旧的客户端服务器软件,将数据上传到基于互联网的服务器,将配置信息推送回它们,并可以要求客户端执行一些任务,例如重新启动。
本质上,我们有以下特性(在伪 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);
}
..但是这段代码已经到了生命的尽头(脆弱,由于缺乏技能而无法维护)。
我们即将开始一个全新的、从零开始的项目,以使用现代工具、SDK 和框架重新设计该软件。
我们有一些功能需求,它们是:
- 由于可用的工程资源,基于 .NET 的环境。
- 防火墙友好 - 我们只能通过 HTTP/80 从客户端站点与我们基于 Internet 的服务器“对话”,并且 Internet 访问不稳定,客户端带宽相对较差。VPN 在我们的客户群中不受欢迎。
我们可以在这里利用的大量技术让我们不知所措:.NET Remoting、.NET Web Services、WCF、Sync Framework、SQL Pub-Sub、SQL Sync、BITS 等。
我们可以深入了解哪些技术选择最适合这里的设计。
有没有“自然”的合身?