【发布时间】:2015-08-27 06:19:06
【问题描述】:
我使用VB.NET 开发了winform 应用程序。该应用程序部署在连接到无线网络的机器中。机器在车里(移动物体)。
应用程序已将DataGridView 加载了从 MSSQL Server(在远程计算机中)获取的数据。数据每 5 秒刷新一次。
我已经使用NetworkAvailabilityChanged 事件来检测网络状态。如果网络可用,则我从表中检索数据。
代码:
AddHandler NetworkChange.NetworkAvailabilityChanged, AddressOf NetworkStateChangeHandler
Public Sub NetworkStateChangeHandler(ByVal sender As Object,
ByVal e As NetworkAvailabilityEventArgs)
If e.IsAvailable = True Then
g_bNetworkAlive = True
Else
g_bNetworkAlive = False
End If
End Sub
private Sub GetData()
If g_bNetworkAlive = True
'code to get the data from table
End If
End Sub
问题:
如果汽车movers out of the out of the network,则不会触发NetworkAvailabilityChanged 事件。因此它每 5 秒抛出一次以下错误,并且应用程序崩溃。
A network-related or instance-specific error occurred while establishing
a connection to SQL Server. The server was not found or was not accessible.
临时修复:我每 5 秒向 SQL 服务器机器发出一次Ping 请求,以检测网络状态。它会影响应用程序的性能。
注意:如果我手动关闭 Wifi,NetworkAvailabilityChanged event is fired.只有当汽车离开网络时才会出现问题。
还有其他可行的方案来检测无线网络状态吗?
【问题讨论】:
-
仅仅因为网络可用,这并不意味着您的代码将能够针对 SQL Server 实现其工作。 唯一 告诉您实际上正在尝试工作并完成工作。您必须编写可以处理的代码,例如无论如何,服务器或网络在您开始工作后 失败。那么,如果您遇到网络故障,是否可以实施退避策略? (它只是失败了。我将等待 5 秒。它再次失败。我将等待 10 秒。它第三次失败,我将等待 2 分钟,等等)
-
就像@Damien_The_Unbeliever 说的那样,添加任何额外的网络检测逻辑可能毫无意义,因为您必须为数据库连接失败的情况做好准备,所以也许只是基于此编写逻辑?
-
@Damien_The_Unbeliever:感谢您的建议。
-
网络可能在数据库查询过程中丢失。因此,ping 或尝试检测数据库是否存在有点毫无意义。我会在普通数据库类之上创建一个类并处理任何有关连接丢失的异常。
标签: sql-server vb.net winforms networking wireless