【问题标题】:ASP.NET_SessionId cookie slows down web server on multiple GET requestsASP.NET_SessionId cookie 在多个 GET 请求上减慢 Web 服务器的速度
【发布时间】: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


    【解决方案1】:

    ASP.NET 一次只允许一个请求访问会话状态。因此,您的所有图像请求都将被序列化,并且您会看到很长的响应时间。

    解决方法是禁用会话状态或将其设置为只读。在 ASP.NET 中,这可以通过 SessionState 属性来完成:

    [SessionState(SessionStateBehaviour.Disabled)]
    public class ImageController : Controller
    {
     ...
    

    【讨论】:

    • 非常感谢,这个解决方案非常完美。唯一的问题是 SessionState 属性仅在 ASP.NET MVC3 中可用。这对我来说不是问题——我能够将我的项目升级到 MVC3。但是你知道如何在 MVC2 项目中做同样的事情吗?
    • 我看过这个article,它展示了如何使用 MVC2 实现它。但它看起来并不像人们希望的那样直截了当。
    猜你喜欢
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多