加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

我可以使用ASP.NET获得“WAR文件”类型部署吗?

发布时间:2020-12-16 07:14:08 所属栏目:asp.Net 来源:网络整理
导读:有时候,精通J2EE的人会看到ASP.NET并且想知道,将应用程序部署为单个部件的支持在哪里? JSP / Servlet应用程序可以部署为WAR文件,其中包含该单个存档中的所有页面,内容,元数据和代码.战争文件可以版本化,轻松移动.可以确保整个应用程序包含在一个单元中. 这
有时候,精通J2EE的人会看到ASP.NET并且想知道,将应用程序部署为单个部件的支持在哪里? JSP / Servlet应用程序可以部署为WAR文件,其中包含该单个存档中的所有页面,内容,元数据和代码.战争文件可以版本化,轻松移动.可以确保整个应用程序包含在一个单元中.

这不是ASP.NET的主流方法.人们做什么?他们是否诉诸复制目录和所有无数文件?这对ASP.NET开发人员来说不是问题吗?

(这是一种欺骗,因为我会建议我自己的答案)

解决方法

尽管不是ASP.NET中的主流方法,但使用名为VirtualPathProvider for ASP.NET的构造非常有可能.有了它,您可以使用非文件系统的东西来提供网站内容.例如,您可以直接从ZIP文件中提供ASP.NET网站,而不是先将文件解压缩到磁盘.

Here’s a download演示或说明了这个概念,使用DotNetZip库来帮助ASP.NET将内容拉出zip.

有趣的代码位:

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;
        }
    }
}

VPP构造适用于ASP.NET 2.0或更高版本,适用于任何网站.您当然可以根据数据库,CMS或……来调整内容来源.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读