Question

Parfois, les utilisateurs avertis de J2EE consultent ASP.NET et se demandent, où est la prise en charge du déploiement d’une application en tant qu’unité unique ? Les applications JSP / Servlet peuvent être déployées en tant que fichiers WAR, avec toutes les pages, le contenu, les métadonnées et le code de cette archive unique. Le fichier war peut être versionné, facilement déplacé. Il existe une assurance que l'ensemble de l'application est contenu dans une seule unité.

Ce n'est pas une approche courante pour ASP.NET. Que font les gens? Ont-ils recours à la copie de répertoires et de tous les fichiers innombrables? N’est-ce pas un problème pour les développeurs ASP.NET?

(c'est une sorte de triche, parce que je vais suggérer ma propre réponse)

Était-ce utile?

La solution

Bien que ce ne soit pas une approche courante dans ASP.NET, cela est très possible, en utilisant une construction appelée VirtualPathProvider pour ASP.NET. Avec celui-ci, vous pouvez servir le contenu de sites Web à partir d'éléments autres que le système de fichiers. Par exemple, vous pouvez servir un site Web ASP.NET directement à partir d'un fichier ZIP, sans décompresser d'abord les fichiers sur un disque.

Voici un téléchargement qui illustre ou illustre le concept, qui utilise la bibliothèque DotNetZip pour aider ASP.NET à extraire du contenu du zip.

Les bits de code intéressants:

using Ionic.Zip;

namespace Ionic.Zip.Web.VirtualPathProvider
{
    public class ZipFileVirtualPathProvider : System.Web.Hosting.VirtualPathProvider
    {
        ZipFile _zipFile;

        public ZipFileVirtualPathProvider (string zipFilename)
            : base () {
            _zipFile =  ZipFile.Read(zipFilename);
        }

        ~ZipFileVirtualPathProvider () {
            _zipFile.Dispose ();
        }

        public override bool FileExists (string virtualPath)
        {
            string zipPath = Util.ConvertVirtualPathToZipPath (virtualPath, true);
            ZipEntry zipEntry = _zipFile[zipPath];

            if (zipEntry != null)
            {
                return !zipEntry.IsDirectory;
            }
            else
            {
                // Here you may want to return Previous.FileExists(virtualPath) instead of false
                // if you want to give the previously registered provider a process to serve the file
                return false;
            }
        }

        public override bool DirectoryExists (string virtualDir)
        {
            string zipPath = Util.ConvertVirtualPathToZipPath (virtualDir, false);
            ZipEntry zipEntry = _zipFile[zipPath];

            if (zipEntry != null)
            {
                return zipEntry.IsDirectory;
            }
            else
            {
                // Here you may want to return Previous.DirectoryExists(virtualDir) instead of false
                // if you want to give the previously registered provider a chance to process the directory
                return false;
            }
        }

        public override VirtualFile GetFile (string virtualPath) {
            return new ZipVirtualFile (virtualPath, _zipFile);
        }

        public override VirtualDirectory GetDirectory (string virtualDir)
        {
            return new ZipVirtualDirectory (virtualDir, _zipFile);
        }

        public override string GetFileHash(string virtualPath, System.Collections.IEnumerable virtualPathDependencies)
        {
            return null;
        }

        public override System.Web.Caching.CacheDependency GetCacheDependency(String virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)
        {
            return null;
        }
    }
}

La structure VPP fonctionne avec ASP.NET 2.0 ou version ultérieure, avec n’importe quel site Web. Vous pouvez bien sûr adapter l’idée au contenu source d’une base de données, d’un système de gestion de contenu (CMS) ou ... ??

Autres conseils

Une partie de la solution est constituée de ressources intégrées . Cela s’occupe de tous les fichiers statiques.

Une partie de la solution utilise un projet de déploiement Web , compilant toutes les pages (c.-à-d. le site Web non modifiable) dans un seul assemblage. Cela s’occupe de tous les fichiers .cs.

Il reste donc un fichier .dll dans bin, qui prend en charge les fichiers .dll et les fichiers de raccord .aspx. Par défaut, IIS veut que le fichier aspx existe avant de tenter de le mettre en serveur, d’où le stub.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top