Почему Вы хотите сделать это? Если это - так, чтобы другое приложение могло использовать его, Вы могли бы хотеть изучить перенаправление привязки сборки вместо этого.
Почему бы вам не реализовать для этого фильтр действий RouteHandler
?
Вот в чем дело - у IRouteHandler
есть такой метод - GetHttpHandler
. Когда вы делаете запрос ASP.Net MVC к контроллеру, по умолчанию механизм маршрутизации обрабатывает запрос, создавая новый экземпляр MvcRouteHandler
, который возвращает MvcHandler
. MvcHandler
- это реализация IHttpHandler
, отмеченная (сюрприз!) Интерфейсом IRequiresSessionState
. Вот почему обычный запрос использует Session.
Если вы следите за моим сообщением в блоге о том, как реализовать собственный RouteHandler
(вместо использования MvcRouteHandler) для обслуживания изображений, вы можете пропустить возврат с тегами сеанса IHttpHandler
.
Это должно освободить IIS от навязывания вам синхронности. Также, вероятно, будет более производительно, потому что он пропускает все уровни кода MVC, работающие с фильтрами.
Попробуйте обслуживать изображения из другого домена. Например, images.mysite.com.
Это даст вам два преимущества: во-первых, сеансы отслеживаются с помощью файла cookie, поэтому у images.mysite.com этот файл cookie не будет. Во-вторых, он даст вам еще два одновременных запроса на получение изображений.
Думали ли вы о настройке HttpHandler для обслуживания ваших изображений?
mysite.com.Это даст вам два преимущества: во-первых, сеансы отслеживаются файлом cookie, поэтому у images.mysite.com этот файл cookie не будет. Во-вторых, он даст вам еще два одновременных запроса на получение изображений.
Думали ли вы о настройке HttpHandler для обслуживания ваших изображений?
mysite.com.Это даст вам два преимущества: во-первых, сеансы отслеживаются файлом cookie, поэтому у images.mysite.com этот файл cookie не будет. Во-вторых, он даст вам еще два одновременных запроса на получение изображений.
Думали ли вы о настройке HttpHandler для обслуживания ваших изображений?
На нашем сервере IIS даже не знает о сеансах - это стек ASP.NET, который обрабатывает один запрос за сеанс за раз. Статические файлы, такие как изображения, никогда не затрагиваются.
Возможно ли, что ваше приложение ASP.NET обслуживает файлы вместо IIS?
Измените DefaultCOntrollerFactory на собственный класс ControllerFactory. Контроллер по умолчанию.TempDataProvider использует SessionStateTempDataProvider. вы можете это изменить.
1. Установите web.config / system.web / sessionState: mode = "Off".
2. Создайте класс DictionaryTempDataProvider.
public class DictionaryTempDataProvider : ITempDataProvider
{
public IDictionary<string, object> LoadTempData(ControllerContext controllerContext)
{
return new Dictionary<string, object>();
}
public void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values)
{
}
}
3. Создайте DictionaryTempDataControllerFactory
public class DictionaryTempDataControllerFactory : DefaultControllerFactory
{
public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
var controller = base.CreateController(requestContext, controllerName) as Controller;
if (controller!=null)
controller.TempDataProvider = new DictionaryTempDataProvider();
return controller;
}
}
4. В global.asax.cs Apprication_Start набор событий DictionaryTempDataControllerFactory.
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
ControllerBuilder.Current.SetControllerFactory(
new DictionaryTempDataControllerFactory()
);
}