2011-08-09 4 views
1

MS VisualStudio 2010 Express 및 ASP.NET 개발 서버 http://localhost을 사용하여 ASP.NET MVC2 웹 응용 프로그램을 테스트하고 있습니다.ASP.NET_SessionId 쿠키로 인해 여러 GET 요청시 웹 서버가 느려짐

[HTML 코드]

<img src="/images/thumb_79c7b9f0-5939-43e5-a6d0-d5e43f4e8947.jpg" alt="image"> 

[라우팅 구성을 다음 ASP.NET 프레임 워크 I는 다음과 같이 동작 방법을 통해 검색되는 이미지의리스트 페이지를 버전 4

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"]; } 
    } 
} 
01]에 Global.asax.cs

실제로 그림 작업 메서드는 이미지를 반환하기 전에 다른 검사를 수행하므로 이것이 작업 메서드를 통해 이미지를 반환하는 이유입니다.

문제는 여기에 세션이 없으면 (즉, ASP.NET_SessionId 쿠키가 localhost에 존재하지 않음) 브라우저가 이미지를 가져 오는 시간이 ASP가 매우 짧은 경우 (~ 10ms)입니다. NET_SessionId 쿠키가 존재하지 않으면 시간은 500ms-1s로 이동합니다. 이것은 모든 브라우저에서 발생합니다.

다양한 테스트를 수행했으며 ASP.NET 응용 프로그램을 통과하지 않고 이미지를 얻으면 ASP.NET_SessionId 쿠키가 로딩 시간에 영향을 미치지 않습니다.

웹 응용 프로그램에 전달 된 ASP.NET_SessionId 쿠키와 함께 여러 HTTP GET 요청이있는 것처럼 보입니다. 응용 프로그램 자체가 상당히 느려집니다.

누구나 그런 이상한 행동에 대한 설명이 있습니까?

감사합니다.

업데이트 위에서 설명한 문제는 IIS7 웹 서버에서도 발생하므로 로컬 ASP.NET 개발 서버에만 해당되지 않습니다.

답변

1

ASP.NET은 세션 상태에 액세스 할 때 한 번에 하나의 요청 만 허용합니다. 따라서 모든 이미지 요청이 직렬화되며 응답 시간이 길어집니다.

해결 방법은 세션 상태를 사용하지 않도록 설정하거나 읽기 전용으로 설정하는 것입니다. ASP.NET에서이 작업은 속성을 사용하여 수행 할 수 있습니다.

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

많은 솔루션에 감사드립니다. 유일한 문제는 SessionState 특성이 ASP.NET MVC3에서만 사용 가능하다는 것입니다. 이것은 저에게 문제가되지 않습니다 - 프로젝트를 MVC3으로 업그레이드 할 수있었습니다. 그러나 MVC2 프로젝트에서 동일한 작업을 수행하는 방법을 알고 있습니까? –

+0

나는이 [article] (http://blog.whiletrue.com/2010/09/asp-net-mvc-sessions-and-concurrent-requests-not-what-youd-expect/)을 보았습니다. MVC2로이를 달성하십시오. 그러나 사람이 바라는대로 앞으로 똑바로 보이지 않습니다. – Codo

관련 문제