asp.Net   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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个更改的文件。情况是荒谬的,现在是我们网站最大的弱点之一。所以我开始体面的大小的赏金,希望能够解决这个问题。

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

>为什么只有几个文件被更改需要很长时间?
>为什么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:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp' because of its scope.
[9/02/2011 12:11:56 a.m.] Parameter entry 'IIS Web Application Name/2' is applicable to 'setAcl/C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp' because of its scope.
[9/02/2011 12:11:56 a.m.] Parameter entry 'IIS Web Application Name/2' is applicable to 'setAcl/C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp' 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:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp\App_Data' because of its scope.
[9/02/2011 12:11:56 a.m.] source createApp (C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp) 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:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp) skipped because of rule CreateApplicationRule.
[9/02/2011 12:11:56 a.m.] source filePath (C:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp\App_Data\Create.sql) does not match desTination (Default Web Site/virtual-dir/App_Data\Create.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:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp) 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:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp) 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:\src\Site.2010\Site.UI\obj\Release\Package\PackageTmp\App_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,可以调用这个镜头。

至于为什么你不只是手动复制更改的文件,它总结在我引用的博客文章中,但简言之,它是费力和@R_500_10197@的。这意味着你需要自觉地通过“我的2500个文件刚刚改变”的思想过程,而不是简单地说“让我的目标网站符合我的开发版本”。你没有提到是否要发布web.config,但是显然配置转换是为什么简单的CTRL-C然后CTRL-V方法是麻烦的另一个重要原因。

试图直接从SVN进行更改也是有风险的。您的第一个问题是,如果您要发布适当的更改,您需要对您正在更新的修订版的完整性和准确性有完全的信心。然后,您尝试将其同步到目标,并返回上一段中提出的相同问题。另一个大问题是版本控制对象代码总是讨厌;您将与项目中的任何其他人处于永久的冲突状态,VCS根本不是以这种方式运行。

我的建议是专注于解决问题的根本原因 – Web部署是超时的 – 而不是简单地试图解决症状。仅手动发布更改或使用IIS绑定进行操作只会为您带来更多麻烦,从长远来看,还有更多的工作在短期内。看看你如何分享创建包的结果,将其复制到服务器,然后在本地执行,我们将从那里拿走。一旦你按照设计工作,你应该看到部署不超过几分钟,站点停电在几秒钟内测量。

BTW – 您可能还想添加您的PC和服务器之间的延迟,以及通过http传输15MB文件通常需要多长时间。

大佬总结

以上是大佬教程为你收集整理的asp.net-mvc – 使用Web Deploy发布ASP.NET MVC2站点全部内容,希望文章能够帮你解决asp.net-mvc – 使用Web Deploy发布ASP.NET MVC2站点所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。