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

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

Как настроить IIS 7.0 или веб-приложение в IIS таким образом, чтобы ASP.NET Runtime обрабатывал все запросы, в том числе статические файлы, такие как *.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 для этого.

Ответы [ 2 ]

5 голосов
/ 07 апреля 2010

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

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

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

1 голос
/ 08 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...