我有一个 MVC3 应用程序,我使用 Visual Studio 中的“Web 发布”功能部署到 IIS 7.5。我需要设置第二台服务器,该服务器将进行硬件负载平衡,并将镜像第一台服务器上的设置。
我知道 Web Farm Framework,这是一个选项,但是我不喜欢控制器服务器是链中最薄弱的环节的想法。我想我宁愿只使用硬件负载均衡器来引导流量。
是否可以编写一个手动 Web 部署脚本,每次运行时都针对 2 个单独的服务器?
我有一个 MVC3 应用程序,我使用 Visual Studio 中的“Web 发布”功能部署到 IIS 7.5。我需要设置第二台服务器,该服务器将进行硬件负载平衡,并将镜像第一台服务器上的设置。
我知道 Web Farm Framework,这是一个选项,但是我不喜欢控制器服务器是链中最薄弱的环节的想法。我想我宁愿只使用硬件负载均衡器来引导流量。
是否可以编写一个手动 Web 部署脚本,每次运行时都针对 2 个单独的服务器?
以下是我使用 TFS 执行此操作的方法:
创建您的解决方案配置。选择构建 -> 配置管理器。在 Active Solution Configuration 下拉列表中,选择 New 并输入值(DEV1、DEV2 等)。确保项目上下文中的配置列是 DEV1 用于 DEV1 配置等。
创建发布配置文件(构建 -> 发布)。为您的每台服务器(例如,DEV1 和 DEV2)创建配置文件。在 Connections 选项卡中,选择 Web Deploy 并输入服务器地址(使用 /msdeploy.axd)。此服务器必须安装 Web 部署(我使用的是 Web 部署 3.5)。验证您的连接以确保一切都在连接,然后下一步,然后关闭。不要按发布。保存此文件后,将在项目中的 Properties > Publishing Profile 下创建一个新文件,名称类似于 DEV1.pubxml。此 XML 文件包含所需的所有信息。
为转换创建 Web 配置文件(右键单击 web.config 并选择添加配置转换)。这将允许您根据您执行的部署类型拥有不同的 Web 配置值。例如,您可以在发布到 PROD 时用不同的值替换连接字符串等。您可以在此处阅读有关此内容的更多信息
在文本编辑器中打开项目文件(我使用的是 c#,所以我的项目文件是 .csproj)。如本例所示,搜索 DEV1。您将遇到一条包含 DEV1|AnyCPU 的行。这将是 PropertyGroup 标记的属性中的一个条件。在它下面,添加一个 PublishProfile 标记。下面是一个屏幕截图:
现在你已经设置好了。我使用了 TFS Build,在 Build 定义文件中您唯一需要记住的是在 Items to Build 下(在 Process 选项卡下)设置正确的配置。
您无需在 MSBuild Arguments 字段中设置要构建的目标,因为这些值将从发布配置文件中获取。
现在一切都已设置好,可以运行构建了。如果您在构建时遇到问题(给您关于配置不正确的错误),我已经在这里回答了:TFS 2012 Build Definition for web deployments ignores defined in project files