Настройте IIS7 для сервера статического содержимого через среду выполнения ASP.NET.

Я искал высоко и низко и до сих пор не могу найти определенного ответа.

Как настроить IIS 7.0 или веб-приложение в IIS, чтобы среда выполнения ASP.NET обрабатывала все запросы, включая запросы к статическим файлам, таким как *.js, *.gif и т. д.?

Я пытаюсь сделать следующее.

У нас есть своего рода SaaSy-сайт, который мы можем «брендировать» для каждого клиента. «Брендинг» означает разработку пользовательской главной страницы и использование набора *.css и других изображений.

Вполне естественно, что я использую VirtualPathProvider, который работает следующим образом:

public override System.Web.Hosting.VirtualFile GetFile(string virtualPath)
{
    if(PhysicalFileExists(virtualPath))
    {
        var virtualFile = base.GetFile(virtualPath);
        return virtualFile;
    }

    if(VirtualFileExists(virtualPath))
    {
        var brandedVirtualPath = GetBrandedVirtualPath(virtualPath);
        var absolutePath = HttpContext.Current.Server.MapPath(brandedVirtualPath);

        Trace.WriteLine(string.Format("Serving '{0}' from '{1}'", 
            brandedVirtualPath, absolutePath), "BrandingAwareVirtualPathProvider");

        var virtualFile = new VirtualFile(brandedVirtualPath, absolutePath);
        return virtualFile;    
    }

    return null;
}

Основная идея заключается в следующем: у нас есть папка branding внутри нашего веб-приложения, которое, в свою очередь, содержит папки для каждого «бренда», где «бренд» равен имени хоста. То есть запросы к http://foo.example.com/ должны использовать статические файлы из branding/foo_example_com, тогда как http://bar.example.com/ следует использовать содержимое из branding/bar_example_com.

Теперь я хочу, чтобы IIS перенаправлял все запросы к статическим файлам на StaticFileHandler, который затем использовал всю эту «инфраструктуру» и обслуживал правильные файлы. Однако, как я ни старался, я не могу настроить IIS для этого.


person Anton Gogolev    schedule 07.04.2010    source источник
comment
Вы спрашиваете, как заставить все запросы обрабатываться обработчиком запросов ASP.NET вместо обработчика IIS по умолчанию для этих типов? Или если ваш IIS не отвечает на запросы файлов, отличных от ASPNET? Ваш вопрос немного не ясен.   -  person SqlRyan    schedule 07.04.2010
comment
@rwmnau Спасибо! Стало понятнее?   -  person Anton Gogolev    schedule 07.04.2010
comment
Это так - спасибо за редактирование.   -  person SqlRyan    schedule 07.04.2010


Ответы (2)


II7 уже делает это, если Managed Pipeline Mode пула приложений установлено на Integrated, что является значением по умолчанию. В интегрированном режиме ASP.NET обрабатывает все запросы, включая запросы к статическим объектам.

Если вам нужно оставить свой пул приложений в Classic Mode, вам нужно использовать те же методы, которые вы использовали бы в IIS 6, для явного создания обработчиков для различных статических расширений.

Дополнительная информация, основанная на комментариях: я думаю, что ваша недостающая часть создает HttpHandler для обработки других расширений (.js, .css и т. д.). Без этого ASP.NET будет использовать обработку по умолчанию для этих типов файлов. Вы должны создать ссылку на свой обработчик в своем файле web.config. Эта статья является примером создания HttpHandler для статических файлов.

person Keltex    schedule 07.04.2010
comment
Смотрите мои правки. Ваш ответ остается верным в свете этого? - person Anton Gogolev; 07.04.2010

Спасибо всем, но проблема была совсем в другом месте.

VirtualPathProvider нельзя использовать на предварительно скомпилированном веб-сайте. Я в ярости.

person Anton Gogolev    schedule 08.04.2010