承载和使用WCF服务(二) 自承载您的服务
2012-04-20 09:19
274 查看
自承载您的服务
承载 WCF 服务最灵活、最便捷的方法就是进行自承载。要能够自承载服务,必须满足两个条件。第一,需要 WCF 运行时;第二,需要可以承载 ServiceHost 的托管 .NET 应用程序。您需要自己动手编写启动和停止宿主的代码。
下面是自承载的优点:
易用性:只需几行代码即可使服务运行。
灵活性:通过 ServiceHost 的 Open() 和 Close() 方法,可以轻松控制服务的生存期。
易调试性:可以使用熟悉的调试方式对自承载环境中承载的 WCF 服务进行调试,而不必连接到单个应用程序来激活服务。
易部署性:通常,部署简单 Windows 应用程序与使用 xcopy 一样容易。您不必在服务器场和类似地方部署复杂的方案,即可部署简单的 Windows 应用程序来充当 WCF ServiceHost。
支持所有绑定和传输:自承载并不限制您仅能使用现有的绑定和传输技术。在 Windows XP 和 Windows Server 2003 上,IIS 限制您只能使用 HTTP。
下面是自承载的缺点:
可用性受到限制:服务只有在应用程序运行时才能被访问。
功能受到限制:自承载的应用程序在对高可用性、易管理性、可靠性、可恢复性、版本控制和部署方案的支持方面受到一定限制。至少,现有的 WCF 无法提供这些支持,因此在自承载的情况中,您必须自己实现这些功能;例如,默认情况下 IIS 提供了这些功能中几项。
换句话说,对于企业级方案来说不应考虑自承载方式。自承载适用于企业项目的开发或演示阶段。此外,当您希望用户桌面应用程序进行相互通信或在点对点情况下,可以对服务进行自承载。本书第 12 章对此进行了描述。
第 3 章 介绍了几个自承载的方案示例,这些示例全都使用简单的控制台应用程序。为了在实际工作环境中更好地说明自承载,本章提供了一个 WinForms 应用程序,该程序所承载的服务用于跟踪 QuickReturns Ltd. 案例研究中证券商发布的报价。
在此方案中,有两个不同的 WinForms 应用程序。一个是证券商管理器应用程序,证券商可以使用该程序发布报价并进行证券交易。另一个程序是单独的 WinForms 应用程序,用于跟踪发布的报价。如列表 5-1 所示,该程序公开一个服务,所公开的服务实现了 ITradeTrackingService 约定,从而实现对报价的跟踪。证券商管理器应用程序会在成功通过 TradeService
发布报价后调用该服务。
列表 5-1:TradeTrackingService 的 ServiceContract
在 Windows 服务中进行承载
在 Windows 服务中承载 WCF 服务是一种合理的选择。不应将 Windows 服务与 WCF 服务混为一谈。它们都使用“服务”一词,但却具有不同的含义。Windows 服务是由操作系统管理的进程。Windows 提供了服务控制管理器,用于控制操作系统上安装的服务。Windows 通过服务来支持诸如网络、USB、远程访问、消息队列等操作系统功能。您可以使用 Visual Studio
2005,利用 Windows 服务项目模板(如图 5-2 所示)创建 Windows 服务。
Windows 服务项目模板会生成一个项目,其中包含两个文件:service1.cs 文件和 program.cs 文件。其中 service1.cs 文件包含服务实现,而 program.cs 文件则用于实例化并实质上承载 Windows 服务。要在 Windows 服务内部承载 WCF 服务,只需执行 Windows 服务的 Start() 方法和 Stop() 方法,如列表 5-2
所示。由于启动 Windows 服务的范例与启动 WCF ServiceHost 内的服务相似,因此最后需要将 WCF 服务的生存期与 Windows 服务的生存期相连。
列表 5-2:承载 WCF ServiceHost 的 Windows 服务
由此可见,编写用于承载 WCF 服务的 Windows 服务非常容易,而且与本章前面的自承载方案相比,它还有几个好处。另一方面,编写承载 WCF 服务的 Windows 服务也有一些您必须了解的缺点。
首先让我们看一下优点:
可以自动启动:Windows 服务控制管理器允许将启动类型设置为自动,从而可以在 Windows 启动立即启动服务,而不必在计算机上进行交互登录。
可以恢复:Windows 服务控制管理器内建了对发生失败后重新启动服务的支持。
安全标识:Windows 服务控制管理器允许您选择运行服务所使用的特定安全标识,包括内置的系统或网络服务帐户。
可管理性:通常情况下,Windows 操作员对那些用于进行 Windows 服务安装和配置的服务控制管理器和其他管理工具都非常熟悉。这将使 Windows 服务在实际工作环境中更容易被采纳;但是,为了保证服务的可维护性,您可能需要添加某些检测和日志记录功能。
支持所有绑定和传输:自承载并不限制您仅能使用现有的绑定和传输技术。在 Windows XP 和 Windows Server 2003 上,IIS 限制您只能使用 HTTP。
接下来是 Windows 服务的一些缺点:
部署: 必须通过 .NET Framework Installutil.exe 实用工具或通过安装包中的自定义操作来安装服务。
功能受到限制:Windows 服务在对高可用性、易管理性、版本控制和部署方案的支持方面同样也受到一定限制。实际上,您必须自己编写自定义代码来满足这些要求,而 IIS 在默认情况下就带有这些功能的其中几项。Windows 服务确实添加了可恢复性和一些安全功能,但有些任务仍然需要您亲手去做。
要能够在服务控制管理器中安装服务,必须在项目中添加安装程序。Visual Studio 2005 允许您方便地完成该操作:
在 Windows 服务项目中打开 Service 类的设计器视图。
单击设计器背景以选择服务本身,而并非其任何内容。
在“属性”窗口中,单击属性列表下灰色区域中的“添加安装程序”链接,如图 5-3 所示。默认情况下,该操作将在项目中添加一个包含两个安装程序的组件类。组件名为 ProjectInstaller,它包含的安装程序是服务的安装程序和该服务相关进程的安装程序。
访问 ProjectInstaller 的设计器视图,并单击 ServiceInstaller1。
在“属性”窗口中,将“ServiceName”属性设置为“QuickReturns Exchange 服务”。
将“StartType”属性设置为“自动”,如图 5-4 所示。
访问 ProjectInstaller 的设计器视图,并单击“serviceProcessInstaller1”。
在“属性”窗口中,将“帐户”属性设置为“网络服务”,如图 5-5 所示。
为了能够创建可用于安装 Windows 服务的安装程序,必须向解决方案添加 Visual Studio 安装程序和部署项目。以下步骤描述了如何向解决方案添加安装程序和部署项目:
1、选择“文件” | “添加” | “新建项目”。
2、在“新建项目”对话框中,选择“其他项目类型”类别,选择“安装和部署”,然后选择“安装项目”,如图 5-6 所示。
3、在解决方案资源管理器中,右键单击安装项目,指向“添加”,然后选择“项目输出”,如图 5-7 所示。此时将显示“添加项目输出组”对话框。
4、选择 Windows 服务项目。
5、从列表框中,选择“主输出”,然后单击“确定”。
此操作将向安装项目添加 Windows 服务的主输出的项目项。现在,添加用于安装可执行文件的自定义操作。若要向安装项目添加自定义操作,请执行以下步骤:
1、在解决方案资源管理器中,右键单击安装项目,指向“视图”,然后选择“自定义操作”,如图 5-8 所示。此时将显示“自定义操作”视图。
2、右键单击“自定义操作”,选择“添加自定义操作”。
3、双击列表框中的应用程序文件夹将它打开,从 Windows 服务项目中选择“主输出”,然后单击“确定”。主输出将添加到自定义操作的所有四个节点中:安装、提交、回滚和卸载。
4、生成安装项目。
编译项目时,输出的是 Microsoft 安装程序文件 (.msi) ,通过该文件可以将服务安装到 Windows 服务控制管理器中。
注意 本章介绍生成 Windows 服务和 Windows 服务安装程序的基础知识。如果将 Windows 服务设置为在不受限制的 Localsystem 帐户下运行或基本合适的网络服务帐户下运行,就安全最佳方法而言,这并非最佳选择。通常,操作员能够在安装期间选择凭据,或在安装之后通过服务控制管理器管理控制台管理单元(可以通过 Windows 计算机管理进行访问)来调整安全标识设置。有关开发 Windows 服务的详细信息和最佳方法,请参阅本书第 7 章、MSDN 帮助或 .NET 开发专著。
承载 WCF 服务最灵活、最便捷的方法就是进行自承载。要能够自承载服务,必须满足两个条件。第一,需要 WCF 运行时;第二,需要可以承载 ServiceHost 的托管 .NET 应用程序。您需要自己动手编写启动和停止宿主的代码。
下面是自承载的优点:
易用性:只需几行代码即可使服务运行。
灵活性:通过 ServiceHost 的 Open() 和 Close() 方法,可以轻松控制服务的生存期。
易调试性:可以使用熟悉的调试方式对自承载环境中承载的 WCF 服务进行调试,而不必连接到单个应用程序来激活服务。
易部署性:通常,部署简单 Windows 应用程序与使用 xcopy 一样容易。您不必在服务器场和类似地方部署复杂的方案,即可部署简单的 Windows 应用程序来充当 WCF ServiceHost。
支持所有绑定和传输:自承载并不限制您仅能使用现有的绑定和传输技术。在 Windows XP 和 Windows Server 2003 上,IIS 限制您只能使用 HTTP。
下面是自承载的缺点:
可用性受到限制:服务只有在应用程序运行时才能被访问。
功能受到限制:自承载的应用程序在对高可用性、易管理性、可靠性、可恢复性、版本控制和部署方案的支持方面受到一定限制。至少,现有的 WCF 无法提供这些支持,因此在自承载的情况中,您必须自己实现这些功能;例如,默认情况下 IIS 提供了这些功能中几项。
换句话说,对于企业级方案来说不应考虑自承载方式。自承载适用于企业项目的开发或演示阶段。此外,当您希望用户桌面应用程序进行相互通信或在点对点情况下,可以对服务进行自承载。本书第 12 章对此进行了描述。
第 3 章 介绍了几个自承载的方案示例,这些示例全都使用简单的控制台应用程序。为了在实际工作环境中更好地说明自承载,本章提供了一个 WinForms 应用程序,该程序所承载的服务用于跟踪 QuickReturns Ltd. 案例研究中证券商发布的报价。
在此方案中,有两个不同的 WinForms 应用程序。一个是证券商管理器应用程序,证券商可以使用该程序发布报价并进行证券交易。另一个程序是单独的 WinForms 应用程序,用于跟踪发布的报价。如列表 5-1 所示,该程序公开一个服务,所公开的服务实现了 ITradeTrackingService 约定,从而实现对报价的跟踪。证券商管理器应用程序会在成功通过 TradeService
发布报价后调用该服务。
列表 5-1:TradeTrackingService 的 ServiceContract
using System.ServiceModel; using QuickReturns.StockTrading.ExchangeService.DataContracts;namespace QuickReturns.StockTrading.TradeTrackingService.Contracts { [ServiceContract()] interface ITradeTrackingService { [OperationContract()] void PublishQuote(Quote quote); } } |
在 Windows 服务中承载 WCF 服务是一种合理的选择。不应将 Windows 服务与 WCF 服务混为一谈。它们都使用“服务”一词,但却具有不同的含义。Windows 服务是由操作系统管理的进程。Windows 提供了服务控制管理器,用于控制操作系统上安装的服务。Windows 通过服务来支持诸如网络、USB、远程访问、消息队列等操作系统功能。您可以使用 Visual Studio
2005,利用 Windows 服务项目模板(如图 5-2 所示)创建 Windows 服务。
图 5-2:Visual Studio 2005 Windows 服务项目模板 |
所示。由于启动 Windows 服务的范例与启动 WCF ServiceHost 内的服务相似,因此最后需要将 WCF 服务的生存期与 Windows 服务的生存期相连。
列表 5-2:承载 WCF ServiceHost 的 Windows 服务
using System; using System.ServiceModel; using System.ServiceProcess; using QuickReturns.StockTrading.ExchangeService;namespace QuickReturns.StockTrading.ExchangeService.Hosts { public partial class ExchangeWindowsService : ServiceBase { ServiceHost host;public ExchangeWindowsService() { InitializeComponent(); }protected override void OnStart(string[] args) { Type serviceType = typeof(TradeService); host = new ServiceHost(serviceType); host.Open(); }protected override void OnStop() { if(host != null) host.Close(); } } } |
首先让我们看一下优点:
可以自动启动:Windows 服务控制管理器允许将启动类型设置为自动,从而可以在 Windows 启动立即启动服务,而不必在计算机上进行交互登录。
可以恢复:Windows 服务控制管理器内建了对发生失败后重新启动服务的支持。
安全标识:Windows 服务控制管理器允许您选择运行服务所使用的特定安全标识,包括内置的系统或网络服务帐户。
可管理性:通常情况下,Windows 操作员对那些用于进行 Windows 服务安装和配置的服务控制管理器和其他管理工具都非常熟悉。这将使 Windows 服务在实际工作环境中更容易被采纳;但是,为了保证服务的可维护性,您可能需要添加某些检测和日志记录功能。
支持所有绑定和传输:自承载并不限制您仅能使用现有的绑定和传输技术。在 Windows XP 和 Windows Server 2003 上,IIS 限制您只能使用 HTTP。
接下来是 Windows 服务的一些缺点:
部署: 必须通过 .NET Framework Installutil.exe 实用工具或通过安装包中的自定义操作来安装服务。
功能受到限制:Windows 服务在对高可用性、易管理性、版本控制和部署方案的支持方面同样也受到一定限制。实际上,您必须自己编写自定义代码来满足这些要求,而 IIS 在默认情况下就带有这些功能的其中几项。Windows 服务确实添加了可恢复性和一些安全功能,但有些任务仍然需要您亲手去做。
要能够在服务控制管理器中安装服务,必须在项目中添加安装程序。Visual Studio 2005 允许您方便地完成该操作:
在 Windows 服务项目中打开 Service 类的设计器视图。
单击设计器背景以选择服务本身,而并非其任何内容。
在“属性”窗口中,单击属性列表下灰色区域中的“添加安装程序”链接,如图 5-3 所示。默认情况下,该操作将在项目中添加一个包含两个安装程序的组件类。组件名为 ProjectInstaller,它包含的安装程序是服务的安装程序和该服务相关进程的安装程序。
图 5-3:Windows 服务项目的“添加安装程序”功能 |
在“属性”窗口中,将“ServiceName”属性设置为“QuickReturns Exchange 服务”。
将“StartType”属性设置为“自动”,如图 5-4 所示。
图 5-4:QuickReturns Exchange 服务的属性窗口 |
在“属性”窗口中,将“帐户”属性设置为“网络服务”,如图 5-5 所示。
图 5-5:QuickReturns Exchange 服务的属性窗口 |
1、选择“文件” | “添加” | “新建项目”。
2、在“新建项目”对话框中,选择“其他项目类型”类别,选择“安装和部署”,然后选择“安装项目”,如图 5-6 所示。
图 5-6:Visual Studio 2005 安装项目模板 |
图 5-7:添加 Windows 服务项目输出 |
5、从列表框中,选择“主输出”,然后单击“确定”。
此操作将向安装项目添加 Windows 服务的主输出的项目项。现在,添加用于安装可执行文件的自定义操作。若要向安装项目添加自定义操作,请执行以下步骤:
1、在解决方案资源管理器中,右键单击安装项目,指向“视图”,然后选择“自定义操作”,如图 5-8 所示。此时将显示“自定义操作”视图。
图 5-8:打开“自定义操作”视图 |
3、双击列表框中的应用程序文件夹将它打开,从 Windows 服务项目中选择“主输出”,然后单击“确定”。主输出将添加到自定义操作的所有四个节点中:安装、提交、回滚和卸载。
4、生成安装项目。
编译项目时,输出的是 Microsoft 安装程序文件 (.msi) ,通过该文件可以将服务安装到 Windows 服务控制管理器中。
注意 本章介绍生成 Windows 服务和 Windows 服务安装程序的基础知识。如果将 Windows 服务设置为在不受限制的 Localsystem 帐户下运行或基本合适的网络服务帐户下运行,就安全最佳方法而言,这并非最佳选择。通常,操作员能够在安装期间选择凭据,或在安装之后通过服务控制管理器管理控制台管理单元(可以通过 Windows 计算机管理进行访问)来调整安全标识设置。有关开发 Windows 服务的详细信息和最佳方法,请参阅本书第 7 章、MSDN 帮助或 .NET 开发专著。
相关文章推荐
- 承载和使用WCF服务
- WCF学习笔记(2)——使用IIS承载WCF服务
- 使用IIS承载WCF服务
- 承载和使用 WCF 服务
- 使用AppFabric 承载WCF和WF服务-实例分析和说明
- 使用IIS承载WCF服务
- 承载和使用WCF服务(四) 终了
- 使用IIS承载WCF服务
- 使用AppFabric 承载WCF和WF服务-安装和使用
- 使用AppFabric 承载WCF和WF服务【注意点和问题的解决方法】
- 使用IIS承载WCF服务
- WCF学习笔记(2)——使用IIS承载WCF服务
- Adhesive框架系列文章--WCF 分布式服务模块使用和实现
- WCF 第九章 诊断 使用服务配置编辑器
- [SDK2.2]Windows Azure Storage (15) 使用WCF服务,将本地图片上传至Azure Storage (上) 服务器端代码
- 使用Winform程序作为WCF服务的宿主
- 如何:使用 ADO.NET 实体框架数据源创建数据服务(WCF 数据服务)
- 热门话题:使用WCF实现SOA面向服务编程(三)—— 使用AJAX+WCF实现页面开发
- IIS 承载的WCF服务失败
- WCF开发实战系列二:使用IIS发布WCF服务