我在ASP.NET Core MVC
查看页面
MyView.cshtml
$.ajax({
processData: false,
contentType: false,
data: new FormData(this),
type: $(this).attr('method'),
url: $(this).attr('action'),
cache: false,
success: function (data) {
$('#mydiv).html(data);
$('#bootstrapModal).modal('show');
Controller Post方法“
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> MyLongRunningMethod(MyViewModel viewModel)
{
await MyProcess.Longprocess1();
await MyProcess.Longprocess2();
await MyProcess.Longprocess3();
await MyProcess.Longprocess4();
return PartialView("_MyPartialPage");
}
这有效但只对长时间运行的进程有问题。调试模式期间,当进程花费的时间超过大约2分钟时,我收到以下错误
我理解这与过期超时有关
在以前版本的ASP.NET MVC中,您显然可以增加asp.net控制器操作的超时时间。
HttpContext.Current.Server.ScriptTimeout = 90000;
但ASP.NET Core
我想增加特定asp.net控制器的调试和部署超时。
对于生产,我可以通过将requestTimeout添加到现有的httpPlatform标记,在web.config
中全局设置它。
例如10分钟
<httpPlatform requestTimeout="00:10:00" ....
虽然提出了类似的问题,但answer使用CancellationToken
给出但是阅读它,它似乎不能帮助我超时。
ASP.NET 4
中的每个控制器超时设置?答案 0 :(得分:44)
在RequestTimeout="00:20:00"
代码上设置aspNetCore
并部署该网站会导致它不会超时。
现在只在从Visual Studio调试模式运行但不在发布模式下运行时才会出现问题。
请注意:在ASP.NET RTM中,httpPlatform
aspNetCore
标记已替换为web.config
ASP.NET Core的示例
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore requestTimeout="00:20:00" processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>
答案 1 :(得分:25)
但在.Net Core 2.0中,项目中没有web.config
个文件。它会自动生成。
我通过将.UseKestrel(...)
添加到BuildWebHost
文件中的Program.cs
函数来解决了这个问题,如下所示:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(o => { o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10); })
.Build();
}
答案 2 :(得分:14)
在我的情况下,即使在更新requestTimeout
参数后,我们仍然在2分钟时遇到502超时错误。事实证明,红隼有一个2分钟的保持活动超时需要被覆盖:
var host = new WebHostBuilder()
.UseKestrel(o =>
{
o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30);
}
)
答案 3 :(得分:3)
Program.cs
在NET Core 3.1中,使用以下实现来增加KeepAliveItemout:
func fetchUser() {
Database.database().reference().child("users").observe(.childAdded, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
let user = User()
//will crash if your class properties don't exactly match up with firebase dictionary keys
user.setValuesForKeys(dictionary)
self.users.append(user)
//this will crash because of background thread, so use dispatch async to fix
dispatch_async(dispatch_get_main_queue)
self.tableView.reloadData()
print(user.name!, user.email!)
Web.Config
根据web.config的要求增加requestTimeout:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureKestrel(options =>
{
options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(15);
});
});
答案 4 :(得分:0)
在Visual Studio中,“解决方案资源管理器”中没有出现文件web.config。我修复了在解决方案中添加文件的问题,并更改了属性“复制到输出目录”。
答案 5 :(得分:-1)
对我来说这可行:
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureKestrel(o => { o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10); });