您的位置:首页 > 其它

承载和使用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

using System.ServiceModel;
using QuickReturns.StockTrading.ExchangeService.DataContracts;namespace QuickReturns.StockTrading.TradeTrackingService.Contracts
{
[ServiceContract()]
interface ITradeTrackingService
{
[OperationContract()]
void PublishQuote(Quote quote);
}
}
在 Windows 服务中进行承载

在 Windows 服务中承载 WCF 服务是一种合理的选择。不应将 Windows 服务与 WCF 服务混为一谈。它们都使用“服务”一词,但却具有不同的含义。Windows 服务是由操作系统管理的进程。Windows 提供了服务控制管理器,用于控制操作系统上安装的服务。Windows 通过服务来支持诸如网络、USB、远程访问、消息队列等操作系统功能。您可以使用 Visual Studio
2005,利用 Windows 服务项目模板(如图 5-2 所示)创建 Windows 服务。


图 5-2:Visual Studio 2005 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 服务

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();
}
}
}
由此可见,编写用于承载 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,它包含的安装程序是服务的安装程序和该服务相关进程的安装程序。


图 5-3:Windows 服务项目的“添加安装程序”功能
访问 ProjectInstaller 的设计器视图,并单击 ServiceInstaller1。 

在“属性”窗口中,将“ServiceName”属性设置为“QuickReturns Exchange 服务”。 
将“StartType”属性设置为“自动”,如图 5-4 所示。



图 5-4:QuickReturns Exchange 服务的属性窗口 
访问 ProjectInstaller 的设计器视图,并单击“serviceProcessInstaller1”。

在“属性”窗口中,将“帐户”属性设置为“网络服务”,如图 5-5 所示。



图 5-5:QuickReturns Exchange 服务的属性窗口
为了能够创建可用于安装 Windows 服务的安装程序,必须向解决方案添加 Visual Studio 安装程序和部署项目。以下步骤描述了如何向解决方案添加安装程序和部署项目:

1、选择“文件” | “添加” | “新建项目”。 

2、在“新建项目”对话框中,选择“其他项目类型”类别,选择“安装和部署”,然后选择“安装项目”,如图 5-6 所示。


图 5-6:Visual Studio 2005 安装项目模板
3、在解决方案资源管理器中,右键单击安装项目,指向“添加”,然后选择“项目输出”,如图 5-7 所示。此时将显示“添加项目输出组”对话框。



图 5-7:添加 Windows 服务项目输出
4、选择 Windows 服务项目。 

5、从列表框中,选择“主输出”,然后单击“确定”。  

此操作将向安装项目添加 Windows 服务的主输出的项目项。现在,添加用于安装可执行文件的自定义操作。若要向安装项目添加自定义操作,请执行以下步骤:

1、在解决方案资源管理器中,右键单击安装项目,指向“视图”,然后选择“自定义操作”,如图 5-8 所示。此时将显示“自定义操作”视图。


图 5-8:打开“自定义操作”视图
2、右键单击“自定义操作”,选择“添加自定义操作”。 

3、双击列表框中的应用程序文件夹将它打开,从 Windows 服务项目中选择“主输出”,然后单击“确定”。主输出将添加到自定义操作的所有四个节点中:安装、提交、回滚和卸载。 

4、生成安装项目。

编译项目时,输出的是 Microsoft 安装程序文件 (.msi) ,通过该文件可以将服务安装到 Windows 服务控制管理器中。

注意 本章介绍生成 Windows 服务和 Windows 服务安装程序的基础知识。如果将 Windows 服务设置为在不受限制的 Localsystem 帐户下运行或基本合适的网络服务帐户下运行,就安全最佳方法而言,这并非最佳选择。通常,操作员能够在安装期间选择凭据,或在安装之后通过服务控制管理器管理控制台管理单元(可以通过 Windows 计算机管理进行访问)来调整安全标识设置。有关开发 Windows 服务的详细信息和最佳方法,请参阅本书第 7 章、MSDN 帮助或 .NET 开发专著。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息