我正在ASP中创建一个ActionResult.Net MVC提供图像服务.启用会话状态后,IIS一次只能处理同一用户的一个请求.(这不仅适用于MVC.)

因此,在有多个图像调用此操作的页面上,一次只能处理一个图像请求.它是同步的.

我希望这个映像操作是异步的——我希望每个映像都执行多个映像请求,而不需要前一个映像请求来完成.(如果图像只是静态文件,IIS会以这种方式提供它们.)

因此,我想仅针对对该操作调用禁用会话,或者指定某些请求没有会话状态.有人知道在MVC中是如何做到这一点的吗?谢谢!

推荐答案

与其为此实现一个操作过滤器,不如实现一个RouteHandler

这里是交易——IRouteHandler有一种方法——GetHttpHandler.当你做一个ASP.Net MVC对控制器的请求,默认情况下,路由引擎通过创建MvcRouteHandler的新实例来处理请求,该实例返回MvcHandler.MvcHandlerIHttpHandler的一个实现,标记为(惊喜!)IRequiresSessionState接口.这就是为什么普通请求使用会话.

如果you follow my blog post介绍了如何实现自定义RouteHandler(而不是使用MvcRouteHandler)来提供图像,则可以跳过返回标记为IHttpHandler的会话.

这将使IIS免于将同步性强加给您.它的性能也可能更高,因为它跳过了处理过滤器的所有MVC代码层.

Asp.net相关问答推荐

无法从部署在应用程序负载均衡器后面的 AWS ECS 上的应用程序发送 HTTP/S 请求

如何在 asp.net 服务器中使用字体

你能从请求变量中确定时区吗?

部署后 ASP.Net Core Identity 登录状态丢失

在 RedirectToAction 调用中传播 QueryString 参数

Asp.net Identity 密码哈希

每个 'HttpRequest' 在 ASP.NET 中都有自己的线程吗?

Eval()、XPath() 和 Bind() 等数据绑定方法只能在数据绑定控件的上下文中使用

如何确定服务器端 C# 上的浏览​​器窗口大小

等价于 ASP.NET Core 中的 Html.RenderAction

DropDownList AppendDataBoundItems(第一项为空白且无重复项)

aspnet_compiler 发现错误版本的 System.Web.WebPages 1.0.0.0 而不是 2.0.0.0

导航到本地 IIS Express 时,Chrome 会返回错误请求 - 请求太长

在资源文件中使用 HTML

如何在 ASP.Net MVC 3 中返回 HttpNotFound() 的视图?

如何判断字符串的第一个字符是否是字母,C#中的任何字母

如何将代码中的变量调用到aspx页面

~/ 等价于 javascript

ConfigurationManager.AppSettings 缓存

禁用文本框的模型绑定