【发布时间】:2011-10-23 00:52:00
【问题描述】:
我正在使用 MS VisualStudio 2010 Express 和 http://localhost 上的 ASP.NET 开发服务器测试我的 ASP.NET MVC2 Web 应用程序。 ASP.NET Framework 是第 4 版。
我有一个页面,其中包含通过 Action 方法检索的图像列表,如下所示:
[HTML 代码]
<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"]; }
}
}
实际上,图片操作方法在返回图像之前会执行其他检查,这就是我通过操作方法返回图像的原因。
这里的问题是,当没有会话时(即本地主机不存在 ASP.NET_SessionId cookie),浏览器获取图像的时间非常短(~10ms),而当 ASP.NET_SessionId cookie确实存在,时间跳到500ms-1s。这发生在任何浏览器上。
我做了各种测试,发现如果我在不通过 ASP.NET 应用程序的情况下获取图像,ASP.NET_SessionId cookie 不会影响加载时间。
看起来多个带有 ASP.NET_SessionId cookie 的 HTTP GET 请求传递给 Web 应用程序会大大降低应用程序本身的速度。
有人对这种奇怪的行为有解释吗?
非常感谢。
更新 上面描述的问题也发生在 IIS7 Web 服务器上,因此它不是本地 ASP.NET 开发服务器所特有的。
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-2 session cookies