【问题标题】:Is there any way to perform a batched request in Asp.net core?有没有办法在 Asp.net 核心中执行批处理请求?
【发布时间】:2016-12-07 20:48:28
【问题描述】:

我们有一个使用 ASP.Net Core 构建的 API,出于性能原因,我们希望将多个请求合并为一个 HTTP 请求。

在以前的 asp.net 版本中,您可以通过DefaultHttpBatchHandler 允许批量请求。

不幸的是,Asp.net Core 中似乎不存在这样的东西。

有人知道在核心中执行 HTTP 批处理的任何方法吗?

【问题讨论】:

  • 批处理程序的源代码可在 Github 上的 DefaultHttpBatchHandler 类中找到:HttpBatchHandler { ... }。检查它是如何在处理程序中实现的,并创建一个自定义中间件来执行相同的功能。这应该不会太难。
  • Asp.net 和 Asp.net 核心之间有足够的变化,这使得移植变得不简单。自从我最初提出这个问题以来已经过去了 6 个月,我不记得哪些部分不容易移植,我只记得我看到了那个代码,如果不重写它就无法使用它。

标签: c# asp.net asp.net-mvc asp.net-core


【解决方案1】:

在对此事进行研究之后,这似乎很容易实现。不过我觉得应该得到asp.net官方核心团队的支持。

在我看来,它似乎需要一个中间件根据输入的文本创建多个 RouteContext,并调用它们的处理程序 - 并修改它们的响应。这可能有点困难,因为它需要支持HttpContext 的多个响应(据我所知,它似乎将在控制器之间共享)。

不管怎样,官方仓库中有一个开放的issue,我已经从死里复活了,希望它能推动事情的发展。如果近期没有变化,我可能会在未来着手实施。

更新

似乎 asp.net 团队响应了请求,并创建了一个设置为 2.0 里程碑的新 issue,所以我猜这个功能将在 asp.net 2.0 发布期间可用。

【讨论】:

  • 我们最终实现了自己的批处理中间件。无论如何,我们最终还是做了一些非常规的事情(例如批处理中的内部请求通过并行 http 调用执行其操作以更好地负载平衡工作)。这也让事情变得更容易了,因为在 asp.net 核心中控制和重置 HTTP 上下文的同时尝试内联并不是一件容易的事,而且会出现太多的边缘情况。
  • 我们是否喜欢专注于构建一个 Api 网关之类的东西,它将传入的请求传播到多个端点并将结果聚合回调用应用程序
【解决方案2】:

不确定我是否理解?您的意思是 1 个公开的端点进行多次调用吗?

您不能有 1 个 API 操作来创建多个任务(将并行运行),等待它们全部完成然后返回所有响应数据(根据需要组合或分离)吗?

【讨论】:

  • 并非如此,因为假设您使用的是 MVC,您需要能够从该端点调用任何控制器操作。这肯定需要某种中间件。您在控制器端点中没有该数据。
  • 您当然可以创建一个端点来执行一系列操作,但这需要您编写不必要的 exta 代码,这会破坏您的整个架构。
  • 当然,我认为代码需要在某个地方编写或从某个地方访问,所以我想我不完全理解你的问题。
  • 我添加了一个赏金来看看是否有人实现了这样的中间件,或者知道如何做到这一点,并为我节省一些工作。我目前正在研究这个问题,好像还没有实现官方的中间件,我正在通过aspnet/router代码来看看自己实现它会有多困难。
  • That 可能和你说的有点相似
猜你喜欢
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多