c# - 使用 C# 从服务器读取数据并检测网络不可用性

标签 c# java io network-programming

我有一个简单的任务:从服务器读取数据,如果服务器无法访问(服务器关闭或网络故障),则从本地磁盘缓存加载数据(可能是陈旧的)。

下面是 Java 代码的简单伪表示:

try {
    //read from server
} catch (IOException ioe) {
    //most likely a socket timeout exception

    //read from local disk
} finally {
    //free I/O resources
}

但在 C# 中实现这一点似乎不起作用,因为即使主机上没有互联网访问,WebClient 似乎也不会抛出任何异常,因此无法通过以下方式检测该情况catch block 并恢复回本地缓存。 我知道 WebClient 的异步 API 及其相当有趣的回调链,但我认为这太尴尬了,并且不适合我的设计目标。有没有一种方法可以像上面所示的 Java 骨架代码一样轻松地在 C# 中执行此操作?谢谢。

最佳答案

WebClient 将超时,但仅在 100 秒后。

我建议您改用 HttpWebRequest。它有一个可设置的超时属性。

参见http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx

关于c# - 使用 C# 从服务器读取数据并检测网络不可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15649723/

相关文章:

c# - DataReader 对象引用未设置错误

java - 未找到 JNI_OnLoad 跳过 init() : No such file or directory

java - 重用从类返回的用户输入值,而不重新请求用户输入

java - 采取|| (或)语句作为输入?

c - 如何快速转储信息?

c# - 基本 Controller 中的 Asp.net mvc 覆盖 OnException 不断传播到 Application_Error

c# - 无法从方法组转换为对象 - C#

c# - 如何通过 Web Api Controller 返回一个 JSON 格式的字符串,而不在响应中显示转义字符

linux - IO 位置与内存区域

c - 是否有必要在 IO 多路复用中使用非阻塞文件描述符?