c# - 我应该在多大程度上处理代码中的网络问题?

标签 c# sql network-programming recovery

我有一些客户的网络非常糟糕,包括网关处的错误映射和别名问题。有时它们会顺利运行几天,有时我们的服务会失败,因为它们无法连接到数据库或连接莫名其妙地断开。

程序(即服务)应该恢复或重试多远?让他们的网络人员让它正常工作是否合理,还是我应该自己承担它的脆弱性?

最佳答案

1) 是的,期望他们的网络正常工作是合理的……您不会告诉别人他们买的车坏了,因为他们没有道路可以行驶,对吗?

2) 也就是说:防御性编程。当你制造一辆汽车时,你不能指望一切都是完美顺畅的州际公路。

更具体地说,我喜欢在我的系统中构建重试机制:我将在“可重试”逻辑中包装一些东西,它允许您指定重试次数。通常,重试周期将有二次退避:比如说,它在 n*n 秒后尝试,对于 1..n,其中 n 是重试次数,或者使用 fib(n) 所以你有类似 1,1,2 的东西, 3,5 秒重试。回退有助于防止对上游资源造成不必要的压力

如果在一定次数的重试之后,您可以抛出异常(可以捕获异常并通知用户或其他模块错误),或者记录日志,具体取决于严重程度。

关于c# - 我应该在多大程度上处理代码中的网络问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11057568/

相关文章:

java - 使用 In Query 在 JPA 中的参数中添加 2 个列表

java - 如何跟踪从应用服务器提交到 Oracle 数据库的所有查询?

SQL 查询优化,查看前 x 条记录

java - 如何使用Android手机获取系统的IP地址?

c# - 我能比 NetworkInterface.GetIsNetworkAvailable() 做得更好吗?

c# - 处理 ASP.NET MVC "tag soup"

c# - 条件为假后循环返回

c# - Initialize 方法有什么用,我真的需要一个吗?

c# - 从 ComboBox (DropDownList) Winforms 中删除项目

iphone - 音频从 iPhone 流式传输到服务器?