我正在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相关问答推荐

缓存httpmessage内容

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

如何使用 Get-Process powershell 命令通过端口号获取进程的 ID

目前不支持超过 65534 个段的跨区存档

在 Sessions 中存储自定义对象

ASP.NET Web 应用程序 (.NET Framework) 与 ASP.NET Core Web 应用程序 (.NET Framework) 之间的差异

jquery 1.9.0 和 modernizr 无法使用 ASP.NET Web 优化框架进行缩小

为什么 ASP.NET Identity 2.0 使用 GUID/字符串作为用户 ID?

控制器 SessionStateBehavior 是只读的,我可以更新会话变量

如何从 asp:Repeater 循环遍历项目模板中的项目?

如何通过后面的代码不显示

为什么aspx文件会返回404(找不到页面)

如何在 asp.net 中更改 DataBinder.Eval 的日期格式?

Asp.Net Mvc - 如何在共享视图中有一个控制器

在 ASP.NET MVC 中获取服务器机器名称?

使用 NLog 在 ASP.NET Web API 2.1 中进行全局异常处理?

~/ 等价于 javascript

中继器中的中继器

使用 FormsAuthentication.SetAuthCookie 存储更多信息

静态变量是线程安全的吗? C#