asp.net-mvc – 使用Web Deploy发布ASP.NET MVC2站点
我目前使用Web Deploy,
http://learn.iis.net/page.aspx/346/web-deploy/来发布我的MVC2应用程序。它以前工作得很好,但是现在已经到了我不能继续使用它的地步:
当MVC应用程序很小,只有少数用户很容易发布。右键单击Visual Studio中的项目并选择“发布”。而且由于只有少数用户,很容易找到一个没有人使用该网站进行快速更新的时间。 那么应用程序越来越大,还有更多的用户。 “发布”动作开??始时间越来越长,偶尔超时。即使在部署之前我再次使用应用程序池,仍然需要很长时间。 此外,当没有人使用该网站时,更难找到一个时间,所以更新可以在不影响任何人的情况下完成。 然后,“发布”操作每次都会开始超时,我不得不根据以前的未回答的问题切换到手动部署:Visual Studio 2010 – web deploy times out – what to do? 现在手动部署需要更长的时间,从5到20分钟。并且用户数量显着增加,因此部署总是影响某人(响应时间慢,超时,站点不可用等) 那我该怎么办?使用Web部署有更好的选择吗? 编辑: 今天的部署需要18分钟才能发布49个更改的文件。情况是荒谬的,现在是我们网站最大的弱点之一。所以我开始体面的大小的赏金,希望能够解决这个问题。 还有一些可能导致解决方案的问题: >为什么只有几个文件被更改需要很长时间? 回答答案: Re:http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_24.html这正是我正在做的部署,这将是一个理想的方法。 Web部署可以正确识别哪些文件已更改,但是会超时,也不会发生发布。解决方案中有大约2500个文件,也许是太长时间才能确定哪些文件被更改?或者可能是发布具有短暂的超时值,并且刚刚上传15mb的zip文件会使用所有这些时间。 我完全控制了服务器,它支持Web部署。实际上有2台服务器:主要的实时服务器,以及我们随时准备好的第一台服务器。所以任何解决方案必须易于部署到多个服务器(Web部署是理想的,直到它停止工作)。 建议为每个版本创建一个新的文件夹,然后只是更改IIS,以指向新的文件夹听起来像这样会导致停机时间/慢时间在发布时。但这是一个非常手动的过程,我更喜欢更自动化的东西。 编辑#2 我已经设法把它缩小了,发现它在哪里慢 – 但不是为什么。这是从部署日志: [9/02/2011 12:11:56 a.m.] Performing synchronization pass #1. [9/02/2011 12:11:56 a.m.] Parameter entry 'IIS Web Application Name/1' is applicable to 'iisApp/C:srcSite.2010Site.UIobjReleasePackagePackageTmp' because of its scope. [9/02/2011 12:11:56 a.m.] Parameter entry 'IIS Web Application Name/2' is applicable to 'setAcl/C:srcSite.2010Site.UIobjReleasePackagePackageTmp' because of its scope. [9/02/2011 12:11:56 a.m.] Parameter entry 'IIS Web Application Name/2' is applicable to 'setAcl/C:srcSite.2010Site.UIobjReleasePackagePackageTmp' because of its scope. [9/02/2011 12:11:56 a.m.] Parameter entry 'Add write permission to App_Data Folder/1' is applicable to 'setAcl/C:srcSite.2010Site.UIobjReleasePackagePackageTmpApp_Data' because of its scope. [9/02/2011 12:11:56 a.m.] Source createApp (C:srcSite.2010Site.UIobjReleasePackagePackageTmp) does not match destination (Default Web Site/virtual-dir/) differing in attributes (isDest['False','True']). Update pending. [9/02/2011 12:11:56 a.m.] Update operation on createApp (C:srcSite.2010Site.UIobjReleasePackagePackageTmp) skipped because of rule CreateApplicationRule. [9/02/2011 12:11:56 a.m.] Source filePath (C:srcSite.2010Site.UIobjReleasePackagePackageTmpApp_DataCreate.sql) does not match destination (Default Web Site/virtual-dir/App_DataCreate.sql) differing in attributes (size['259691','259697'],lastWriteTime['02/08/2011 10:45:20','02/06/2011 03:48:16']). Update pending. [400 lines of file updates skipped,time expired 2 seconds ....] [9/02/2011 12:11:58 a.m.] Delete operation on filePath (Default Web Site/v2/zzz_app_offline.htm) skipped because of rule DoNotDeleteRule. [9/02/2011 12:11:58 a.m.] Source setAcl (C:srcSite.2010Site.UIobjReleasePackagePackageTmp) does not match destination (Default Web Site/virtual-dir/) differing in attributes (isDest['False','True'],setAclUser,setAclAccess). Update pending. [9/02/2011 12:11:58 a.m.] Updating setAcl (Default Web Site/virtual-dir/). [9/02/2011 12:13:47 a.m.] Source setAcl (C:srcSite.2010Site.UIobjReleasePackagePackageTmp) does not match destination (Default Web Site/virtual-dir/) differing in attributes (isDest['False',setAclAccess). Update pending. [9/02/2011 12:13:47 a.m.] Updating setAcl (Default Web Site/virtual-dir/). [9/02/2011 12:17:11 a.m.] Source setAcl (C:srcSite.2010Site.UIobjReleasePackagePackageTmpApp_Data) does not match destination (Default Web Site/virtual-dir//App_Data) differing in attributes (isDest['False',setAclAccess). Update pending. [9/02/2011 12:17:11 a.m.] Updating setAcl (Default Web Site/virtual-dir//App_Data). [9/02/2011 12:17:11 a.m.] The dependency check 'DependencyCheckInUse' found no issues. [9/02/2011 12:17:11 a.m.] The synchronization completed in 1 pass(es). 缓慢的原因是“更新setAcl”组件。我正在检查开发框和服务器框的ACL,看看有什么不同。然而,将ACL从一个开发框复制到一个服务器盒子似乎是一个非常糟糕的主意!我已经在服务器上设置好了ACL。 解决方法
我首先尝试隔离超时发生的地方。你提到了一个15MB的压缩文件,2500个文件,这不会使我特别大。您是否尝试在Visual Studio中创建一个部署包,然后直接在服务器上运行?这将使网络延迟超出图片,这是一个非常基本的变量,当涉及到超时。
至于为什么需要上传整个应用程序的zip,您需要记住在IIS中所发生的更改和后续部署的实际标识都发生在服务器上。您的本地机器上不是Visual Studio或msdeploy,可以调用这个镜头。 至于为什么你不只是手动复制更改的文件,它总结在我引用的博客文章中,但简言之,它是费力和容易出错的。这意味着你需要自觉地通过“我的2500个文件刚刚改变”的思想过程,而不是简单地说“让我的目标网站符合我的开发版本”。你没有提到是否要发布web.config,但是显然配置转换是为什么简单的CTRL-C然后CTRL-V方法是麻烦的另一个重要原因。 试图直接从SVN进行更改也是有风险的。您的第一个问题是,如果您要发布适当的更改,您需要对您正在更新的修订版的完整性和准确性有完全的信心。然后,您尝试将其同步到目标,并返回上一段中提出的相同问题。另一个大问题是版本控制对象代码总是讨厌;您将与项目中的任何其他人处于永久的冲突状态,VCS根本不是以这种方式运行。 我的建议是专注于解决问题的根本原因 – Web部署是超时的 – 而不是简单地试图解决症状。仅手动发布更改或使用IIS绑定进行操作只会为您带来更多麻烦,从长远来看,还有更多的工作在短期内。看看你如何分享创建包的结果,将其复制到服务器,然后在本地执行,我们将从那里拿走。一旦你按照设计工作,你应该看到部署不超过几分钟,站点停电在几秒钟内测量。 BTW – 您可能还想添加您的PC和服务器之间的延迟,以及通过HTTP传输15MB文件通常需要多长时间。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 基于属性名称的共享编辑器模板?
- asp.net-mvc – IIS 7与IIS Express的路由错误,生成HTTP 40
- asp.net – 使用mvc-mini-profiler 1.9“无法确定提供程序名
- asp.net-mvc – Azure下载blob文件流/ memorystream
- asp.net – 如何在SSRS公式字段中按两个日期计算天数
- asp.net – Response.TrySkipIisCustomErrors不工作
- asp.net – 未在生产服务器中的WCF调用上传递凭据
- asp.net – 如何设置表单身份验证cookie路径
- asp.net-mvc-3 – 在MVC3中循环渲染部分视图
- asp.net – 如何确定HttpModules的执行顺序?
- NPOI导出EXCEL报_服务器无法在发送 HTTP 标头之后
- asp.net-mvc – 在TryUpdateModel之前更新值提供
- asp.net – 如何跟踪IIS服务器性能
- asp.net-mvc-4 – 使用Bootstrap日期时间选择器,
- .net – 为什么在单击按钮时,SelectedIndexChang
- asp.net – ASP .Net实体框架.tt文件不嵌套在.ed
- 使用Openiddict的ASP.NET Core 1.0 OAuth服务器
- asp.net-mvc – VS 2015:无法加载文件或程序集’
- ASP.NET:在URL中隐藏查询字符串
- asp.net – web.config和machine.config之间的区