当数据库脱机时,您如何管理您的应用程序?

时间:2008-09-08 10:25:47

标签: .net sql-server error-handling

将.Net Winforms应用程序混合在一个有趣的无线网络连接中,与一些喜欢简单地暂时拔出蓝色插头的用户一起搅拌,并添加一个决定重启SQL Server的系统管理员盒子里没有任何警告,只是为了让每个人都保持警惕。

有关处理此类情况的建议和策略有哪些:

  • 错误处理 - 例如,你是否包装每一个 使用Try / Catch调用服务器 还是你依赖某种形式的 要管理的通用错误处理 这个?如果是这样的话是什么样的?

  • 应用程序管理 - 例如,你呢?     禁用该应用程序,不允许用户     与它互动直到     再次检测到连接?你会做什么?

6 个答案:

答案 0 :(得分:3)

答案取决于您的申请类型。有些应用程序可以脱机工作 - 例如Microsoft Outlook。此类应用程序不会将连接异常视为关键,它们可以在本地保存您的工作并在以后进行同步。网络游戏等其他应用程序会将通信问题视为关键异常,并在连接丢失时退出。

在错误处理方面,我认为您应该控制所有层上的异常,而不是依赖于一些常规异常处理代码段。您的业​​务层应该了解在较低层(在我们的例子中是数据访问层)上发生的事情并相应地做出响应。在我看来,连接丢失不应被视为意外异常。对于异常管理的良好实践,我建议您查看Exception Handling Application Block

关于应用程序行为,您应该回答以下问题:“我的应用程序对于处于断开连接状态的客户是否具有业务价值?”在许多情况下,最终用户能够在断开状态下继续工作将是有益的。然而,这种行为极难实施。

特别是对于您的方案,Microsoft开发了Disconnected Service Agent Application Block

答案 1 :(得分:2)

我已经多年没有触及WinForms和.NET了,所以我不能给你任何技术细节,但是有更大的图片答案:

首先 - 不要将表单数据直接绑定到数据库。

创建一个单独的数据/模型图层,将表单小部件绑定到。

从那时起,根据您需要提供的稳定性和可用性级别,您可以使用多种选项。

这里最简单的解决方案之一可能就是根据连接状态启用/禁用需要与数据库交互的应用程序部分。

下一级保护包括在本地缓存数据模型的一部分,同时数据库连接关闭,使用本地缓存查看和禁用任何需要显式数据库连接的函数。

可能最棘手的事情(也可能为最终用户提供最稳定的体验)是在本地复制数据库并使用某种同步模式来保持数据库副本与远程数据库同步。

答案 2 :(得分:1)

我们在Main()方法中有这个,它捕获所有未处理的异常......

Application.ThreadException += new 
System.Threading.ThreadExceptionEventHandler(UnhandledExceptionCatcher);

Thread.GetDomain().UnhandledException += new 
UnhandledExceptionEventHandler(Application_UnhandledException);

然后Application_UnhandledExceptionUnhandledExceptionCatcher会显示用户友好的消息。

此外,应用程序然后将诸如堆栈跟踪之类的数据通过电子邮件发送给开发人员,这非常有用。

当然,这取决于应用程序,但对于您描述的失败类型,我会关闭应用程序。

答案 3 :(得分:1)

对于离线方案,这可能有点 支持,但您是否考虑过“Microsoft Sync Framework”?框架中包含“ADO.NET 2.0的同步服务”,它允许您的应用程序访问本地SQL Server CE实例。这可以通过各种方法轻松地与中央SQL Server同步。

此框架处理永久离线方案,正如我所说,它可能不适合您的特定要求,但它会为您的应用程序提供可靠的离线支持。

答案 4 :(得分:0)

在我们的应用程序中,我们为用户提供连接到另一台服务器的选项,例如,如果数据库连接失败,则会显示一个对话框,显示服务器不可用,并且可以输入另一个IP地址进行尝试。

答案 5 :(得分:0)

使用SQLite之类的东西离线存储数据,直到连接可用。

更新:我相信SQLite是Google Gears的后端,根据我的理解,你在Web应用程序中寻找的是什么......虽然我不知道它是否可以用于非网络背景。

相关问题