我正在使用MS VisualStudio 2010 Express和http://localhost上的ASP.NET开发服务器测试我的ASP.NET MVC2 Web应用程序。 ASP.NET Framework是版本4。
我有一个页面,其中包含通过Action方法检索的图像列表,如下所示:
[HTML code]
<img src="/images/thumb_79c7b9f0-5939-43e5-a6d0-d5e43f4e8947.jpg" alt="image">
[Global.asax.cs中的路由配置]
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
"Image",
"images/{id}",
new { controller = "Image", action = "Picture", id = "" }
);
// [...] other routing settings
}
}
[图像控制器]
public class ImageController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Picture(string id)
{
try
{
return File(ImageBasePath + id, "image/jpeg");
}
catch (Exception)
{
}
}
private string ImageBasePath
{
get { return HttpContext.Request.PhysicalApplicationPath + WebConfigurationManager.AppSettings["dbImageBasePath"]; }
}
}
实际上,Picture动作方法在返回图像之前执行其他检查,这就是我通过动作方法返回图像的原因。
这里的问题是,当没有会话时(即localhost不存在ASP.NET_SessionId cookie),当ASP.NET_SessionId时,浏览器获取图像的时间非常短(约10ms) cookie确实存在,时间跳到500ms-1s。这种情况发生在任何浏览器上。
我已经完成了各种测试,我看到如果我在没有通过ASP.NET应用程序的情况下获取图像,那么ASP.NET_SessionId cookie不会影响加载时间。
看起来多个带有传递给Web应用程序的ASP.NET_SessionId cookie的HTTP GET请求会大大减慢应用程序本身的速度。
有没有人对这种奇怪的行为有解释?
非常感谢。
UPDATE 上述问题也发生在IIS7 Web服务器上,因此它不是特定于本地ASP.NET开发服务器。
答案 0 :(得分:1)
ASP.NET一次只允许一个请求访问会话状态。因此,您的所有图像请求都将被序列化,并且您会看到很长的响应时间。
解决方法是禁用会话状态或将其设置为只读。在ASP.NET中,可以使用SessionState
属性:
[SessionState(SessionStateBehaviour.Disabled)]
public class ImageController : Controller
{
...