我有两个asp.net MVC web应用程序,如下所示:
现在,在我的ApplicationA中,我有以下方法,它将在applicationB上调用一个操作方法(home/sync),如下所示:
public List<Technology> GetTechnology(int? currentfiltertype)
{
try
{
using (WebClient wc = new WebClient())
{
string url = currentURL + "home/sync?filtertype=" + currentfiltertype;
wc.Headers.Add("Authorization", token);
string json = wc.DownloadString(url);
List<Technology> result = JsonConvert.DeserializeObject<List<Technology>>(json);
return result;
}
}
catch (Exception e){}
}现在我已经注意到,当WebClient调用action方法,并且该方法在大约2分钟内没有收到响应时,它将引发超时异常。但是由于web应用程序B上的home/sync操作方法需要大约30分钟才能完成。所以我在寻找一个解决方案来延长网络客户端超时时间。因此,我尝试将代码更改为如下所示的异步方法,主要是将wc.DownloadString替换为wc.DownloadStringTaskAsync,如下所示:
public async Task<List<Technology>> GetTechnology(int? currentfiltertype)
{
try
{
using (WebClient wc = new WebClient())
{
string url = currentURL + "home/sync?filtertype=" + currentfiltertype;
wc.Headers.Add("Authorization", token);
string json = await wc.DownloadStringTaskAsync(url);
List<Technology> result = JsonConvert.DeserializeObject<List<Technology>>(json);
return result;
}
}
catch (Exception e) {}
} 现在看来WebClient永远不会过期..。我试着调用action方法,web客户端在没有引发任何超时异常的情况下一直等待响应超过20分钟,然后它收到了来自web applicationB的响应,一切都进行得很好。那么,有谁能建议为什么更改我的代码以使用上述代码中所示的异步方法,从而导致WebClient不超时呢?我无法理解使用异步逻辑与延长web客户机的超时时间之间的关系(不确定WebClient是否会在异步方法中超时!)
发布于 2016-06-24 17:16:01
有人能建议为什么改变我的代码以使用上面代码中所示的异步方法,导致WebClient不超时吗?
答案有点令人费解:WebRequest和属性仅用于同步请求。。
(不确定WebClient是否会在异步方法中超时!!)
它不直接支持异步超时,但它支持(它自己的)取消,您可以在计时器之后触发它。
https://stackoverflow.com/questions/38017277
复制相似问题