2010-01-21 1 views
5

У меня есть простой HTTPModule, который выполняет определенное пользовательское управление сеансом.JS, изображения и CSS, которые перехватываются HTTPModule

public void Init(HttpApplication context) 
     { 
      context.AcquireRequestState += new EventHandler(ProcessBeginRequest); 
      ActivityLogger.LogInfo(DateTime.UtcNow.ToLongTimeString() + " In Init " + HttpContext.Current.Request.Url.AbsoluteUri); 
     } 

и

public void ProcessBeginRequest(object sender, EventArgs e) 
     { 
      HttpApplication application = sender as HttpApplication; 
      ActivityLogger.LogInfo(DateTime.UtcNow.ToLongTimeString() + " In ProcessBeginRequest "); 
      if (application != null) 
      { 
       string requestURL = application.Context.Request.Url.ToString(); 
       ActivityLogger.LogInfo(DateTime.UtcNow.ToLongTimeString() + " In ProcessBeginRequest " + requestURL); 
      } 
      return; 
     } 

Когда я запустил этот код с контрольными точками, я увидел, что этот модуль был вызван даже для статических файлов, таких как изображения, JS и CSS. Кто-нибудь испытал это? Я думаю, что HTTP-модули только подключались к событиям в конвейере http для страниц asp.net. Они также подключаются к статическим ресурсам? Или это просто с кассини?

окружающей среды: VS2008 - Кассини сервер

PS: Я попробовать его с Win2k8 IIS7 в нашей песочнице (своего рода новый), и попытался записать его в лог-файл (как мы не имеем VS там), но не удалось записать в файл журнала. Я уверен, что некоторые проблемы с правами на запись. Может ли кто-нибудь указать мне на какой-то ресурс, который подскажет мне, как устанавливать права на запись для каталогов при запуске ASP.net с IIS7 в W2k8?

Редактирование 1: Я понимаю, что использование встроенного конвейера расширяет HTTP-конвейеры для статических и управляемых ресурсов, как http://aspnet.4guysfromrolla.com/articles/122408-1.aspx и http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis7/

Мы используем классический трубопровод в нашем продукте. Но все еще интересно узнать, что испытали другие люди.

Вопрос2: Использование IIS7 в интегрированном режиме уменьшит производительность? Скажем, у вас есть пара модулей, подключающихся к конвейеру, сколько будет влиять на производительность? Было бы неплохо, если бы кто-то мог указать мне на некоторые базовые исследования, сделанные для этого.

ответ

12

Похоже, есть способ сделать это

http://learn.iis.net/page.aspx/121/iis-70-modules-overview/#Disabling

установка preCondition="managedHandler" и <modules runAllManagedModulesForAllRequests="false" /> будет делать трюк

примечание к себе: http://code.google.com/p/talifun-web/wiki/StaticFileHandler необходимость изучения этого StaticFileHandler

ссылки:

http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the-iis7-integrated-pipeline/

Exclude HttpModule from running for static content on IIS7

BUG: IIS7 managed requests

http://msdn.microsoft.com/en-us/library/bya7fh0a.aspx

+0

спасибо. добавил это к todo для http://cassinidev.codeplex.com –

+0

Ваша «заметка к себе» - сплошное золото! Upvotes! – jerhewet

+0

Есть ли хороший способ достичь этого в IIS6? Я знаю, что это немного не связано с вопросом, но было бы хорошей ссылкой для тех, кто приземлился здесь, как и я, из-за названия вопроса в одиночку. –

0

Да, он будет вызываться для любых типов файлов.

В этих модулях типично отфильтровывать все, что вас не интересует, например, ex. проверяя, содержит ли HttpContext.Request.Url.AbsolutePath '/ _layouts' в SharePoint.

+0

Есть ли способ настроить модули таким образом, что они только получить подключили к трубопроводу для конкретных расширений (например, ASPX или ASMX или моего пользовательского ASHx)? – ram

+0

Этот ответ специфичен для веб-сервера ASP.NET Development (Cassini) - на ваш вопрос упоминаются IIS7 и Cassini. Cassini отправит ВСЕ запросы на любые HttpModules.Обратите внимание, что это другое поведение, чем IIS6 или IIS7 (нужна другая конфигурация для получения одинакового поведения на каждом) – Adam