我有一个关于 WebClient 的问题,我希望有人可以帮助我。我知道这个问题被问了几次,但我找不到一个好的答案。
我有两种不同的场景需要调用 URL。a) 我不需要来自 URL (Fire&Forget) 的任何回复。b) URL 返回一个 JSON,所以我需要等待在服务器上完成处理才能获取我的数据。
我对 a) 有一些问题,我不知道我所做的是否有意义。为了实现 Fire&Forget,我将 WebClient 超时设置为“小”数,500 毫秒(代码如下)。我的问题是:
a)这是一个好方法还是没有任何意义?b) 等待 500 毫秒是否有意义?我可以将超时设置为零吗?c) 这种方法安全吗?我不在乎完成处理需要多长时间,但我想确保我能够启动 Web 服务。下面的代码是否保证 Web 服务将被触发,如果没有,我会得到一个不是 Timneout 的异常?
非常感谢 !
public static void SubmitUrl(string url)
{
using (WebClient webClient = new WebClientEx(500))
{
try
{
Logger.Log(string.Format("Start Invoking URL: {0}", url));
var response = webClient.OpenRead(url);
response.Close();
Logger.Log(string.Format("End Invoking URL: {0}", url));
}
catch (System.Net.WebException ex)
{
if (ex.Status != WebExceptionStatus.Timeout)
{
Logger.Log(string.Format("Exception Invoking URL: {0} \n {1}", url, ex.ToString()));
throw;
}
}
catch (System.Exception ex)
{
Logger.Log(string.Format("Exception Invoking URL: {0} \n {1}", url, ex.ToString()));
throw;
}
}
}
public class WebClientEx : WebClient
{
// Timeout in milliseconds
public int timeout { get; set; }
public WebClientEx(int timeout)
: base()
{
this.timeout = timeout;
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest wr = base.GetWebRequest(address);
wr.Timeout = this.timeout;
return wr;
}
}
}