我在ASP.Net MVC中创建一个ActionResult来提供图像.启用会话状态后,IIS将一次只处理来自同一用户的一个请求.(这不仅适用于MVC.)
因此,在具有多个图像回调此Action的页面上,一次只能处理一个图像请求.这是同步的.
我希望这个图像Action是异步的 - 我希望每次执行多个图像请求而不需要前一个完成.(如果图像只是静态文件,IIS会以这种方式为它们提供服务.)
所以,我想禁用Session仅用于对该Action的调用,或者指定某些请求没有Session状态.任何人都知道如何在MVC中完成这项工作?谢谢!
使用ASP.NET WebForms,可以在页面指令中设置会话状态模式:
<%@ Page EnableSessionState="true|false|ReadOnly" %>
Run Code Online (Sandbox Code Playgroud)
ASP.NET MVC中是否也可以使用相同的配置(例如,每个控制器或每个操作),如果是,如何?
(换句话说:我可以禁用或设置每个控制器/操作的只读会话状态吗?我假设会话状态读/写会导致一些开销,所以如果没有关闭会话状态可能会有用需要.)
在考虑downvoting或告诉我"google it"之前,请仔细阅读问题.这是旧/经典问题,但旧/经典解决方案不再有效.这是在Visual Studio 2013/2015中重现的非常简单的场景:
2)打开Controllers\HomeController.cs并向控制器和"睡眠"动作添加属性:
[SessionState( System.Web.SessionState.SessionStateBehavior.Disabled)]
public class HomeController : Controller
{
public ActionResult Sleep(int? time)
{
System.Threading.Thread.Sleep(time ?? 3000);
return Content("OK");
}
public ActionResult Index()
{
...
Run Code Online (Sandbox Code Playgroud)
3)打开文件:Views\Home\Index.cshtml并使用以下内容添加/替换内容html:
<script>
function ReqClick() {
var startTime = Date();
$.ajax("/Home/Sleep")
.success(function () {
var log = $("#log");
var endTime = Date();
log.text(log.text() + "Start: " + startTime.toString() + " === " + endTime.toString());
});
};
</script>
<button type="button" onclick="ReqClick();">
Request
</button>
<div>
<textarea id="log" style="width:640px; height:480px"></textarea>
</div>Run Code Online (Sandbox Code Playgroud)
4)运行它(如果您使用的是IIS或IIS Express或Vs …
asp.net-mvc concurrency multithreading session-state asp.net-mvc-5