Web 部署可以在 VS2010 里直接使用 HTTP 部署网站(此方式不可以在无项目文件的网站使用)。不要把 Web 部署和 FPSE(Front Page Server Extensions)混淆,FPSE 已经过时。
1. 准备 IIS
需要添加两个额外的组件。再次打开 WebPI,在 Web 平台页签的 Web 服务器里选择“自定义”,在“部署和发布”里选择“Web 部署工具”,在管理里选中“管理服务”选项。同时选中这两项对于让部署正常工作极其重要。
安装完成后,启动 IIS管理器,从“连接”的树控件里选择服务器项。滚动到屏幕底部,如果所有部件都已经正确安装,会看到两个新图标:管理服务、管理服务代理。
配置并启动一个监听远程 IIS 管理请求的 Windows 服务:双击“管理服务”图标打开对话框,选中“启用远程连接”选项,单击应用,然后单击“启动”。启用远程连接,就是允许其他计算机对 IIS 执行管理工作。
默认情况下,管理服务并不随服务器的启动自动启动。如果你希望它自动启动,则需要在“服务”工具里修改 Web Management Service 的设置:
2. 网站
为了演示,我们使用 “ASP.NET 空 Web 应用程序”模板创建一个 VS 项目,新增一个 Default.aspx 表单,内容与上一篇文章(文件复制部署网站)中介绍一样,显示正确的 .NET 版本号。
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = System.Environment.Version.Major.ToString();
}
3. 转换 web.config
从开发测试到生产,很多项目都要经历一系列的部署过程,其中每一步都会牵涉不同配置的服务器。Web 部署模型有一个有用的功能,它能够在部署过程中对 Web.config 文件进行转换,使其对每一步都可用。
在解决方案资源管理器里展开 web.config,可以看到对象项目的每一个编译配置都有一系列的项,它们是 web.config 转换文件。默认情况下,VS2010 创建 Debug 和 Release 配置,但也可以使用配置管理器来添加自定义配置。也可使用配置管理器添加自定义配置。
在 Web 部署中,活动编译配置转换文件里的 XML 语句被应用到项目的源 web.config 来添加、修改和删除配置设置。项目部署时,转换后的设置被包含在里面,也就是说不需要为各个阶段的数据库连接手工修改连接字符串。它不仅仅是方便,还减少 在部署时由于配置错误导致环境中断的问题。
随后我会演示配置文件可以应用的最有用的转换。每一个示例都会使用相同的源 web.config 文件,它的内容如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="NorthwindConnectionString" connectionString="Data Source=.\SqlExpress;
AttachDbFileName=|DataDirectory|\Northwind.mdf;Integrated Security=True;
User Instance=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
</configuration>
它包含一个指向我们开发工作站 Northwind 数据库的连接字符串,目标框架是 .NET 4,带有调试符号。
1. 设置属性
最常见的转换是修改源 web.config 里设置的属性值。例如,修改数据库的连接字符串。这个 web.release.config 转换文件修改连接字符串,以使它指向我们的 Windows Server 2008 R2 机器:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="NorthwindConnectionString"
connectionString="Data Source=PC-SKYSOOT;Initial Catalog=Northwind;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
如果要设置已经存在的属性,使用和源文件相同的定义并增加 Transform 和 Locator 元素。把 Transform 设置为 SetAttributes 将把匹配的元素替换为转换后的数据,在这里是修改后的连接字符串。Locator 元素指定通过 name 属性来匹配元素,这里是 NorthwindConnectionString。当同一类型具有多个属性时,能精确指定要匹配哪个元素。
使用 Release 配置部署项目时,转换就会被应用,安装到 IIS 的 web.config 将会包含新的连接字符串,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="NorthwindConnectionString"
connectionString="Data Source=PC-SKYSOOT;Initial Catalog=Northwind;Integrated Security=True"
providerName="System.Data.SqlClient"/>
</connectionStrings>
简单来说,转换引擎把开发连接字符串(它使用 SQL Server Express 的附加文件)替换为了部署连接字符串(它连接到另一台服务器)。转换直到部署时才会发生,因此,即使切换编译配置并重新构建项目,开发工作站还继续使用项 目的 web.config 的值。[既然已经使用 Web 部署,那么肯定你是无权限或不该具备直接修改服务器文件的权限,那么只有在部署网站时对将要在服务器上生成的 web.config 文件预先做好处理,这就是转换引擎存在的价值]
2. 插入元素
把 Transform 的值设为 Insert 为配置文件插入新元素,我们新加了一个转换,它添加第二个连接字符串,以黑体标注:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="NorthwindConnectionString"
connectionString="Data Source=PC-SKYSOOT;Initial Catalog=Northwind;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
<connectionStrings>
<add name="Connection2" connectionString="Data Source=MyServer;Initial Catalog=MyDB;
Integrated Security=True" xdt:Transform="Insert"/>
</connectionStrings>
我们保留了第一个示例以演示指定多个转换的格式。部署项目将会得到如下转换后的 web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="NorthwindConnectionString"
connectionString="Data Source=PC-SKYSOOT;Initial Catalog=Northwind;Integrated Security=True"
providerName="System.Data.SqlClient"/>
<add name="Connection2" connectionString="Data Source=MyServer;Initial Catalog=MyDB;
Integrated Security=True" xdt:Transform="Insert"/>
</connectionStrings>
3. 替换配置节
设置 Transform 值为 Replace,替换 web.config 的整个配置节,如下:
<system.web xdt:Transform="Replace">
<customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
</system.web>
这个转换指定 web.config 的 system.web 块整体由转换文件的内容替换。开发连接字符串仍旧被保留,但目标 Framework 版本被替换了。
4. 移除元素
声明一个配置节,把它的 Transform 值设为 Remove 来移除配置节,如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings xdt:Transform="Remove"></connectionStrings>
</configuration>
这个转换将移除所有连接字符串配置节.
可以通过 RemoveAttributes 用逗号分隔的列表来移除指定的属性:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug,targetFramework)"/>
</system.web>
</configuration>
发布数据库
Web 部署另一个有用的功能是在发布项目时同时发布数据库。在部署过程中会生成一个 SQL 脚本,包含数据库架构 或 架构和数据。这个脚本被用来填充部署环境,使用这个功能要万分小心,它可能会用测试数据覆盖产品数据库。
配置数据库发布分两步进行。在项目的“包/发布 Web” 页签里选择“在包里包括全部数据库配置”来启用这个功能。
此功能具有一定的风险,且一般不用,这里不多介绍。
部署网站
在 VS 中,将解决方案配置模式改为 Release,“生成”菜单中选择“发布…”,菜单项的准确名称取决于项目名称。你会看到发布对话框,它是 Web 部署功能的核心。
在服务 URL 里输入要发布到的服务器名称。我这里是 PC-SKYSOOT。“网站/应用程序”输入框用于指定网站部署的地址,并且如我们之前解释过的,它构成客户端使用的 URL。对于这个示例,我们希望使用如下格式的 URL:
/WebsiteDeployment/WebDeploy/">http://<servername>/WebsiteDeployment/WebDeploy/
为了得到这个效果,我们在输入框内输入了 Default Web Site/WebsiteDeployment/WebDeploy。选中标记为 IIS 上的应用程序,这和文件复制发布方式最后的转换为 Web 应用程序是一致的。
在“凭据”里,由于我是本机做IIS服务器并且以管理员身份登录,所以这里是灰色不可选的状态。如果没有从证书授权中心给 IIS 7 安装证书,则启用“允许不受信任的证书”。
现在单击发布,如果舒心 IIS管理器,就可以看见网站已经被正确部署了,所有的 web.config 转换都已经被应用。
原文:http://www.cnblogs.com/SkySoot/archive/2013/04/01/2993665.html