【发布时间】:2020-08-08 06:16:33
【问题描述】:
首先我想指出,在我看来,这不是一个重复的问题,因为标题中描述的超时发生了 8/10 次。所以并非总是如此。
我们有一个带有 Dapper 的 .NET 应用程序,但应用程序突然在 30 秒后停止了请求。我们之前遇到过这个问题,并通过更新 IIS 中的所有limit 选项并将executionTimeout="00:30:00" 添加到 IIS 的web.conf 文件来修复它。 (在 aspNet 部分)。
以上解决了我们的一个应用程序的问题,包括这个。但突然之间,这个问题似乎又回来了。
奇怪的是它并不总是发生。有时应用程序会继续请求 40、50 或更多秒。但是 8/10 次它会在 30 秒后停止。
我们还在调用查询的代码中设置了executionTimeout。这是设置为 1800 秒。
在我们看来,这一定是 IIS 问题,甚至可能是数据库问题 (MSSQL)?但是我们不确定下一步该做什么,因为它并不总是会发生。如果是 IIS 的问题,我们测试一千次不总是会发生吗?
如果有人能帮助我们解决这个问题,我们将不胜感激。
提前致谢!
编辑代码sn-ps:
C#:
var result = await _connection.QueryAsync<Sample>(sql, commandTimeout: 1800);
web.config:
<aspNetCore ... executionTimeout="00:30:00" ... />
【问题讨论】:
-
这里的变量太多无法确定。我会通过尝试加快流程来解决这个问题。您的客户会喜欢它,您不必担心超时。也就是说……如果直接在 SQL Server Management Studio 中运行查询,执行需要多长时间?
-
executionTimeout控制HTTP Runtime in IIS 的超时时间。您可能正在寻找 SqlCommand's CommandTimeout property,默认为 30 秒。 -
@GeorgeMastros 不幸的是,查询非常复杂,数据库非常庞大。所以这会导致时间变慢,但客户对此表示满意。该查询需要一段时间才能直接在 Management Studio 中执行(仅在生产数据库上)。测试数据库用时不到一秒。 (更少的数据)。
-
@AlwaysLearning 我们使用 Dapper,它被称为 executionTimeout。它在运行查询的代码中设置为 1800 秒。
-
如果在command、connection 和context 这三个参数上指定超时会发生什么?
标签: sql-server iis .net-core windows-server