ASP.NET MVC 4 异步数据库调用 : never returns the HTTP response

标签 asp.net sql-server asp.net-mvc asp.net-mvc-4 async-await

我尝试对 SQL Server 进行异步数据库调用,并将其与新的 ASP.NET MVC 4 异步功能一起使用,但奇怪的是它根本没有返回。我调试了代码,运行良好,但不知何故 HTTP 请求永远挂起。

这是我做的:

这是数据库调用方法:

public async Task<IEnumerable<Car>> GetCarsAsync() {

    var connectionString = ConfigurationManager.ConnectionStrings["CarGalleryConnStr"].ConnectionString;
    var asyncConnectionString = new SqlConnectionStringBuilder(connectionString) {
        AsynchronousProcessing = true
    }.ToString();

    using (var conn = new SqlConnection(asyncConnectionString)) {
        using (var cmd = new SqlCommand()) {

            cmd.Connection = conn;
            cmd.CommandText = selectStatement;
            cmd.CommandType = CommandType.Text;

            conn.Open();

            using (var reader = await cmd.ExecuteReaderAsync()) {

                return reader.Select(r => carBuilder(r)).ToList();
            }
        }
    }
}

这里,SqlDataReader 上的Select 方法是我实现的扩展方法。 carBuilder 私有(private)方法只返回一个 Car 类的实例。

这是 Controller 类:

public class HomeController : Controller {

    private readonly GalleryContext ctx = new GalleryContext();

    public async Task<ViewResult> IndexAsync() {

        return View("Index", await ctx.GetCarsAsync());
    }
}

知道我错过了什么吗?

最佳答案

您的 Controller 仍然需要从 AsyncController 派生(参见 Exercise 4: Using Asynchronous Controllers ),但现在您需要编写更少的代码来获得与 Task<T> 相同的结果。 .

所以这应该可行:

public class HomeController : AsyncController {

    private readonly GalleryContext ctx = new GalleryContext();

    public async Task<ViewResult> IndexAsync() {

        return View("Index", await ctx.GetCarsAsync());
    }
}

关于ASP.NET MVC 4 异步数据库调用 : never returns the HTTP response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9983777/

相关文章:

asp.net-mvc - 在 MVC4 项目中使用 Json.NET 序列化器

c# - 焦点移出后从文本输入获取值并显示该值的数据

asp.net - 如何使用户控件可用于多个项目?

c# - GridView 验证

sql-server - 在 Transact-SQL 中设置参数时如何连接字符串

c# - SqlConnection 类中的默认网络协议(protocol)是什么

c# - 修改 CookieAuthenticationOptions LoginPath OnRedirectToReturnUrl 事件

javascript - 当用户使用不同帐户打开新选项卡时,强制刷新旧选项卡中的站点

asp.net - 资源解释为样式表但在 ASP.NET IIS 中使用 MIME 类型文本/html 传输

python - 如何在不使用批量插入查询的情况下导入文件csv?