作者:Walter Oliver
介绍
托管服务示例是以 C# 实现的一组服务,可帮助 Web 托管组织中的开发人员开发和/或集成托管预配和管理系统。
其用途是通过示例代码和文档来展示如何利用 Windows Server® 2008 平台来实现此类功能。 这些服务是早期 IIS 7.0 技术采用者计划 (TAP) 的一部分开发的,Microsoft 与 20 多个主机商合作,并帮助他们在 Windows Server 2008 和 SQL 2005 上创建产品或服务。 托管服务商利用了这些示例服务,因为这帮助托管服务商降低了学习难度。
组件
示例中有三个主要组件。 每个都有相应的 Visual Studio 2008 项目:
基于 Windows 服务的主机。 包括用于管理预配和管理 Web 和 FTP 站点、内容存储、Active Directory 和 SQL Server 资源的协定。 服务托管在 Windows 服务中。 这对于管理未安装 IIS 7.0 或不需要在 Web 上运行托管服务的配置非常有用。
基于 Web 服务的主机。 包括的功能与基于 Windows 服务版本的主机相同。 唯一的区别是服务托管在 Windows Web 服务中,而不是托管在基于 Windows 服务的应用程序。
示例客户端。 是一个简单的 Web 应用程序,可调用每个服务的协定。 其用途是说明服务的用法。
注意
这是一个示例应用程序,不得在生产环境中使用。 仅用于学习目的。
开始使用服务
托管服务代码示例已在两种不同情况下部署。 一种情况是通过 IIS 7.0,另一种情况是通过 Windows 服务。
IIS 7.0
在 Windows Server® 2008 和 IIS 7.0 下,Windows Communication Foundation (WCF) 服务部署为托管网站。 这样便可以利用以下功能:
进程回收
空闲关闭
进程状况监视
基于消息的激活
由于托管扩展需要高权限来执行诸如在文件系统上创建目录、创建数据库、添加新用户等操作,因此此站点的应用程序池需要具有管理员权限的标识。 安装包 (HostServiceInstaller.msi) 已自动执行此部署。
Windows 服务
在第二种情况下,会将服务部署为作为 Windows 服务运行。 这种部署允许在未运行 IIS 的服务器上托管服务。 这种部署还要求编写其他代码,以便让 WCF 服务继承自 ServiceBase 类并实现 OnStart(创建和打开 ServiceHost 实例)和 OnStop 实例(关闭 ServiceHost 实例)。 安装包 (HostingWindowsService.msi) 已自动执行此部署。
验证安装
使用以下步骤验证安装。
浏览到以下 url:http://< hostheader>/webmanagementservice.svc。 如果安装成功,将显示以下页面,指示服务现已托管。
注意
必须配置具有管理员权限的帐户,以便为 IIS 托管网站运行 Windows 服务或应用程序池,因为服务需要管理员级权限来管理 IIS 配置和其他功能。
使用 SolutionSetup.msi 安装包下载并安装解决方案。 在 Visual Studio 中打开解决方案 (IIS7GoLive.sln),并在解决方案资源管理器中找到以下结构。
宿主环境
典型的托管环境是异类环境(如下图所示)。 大多数主机使用 Web 服务来管理不同的服务器集,以及每个服务器扮演的不同角色。
图 1:异类托管环境
不同服务器
托管环境具有多个版本的 Windows 和 Linux 服务器,每个服务器都提供特定的服务或角色。 托管服务商将这些服务整合在一起,为客户提供一致的产品。 通常可以看到从 IIS 7.0 服务器提供服务的网站,而电子邮件帐户可能从 Linux 服务器提供(反之亦然)。 可以从 Linux 服务器管理预配操作,但网站需要在 Windows 上预配。 无论提供何种服务,服务托管商对于这些服务器管理要求和约束都是相同的。
服务托管商也往往具有非常密集的防火墙基础结构。 Microsoft 堆栈上提供的一些 API 利用 DCOM 或 .NET 远程处理,这要求服务提供商在防火墙中打开其他端口,但这种解决方案并不理想。
为了解决异类环境和防火墙/安全问题创建的约束,大多数服务托管商现在已使用 Web 服务来预配和管理其服务器和不同的服务器角色。
Windows 平台本身不能交付 Web 服务,因此,每个服务托管商都需要自行实现服务。 为了解决这种缺陷以及满足服务托管商的需求,Microsoft 创建了一组服务。 这组服务便是面向服务托管商的管理服务,并被视为托管 API 的“托管扩展”。
面向服务托管商的管理服务
该示例由一组低级别服务组成,这些服务为托管空间中使用的一些最常见服务器角色提供功能。 服务子系统包括:
Web
FTP
内容存储
SQL Server 2005(和 2008)
Active Directory
除此之外,还可以扩展示例以支持 DNS、WSS 和电子邮件(Exchange 或 SMTP/PoP3)。
接口和操作
针对每个子系统的所有操作都分为三个接口:
预配
管理
查询
这些操作的任务也是操作工具以及最终用户使用的控制面板类型应用程序必须执行的任务。
预配操作主要涉及创建站点、用户、数据库等。 这些操作是服务托管商最初可能会执行的操作,目的是为最终用户创建环境。 每个创建操作都有相应的删除操作。
创建对象后,管理操作将提供维护对象的功能:例如,可以停止或重启网站;默认文档和其他绑定可以应用于网站;可以添加或更改站点身份验证。 这些操作的用户可以是管理自己站点的最终用户,也可以是应用某些属性的服务托管商支持部门。
查询操作可查看特定于每个子系统的信息。 服务托管商支持部门可能会调用这些操作中的服务来监视服务器活动或收集有关站点当前状态的信息。
示例服务体系结构
此示例作为 Windows 通信框架 (WCF) 服务实现,然后使用 WSHttpBinding 以 Web 服务的形式向客户公开。 下面是体系结构关系图:
图 1:托管服务示例体系结构
在关系图中,请注意框架的一致性。 所有子系统都使用相同的协定和操作模式进行开发。 未来的子系统可以遵循此框架。
托管子系统
示例中提供了以下子系统:
Web 服务 - 此子系统适用于 IIS 7.0 网站预配、管理和查询。 除了基本网站创建之外,还增加了与管理和查询网站、应用程序池、默认文档、绑定、身份验证等相关的功能。 此子系统的目标是为 IIS 管理器中存在的所有功能创建 Web 服务。 此子系统的数据协定是基于 c:\windows\system32\inetsrv\config 中的 IIS 7.0 xml 架构。 服务是使用 Microsoft.Web.Administration API 编写的。
FTP 服务 - 此子系统是为仅在 Windows Server 2008 和 IIS 7.0 上运行的新 FTP7 Server® 构建的。 FTP7 服务器加载项以免费下载的形式提供。 新的 FTP 包含共享托管方案的功能改进。 例如,可以将 FTP 绑定添加到网站,以便可以在这两个网站上托管相同的内容。 与 Web 的子系统一样,此子系统的数据协定也基于配置文件架构。
内容存储服务 - 此子系统用于预配、管理和查询最终用户可能需要的存储。 此子系统与站点创建结合使用,可管理用户为站点设定的存储器。 可以设置配额,并可在目录和文件级别应用权限和安全性。
Active Directory 服务 - 此子系统用于预配、管理和查询 Active Directory 成员资格存储。 此子系统的适用场合如下:客户想要创建组织单位,而该组织单位,在组织单位中创建群组,并将用户添加到群组中。
SQL 服务 - 此子系统适用于 SQL Server 数据库预配、管理和查询。 此子系统的适用场合如下:客户开发了需要数据库的应用程序。 客户需要创建数据库、运行脚本来创建存储过程、创建表以及使用数据填充表。