Asp.net 将代码更改为使用异步方法而不是同步方法将强制WebClient从不超时(20分钟+;+;)
我有两个asp.net MVC web应用程序,如下所示:-Asp.net 将代码更改为使用异步方法而不是同步方法将强制WebClient从不超时(20分钟+;+;),asp.net,asp.net-mvc,asp.net-mvc-4,asynchronous,webclient,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asynchronous,Webclient,我有两个asp.net MVC web应用程序,如下所示:- public List<Technology> GetTechnology(int? currentfiltertype) { try { using (WebClient wc = new WebClient()) { string url = currentURL + "home/sync?filtertype=" + currentfi
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){}
}
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) {}
}
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){}
}
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是否会在异步方法中超时!!)
有人能告诉我为什么更改我的代码以使用上面代码中显示的异步方法会导致WebClient不超时吗
答案有点复杂:,和
(不确定WebClient是否会在异步方法中超时!!)
它不直接支持异步超时,但它确实支持异步超时,您可以在计时器后触发异步超时
有人能告诉我为什么更改我的代码以使用上面代码中显示的异步方法会导致WebClient不超时吗
答案有点复杂:,和
(不确定WebClient是否会在异步方法中超时!!)
它不直接支持异步超时,但它确实支持异步超时,您可以在计时器后触发它。任何需要30分钟的操作都不应该在web应用程序中运行。如果您需要执行一些长时间运行的任务,您应该将其卸载到后台进程中。@ChrisPratt是的,您是对的,我总是在单独的控制台应用程序中定义长时间运行的进程,但对于这一个,我需要在IIS下运行,因为它只会生成报告,,因此,如果应用程序池在长时间运行的操作期间重新启动,则不会对我的数据造成实际损坏。在这种情况下,用户需要重新生成报告。为什么有人投票关闭此问题?有什么原因吗?我不明白“它将仅生成报告”如何验证“需要在IIS下运行它”。web服务器旨在返回快速响应。它不是有意的,而且完全不适合处理20分钟的请求。您需要在Web进程之外执行它。@克里斯普拉特,您是100%正确的,将考虑这将我的代码在控制台应用程序下运行,而不是…感谢web应用程序中不应该运行任何需要30分钟的操作。如果您需要执行一些长时间运行的任务,您应该将其卸载到后台进程中。@ChrisPratt是的,您是对的,我总是在单独的控制台应用程序中定义长时间运行的进程,但对于这一个,我需要在IIS下运行,因为它只会生成报告,,因此,如果应用程序池在长时间运行的操作期间重新启动,则不会对我的数据造成实际损坏。在这种情况下,用户需要重新生成报告。为什么有人投票关闭此问题?有什么原因吗?我不明白“它将仅生成报告”如何验证“需要在IIS下运行它”。web服务器旨在返回快速响应。它不是有意的,而且完全不适合处理20分钟的请求。您需要在Web进程之外执行它。@克里斯普拉特,您是100%正确的,将考虑这将我的代码在控制台应用程序下运行,而不是…非常感谢您的回复。所以,当我使用“wait wc.downloadstringtaskancy(url);”时,这将永远不会超时,对吗?第二个问题如果我保持异步代码不变,有什么缺点?因此,网络客户端呼叫永远不会超时???@johnG:它在客户端永远不会超时;仍然可以让服务器超时并发送错误响应。如果代码保持原样(没有超时),则客户端将不会超时。现在,当您说客户端将永远不会超时时,您的意思是使用async方法的WebClient将永远不会超时。。但我不清楚你所说的服务器超时是什么意思???为什么服务器会超时?大多数服务器都有一个请求的最长时间,如果请求太长,就会中止请求。现在我将我的网站托管在iis-8中,这样我可以在哪里检查服务器何时超时?你知道服务器的默认超时时间是多少吗?非常感谢你的回复。所以,当我使用“wait wc.downloadstringtaskancy(url);”时,这将永远不会超时,对吗?第二个问题如果我保持异步代码不变,有什么缺点?因此,网络客户端呼叫永远不会超时???@johnG:它在客户端永远不会超时;仍然可以让服务器超时并发送错误响应。如果代码保持原样(没有超时),则客户端将不会超时。现在,当您说客户端将永远不会超时时,您的意思是使用async方法的WebClient将永远不会超时。。但我不清楚你所说的服务器超时是什么意思???为什么服务器会超时?大多数服务器都有一个请求的最长时间,如果请求太长,就会中止请求。现在我将我的网站托管在iis-8中,这样我可以在哪里检查服务器何时超时?你知道服务器的默认超时是多少吗?