さまざまな顧客サイトに数千台の 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 経由でクライアント サイトからインターネット ベースのサーバーにのみ「発信」でき、インターネット アクセスは不安定で、クライアントの帯域幅は比較的貧弱です。VPN は、当社の顧客ベースに人気がありません。
.NET Remoting、.NET Web Services、WCF、Sync Framework、SQL Pub-Sub、SQL Sync、BITS など、ここで活用できるテクノロジーの数の多さに圧倒されます。
ここで、どのテクノロジーの選択が設計に最も適しているかについての洞察を使用できます。
「自然な」適合はありますか?