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

asp.net-mvc – 使用Web Deploy发布ASP.NET MVC2站点

发布时间:2020-12-16 00:25:32 所属栏目:asp.Net 来源:网络整理
导读:我目前使用Web Deploy, http://learn.iis.net/page.aspx/346/web-deploy/来发布我的MVC2应用程序。它以前工作得很好,但是现在已经到了我不能继续使用它的地步: 当MVC应用程序很小,只有少数用户很容易发布。右键单击Visual Studio中的项目并选择“发布”
我目前使用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个更改的文件。情况是荒谬的,现在是我们网站最大的弱点之一。所以我开始体面的大小的赏金,希望能够解决这个问题。

还有一些可能导致解决方案的问题:

>为什么只有几个文件被更改需要很长时间?
>为什么Web部署zip总是包含整个代码库,而不仅仅是更改的文件?
>为什么我不自己手动复制更改的文件,并跳过整个Web部署?但是很难手动确定哪些文件已经更改。我使用SVN – 它是否只能输出两个分支之间已经更改的文件?
还有什么其他问题应该问,但还没有想到呢?

回答答案:

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文件通常需要多长时间。

(编辑:李大同)

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

    推荐文章
      热点阅读