Я тестирую свое веб-приложение ASP.NET MVC2 с использованием MS VisualStudio 2010 Express и сервера разработки ASP.NET на http://localhost. 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 выполняет другие проверки перед возвратом изображения, и поэтому я возвращаю изображение с помощью метода действия.
Проблема здесь в том, что когда сеанс отсутствует (то есть, файл cookie ASP.NET_SessionId не существует для localhost), время для браузера получить изображения очень короткое (~ 10 мс), в то время как при ASP.NET_SessionId файл cookie существует, время увеличивается до 500 мс-1 с. Это происходит в любом браузере.
Я провел различные тесты и увидел, что если я получаю изображения без прохождения через приложение ASP.NET, файл cookie ASP.NET_SessionId не влияет на время загрузки.
Похоже, что несколько запросов HTTP GET с файлом cookie ASP.NET_SessionId, передаваемым веб-приложению, значительно замедляют само приложение.
У кого-нибудь есть объяснение столь странному поведению?
Большое спасибо.
UPDATE
Описанная выше проблема возникает и на веб-сервере IIS7, поэтому она не относится к локальному серверу разработки ASP.NET.