网络故障(network failure)是指由于硬件的问题、软件的漏洞、病毒的侵入等引起网络无法提供正常服务或降低服务质量的状态。 如今,桌面程序不再像以前那样完全独立于网络,并且各种功能都与Internet连接密不可分。程序通常需要Internet连接来执行诸如自动更新,WebService调用等操作以访问远程数据,但是在实际访问远程数据之前,我们最好确保远程连接可用,以便程序的过程和健壮性程序可以是很了不起的。通过编程方式动态检测Internet连接非常耗时,因此,如果不使用多线程,则程序接口将在检测期间死锁,并且检测连接占用了主线程的所有操作。当检测到远程连接是否可用时,主界面经常死锁,并不是良好的用户体验。在本文中,我们将为这个问题创建一个C#组件。主要目标是创建一个用于测试远程连接的标准框架。该测试必须是多线程的,并且必须在后台执行。成功检测到连接后,必须通知它。主线程会对连接可用的情况做出反应,例如打开网页,开始自动更新以及开始调用WebService。 在开始之前,我们需要列出项目需要使用的相关技术。 在检测Internet连接的方法中,我们采用了不同的策略。可以想象,任何客户端程序在需要连接到Internet时都必须具有一个地址。该地址不过是一个IP地址或域名和端口数据。客户端程序通过该地址与远程主机建立连接以进行数据交换。然后,我们的客户端程序将直接检测该地址是否可用,以近似估算Internet连接是否可用。地址可用性证明Internet连接也可用,而地址不可用性证明两点:1、地址无效; 2、 Internet连接不可用。但是地址无效的可能性很小。首先,程序员不可能为客户端程序提供一个无效的地址来尝试连接,然后服务器端瘫痪的可能性就很小,例如尝试连接或。 好的,让我们开始创建检测组件。 首先我们创建一个Windows窗体应用程序,然后添加一个组件,这些过程将不再详述。我们将新组件命名为InternetConnection,首先定义两个私有字段:BackgroundWorker类型的bgworker和字符串类型的可靠的URL。然后定义两个属性: 1 public string ReliableURL ReliableURL属性是我们前面提到的所谓的远程地址。我们通过访问可靠的地址或我们自己的Web服务地址来间接检查Internet连接是否可用。 Active属性允许控制BackgroundWorker的异步执行状态,并且通过将该组件的Active属性设置为true来启动后台Internet连接检测。 接下来,我们需要定义事件。为了简单起见,我们为此组件定义了两个事件Connected和ConnectFailure。前者是成功连接后触发的事件,后者是由于连接失败触发的事件。我们的事件不需要传递参数。有关事件的更多详细信息,请参阅我的另一篇博客文章:.Net事件和代表。 1 public event EventHandler Connected; 接下来,我们创建代码以检测连接。有关使用BackgroundWorker的更多方法,请参阅MSDN或我的另一篇博客文章:实用.Net多线程(三)和实用.Net多线程(四))。 1 private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e) 1 private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 最后,在组件的初始化方法中实例化相关的私有字段。 1 public InternetConnection(IContainer container) 创建组件后,编译整个解决方案,打开最初创建的项目WindowsFormsApplication1的Form1窗体,我们将在VS IDE的工具箱中找到刚创建的名为InternetConnection的组件,并将其拖到Form1上。窗体中,有一个类型为internetConnection1的实例。我们在窗体上放置一个Button,一个WebBrowser和一个StatusStrip,并将StatusLabel添加到StatusStrip。我们使用WebBrowser来显示特定的网页,以指示Internet连接可用。 选择internetConnection1,我们将发现它暴露了两个事件,我们为这两个事件添加了相应的处理代码: 1 private void internetConnection1_Connected(object sender, EventArgs e) 连接成功后,将显示一个远程网页,并在失败时显示一个自定义的HTML文件。如下图所示: 将相应的代码添加到WebBrowser的DocumentCompleted事件中,以响应网页加载的完成: 1 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 最后,在Button的click事件中添加代码以启动测试连接: 1 private void button1_Click(object sender, EventArgs e) 此时,已创建了一个自定义Internet连接组件。该程序已在Windows SP3 + Visual Studio 2008 SP1的环境下成功编译和调试。
当今,越来越多的业务应用运行于网络架构之上,保障网络的持续、高效、安全的运行,成为网络管理者面临的巨大挑战。 |
温馨提示:喜欢本站的话,请收藏一下本站!