【问题标题】:Handling being online and offline处理在线和离线
【发布时间】:2010-12-23 19:17:54
【问题描述】:

我有一个调用在线数据库的应用程序。如果我失去与 Internet 的连接或数据库关闭,我的应用程序将崩溃。

处理这个问题的方法是什么?

我自己的方法是让一个对象一直调用数据库,如果抛出异常,则触发一个事件,所有其他组件都注册到该事件,然后禁用某些功能。

这是正确的方法还是有更好的解决方案?

【问题讨论】:

    标签: c# distributed


    【解决方案1】:

    我想这取决于功能的重要性。您尝试做的与Smart Client Application Block 尝试实现的类似。因此,可能值得研究它如何处理此类情况。

    从记忆中,我认为我听说过的大多数应用程序实际上都在尝试缓存数据。因此,应用程序使用数据库的本地副本,并在可以连接时与在线副本同步。

    例如,SQL Server Express 允许您通过网络将数据库与另一个 SQL Server 数据库同步。

    所以基本上这取决于您的数据,如果您可以拥有用户使用的本地缓存并且您可以稍后同步,那么您可以使用它。否则,您描述的方法听起来应该可行。

    【讨论】:

      【解决方案2】:

      很难说了解大局对您最有利,但我可以想到 3 种方法可以处理这些情况:

      1) 及时处理连接问题并及时报告它们
      2) 如您所说,定期轮询连接并在“ping”失败时禁用功能
      3)使用数据库的本地副本,然后在连接时同步更新到主数据库

      IMO,我会选择 1) 或 3)。 选项 3 提供最佳的用户体验。 选项 1 可能涉及最少的开发工作。

      使用选项 2,您会遇到一个问题,即无论您多久进行一次轮询,您都可能随时遇到连接问题。

      【讨论】:

      • 首先感谢所有答案!我想我会采用 2 和 3 结合的解决方案。我需要能够显示应用程序是否在线。
      【解决方案3】:

      要检查您是否在网络上,您可以使用来自System.Net.NetworkInformation 命名空间的.NET 的NetworkInterface

      bool connected = NetworkInterface.GetIsNetworkAvailable();
      

      至于数据库处于脱机状态 - 您必须在调用该数据库时处理可能的异常,以使您的应用不会崩溃,但会向用户返回信息性消息 - 或进行日志记录,或其他任何方式在你的场景中有意义。

      马克

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-16
        • 1970-01-01
        • 1970-01-01
        • 2017-09-23
        • 2015-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多