使用 .NET 构建智能客户端






4.33/5 (47投票s)
2004 年 6 月 14 日
5分钟阅读

384428

11259
智能客户端是一种利用本地处理能力、消耗 XML Web Services 并可以从中央服务器部署和更新的应用程序。
什么是智能客户端?
智能客户端是一种利用本地处理能力、消耗 XML Web Services 并可以从中央服务器部署和更新的应用程序。虽然 .NET Framework (Windows Forms) 和 .NET Compact Framework 能够轻松开发智能客户端,但其他技术也可以通过利用相同的架构来提供智能客户端应用程序。智能客户端的概念是将您的应用程序解决方案架构到一个智能、灵活且便捷的平台,该平台利用 Web Services 进行通信。
为什么我们需要智能客户端?
为了理解这种需求,让我们看看现有两种架构——瘦客户端(Web)和胖客户端(桌面)的优缺点。
瘦客户端
瘦客户端或 Web 应用程序提供了以下功能:
- 易于更新 – 单一位置更新
- 易于部署 – 单一位置更新
- 易于管理。
如果它具有上述功能,那么它也存在以下问题:
- 网络依赖 – 通常基于网络
- 用户体验差 – 主要输出 HTML
- 开发复杂。
胖客户端
胖客户端或富客户端或桌面应用程序或客户端/服务器应用程序提供了以下功能:
- 丰富的用户体验 – 通过更好的用户界面
- 离线功能 – 无需连接到网络
- 高开发人员生产力
- 响应迅速且灵活
胖客户端确实提供了上述功能,但另一方面,它们也存在以下问题:
- 更新困难 – 每个位置都需要修改
- 部署困难 – 必须在多个位置进行部署
- “DLL 灾难”
智能客户端
以上两种架构提供了一种功能,但却缺乏另一种。但智能客户端结合了这两种架构的最佳功能。
智能客户端功能
智能客户端应具有以下特征:
- 本地资源利用 - 智能客户端应用程序总是在客户端具有代码构件,从而可以利用本地资源。我们说的本地资源是什么意思?我们指的是从硬件到软件资源的一切。智能客户端可以利用本地 CPU、本地内存或磁盘,或者连接到客户端的任何本地设备,例如电话、条形码/RFID 阅读器等。但它也可以利用本地软件,例如 Microsoft Office 应用程序,或任何与之交互的已安装的业务线 (LOB) 应用程序。
- 已连接 - 智能客户端应用程序从不是独立的,总是构成更大分布式解决方案的一部分。这可能意味着应用程序与许多 Web 服务进行交互,这些 Web 服务提供对数据或 LOB 应用程序的访问。通常,应用程序可以访问特定的服务,这些服务有助于维护应用程序并提供部署和更新服务。
- 离线可用 - 由于它们在本地计算机上运行,智能客户端应用程序提供的关键优势之一是即使在用户未连接时也可以运行。对于在偶尔或间歇性连接情况下运行的应用程序,例如那些供差旅工作人员使用的应用程序,或者甚至是在笔记本电脑、平板电脑、PDA 等上运行的应用程序,在不能保证始终有连接的情况下,能够在断开连接时工作至关重要。即使客户端已连接,智能客户端应用程序也可以通过缓存数据并以智能方式管理连接来提高性能和可用性。
- 智能安装和更新 - 智能客户端应用程序比传统的富客户端应用程序以更智能的方式管理其部署和更新。.NET Framework 支持通过各种技术部署应用程序构件,包括简单的文件复制或通过 HTTP 下载。应用程序可以在运行时更新,并且可以通过单击 URL 按需部署。Microsoft(r) .NET Framework 提供强大的安全机制,可确保应用程序及其相关程序集的完整性。可以为程序集提供有限的权限,以在半信任场景中限制其功能。
- 客户端设备灵活性 - .NET Framework 结合 .NET Compact Framework 提供了一个通用平台,可以在其上构建智能客户端应用程序。通常,会有多个版本的智能客户端应用程序,每个版本都针对特定的设备类型,并利用设备的独特功能,并提供适合其用途的功能。
让我们来看看智能客户端的一个非常重要的功能——智能安装和更新。
智能安装和更新(轻松部署)
智能客户端应用程序比传统的富客户端应用程序以更智能的方式管理其部署和更新。
Components
智能客户端应用程序将包含两个组件:
- 一个非常精简的客户端应用程序,将在本地安装。
- 实际应用程序托管在 Web 服务器上,使用强命名程序集构建。
涉及的过程
当用户打开智能客户端应用程序时:
- 用户打开应用程序。
- 应用程序引用托管在 Web 服务器上的程序集。
- .NET Framework 检查先前下载的程序集是否是最新版本。
- 如果不是,则从服务器下载最新版本,在本地加载程序集并启动应用程序。
优点
应用程序的任何更新,只需更改一次,下次启动时更改将反映到所有客户端。这就是所谓的智能客户端。
让我们看看客户端应用程序代码:
using System;
using System.Reflection;
using System.Windows.Forms;
namespace MySmartClient
{
class SmartClient
{
[STAThread]
static void Main(string[] args)
{
SmartClient objSmartClient = new SmartClient();
//display splash screen
Splash splash = new Splash();
splash.Show();
Application.DoEvents();
// Set the URL to load the Assembly from
string strURL = "http://Server/Smart/Bin/Release/Smart.exe";
// Set the class to call
string sClassName = "MySmartClient.SmartForm";
Assembly assemblyContent = null;
try
{
// Load the assembly
assemblyContent = Assembly.LoadFrom(strURL);
}
catch(Exception e)
{
}
splash.Close();
// Create a object for the Class
Type typeContent = assemblyContent.GetType(sClassName);
// Invoke the method. Here we are invoking the Main method.
try
{
typeContent.InvokeMember ("Main", BindingFlags.Public |
BindingFlags.InvokeMethod | BindingFlags.Static, null, null, null);
}
catch(Exception e)
{
}
}
}
}
这仅仅是在客户端安装的所有内容。实际应用程序将在服务器上可用。第一次启动客户端应用程序时,.NET Framework 将在本地下载所需的程序集。此后,每次启动应用程序时,.NET Framework 都会检查程序集的版本,如果服务器有最新版本,它将下载,否则将使用本地可用的程序集启动应用程序。这样,应用程序的任何更新都可以在一个位置轻松处理,从而使应用程序的部署变得容易。
从上面的链接下载客户端应用程序和服务器应用程序。