我能得到“吗?”;“战争档案”;是否使用ASP.NET键入部署?
有时,精通J2EE的人看到ASP.NET时会想,作为单个单元部署应用程序的支持在哪里?JSP/Servlet应用程序可以作为WAR文件进行部署,所有页面、内容、元数据和代码都在该归档文件中。war文件可以进行版本控制,很容易移动。可以保证整个应用程序都包含在一个单元中 这不是ASP.NET的主流方法。人们做什么?他们会复制目录和无数的文件吗?这对ASP.NET开发人员来说不是问题吗我能得到“吗?”;“战争档案”;是否使用ASP.NET键入部署?,.net,asp.net,deployment,archive,.net,Asp.net,Deployment,Archive,有时,精通J2EE的人看到ASP.NET时会想,作为单个单元部署应用程序的支持在哪里?JSP/Servlet应用程序可以作为WAR文件进行部署,所有页面、内容、元数据和代码都在该归档文件中。war文件可以进行版本控制,很容易移动。可以保证整个应用程序都包含在一个单元中 这不是ASP.NET的主流方法。人们做什么?他们会复制目录和无数的文件吗?这对ASP.NET开发人员来说不是问题吗 (这是一种欺骗,因为我要提出我自己的答案)虽然不是ASP.NET中的主流方法,但这是非常可能的,使用一种称为ASP
(这是一种欺骗,因为我要提出我自己的答案)虽然不是ASP.NET中的主流方法,但这是非常可能的,使用一种称为ASP.NET的
VirtualPathProvider
的结构。有了它,您可以从文件系统之外的东西中提供网站内容。例如,您可以直接从ZIP文件中为ASP.NET网站提供服务,而无需首先将文件解压缩到磁盘
它演示或说明了这个概念,使用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或…?的源内容调整此想法 部分解决方案是。这会处理所有静态文件
解决方案的一部分是使用,将所有页面(即网站不可更新)编译为单个程序集。这会处理所有的.cs文件
所以剩下的是bin中的.dll,支持.dll文件和.aspx存根文件。默认情况下,IIS希望aspx文件在尝试为其提供服务器之前存在,因此需要存根。当我第一次开始使用asp.net时,我简直不敢相信他们没有类似战争的部署模型。War部署是完全有意义的,而部署asp.net站点所需的数百个文件是非常荒谬的。只有一个文件。易于校验和验证。等。我唯一的意见是性能,zip文件提供程序应该首先将文件解压缩到asp.net卷影文件夹中。在没有看到实际代码的情况下,它可能已经这样做了。因此,唯一真正影响性能的是应用程序池回收,理论上,它必须重新检查依赖项,以确定是否需要再次解压缩。@enrol76-ZipVirtualFile不会解压缩文件。它不会写入文件系统。它只打开一个可读的流,该流在读取时解压缩。ASPNET本身将读取该流,我不知道它如何处理被读取的内容,但这取决于ASPNET。