目录
引言
1. 创建一个新的Windows服务项目
2. 添加WCF服务
2.1 添加服务接口和实现
2.2 添加服务配置
3. 实现Windows服务
3.1 修改Service1类
3.2 在项目中添加ServiceInstaller
4. 安装和运行Windows服务
4.1 编译项目
4.2 使用InstallUtil.exe安装服务
4.3 启动服务
5. 测试WCF服务
5.1 添加客户端应用程序
5.2 添加服务引用
5.3 调用服务
6. 卸载Windows服务
引言
我们利用C#可以快速开发各种后端服务,如常见的windows服务、WCF 服务、WebService服务、WebApi等,上一篇文章介绍了简单WCF服务的实现,本文将详细讲解如何基于 C# 和 .NET Framework 4.0 将 WCF服务和宿主项目合并到同一个项目中,并将其安装为Windows服务,确保每个步骤都清晰且易于理解和掌握。
以下是详细的步骤:
1. 创建一个新的Windows服务项目
打开Visual Studio,创建一个新的项目。选择Windows Service
项目类型,命名为 WcfWindowsService
。 2. 添加WCF服务
2.1 添加服务接口和实现
在项目中添加两个类:IService1.cs
和 Service1.cs
。
IService1.cs:
using System.ServiceModel;namespace WcfWindowsService{ [ServiceContract] public interface IService1 { [OperationContract] string GetData(int value); }}
Service1.cs:
namespace WcfWindowsService{ public class Service1 : IService1 { public string GetData(int value) { return $"You entered: {value}"; } }}
2.2 添加服务配置
在项目中添加一个 App.config
文件,并添加以下配置:
<configuration> <system.serviceModel> <services> <service name="WcfWindowsService.Service1"> <endpoint address="" binding="basicHttpBinding" contract="WcfWindowsService.IService1" /> <host> <baseAddresses> <add baseAddress="http://localhost:8733/Design_Time_Addresses/WcfWindowsService/Service1/" /> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="True" /> <serviceDebug includeExceptionDetailInFaults="False" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel></configuration>
3. 实现Windows服务
3.1 修改Service1类
在 Service1.cs
文件中创建一个新的类 WcfService
,继承自 ServiceBase
类:
using System;using System.ServiceModel;using System.ServiceProcess;namespace WcfWindowsService{ public partial class WcfService : ServiceBase { public ServiceHost serviceHost = null; public WcfService() { InitializeComponent(); } protected override void OnStart(string[] args) { if (serviceHost != null) { serviceHost.Close(); } serviceHost = new ServiceHost(typeof(Service1)); serviceHost.Open(); } protected override void OnStop() { if (serviceHost != null) { serviceHost.Close(); serviceHost = null; } } }}
3.2 在项目中添加ServiceInstaller
右键点击项目,选择Add
-> New Item
。选择 Component Class
,命名为 ProjectInstaller.cs
。 在 ProjectInstaller.cs
中实现服务安装:
using System.ComponentModel;using System.Configuration.Install;using System.ServiceProcess;namespace WcfWindowsService{ [RunInstaller(true)] public partial class ProjectInstaller : Installer { private ServiceProcessInstaller processInstaller; private ServiceInstaller serviceInstaller; public ProjectInstaller() { processInstaller = new ServiceProcessInstaller(); serviceInstaller = new ServiceInstaller(); // 设置服务使用的账号类型 processInstaller.Account = ServiceAccount.LocalSystem; // 设置服务信息 serviceInstaller.ServiceName = "WcfWindowsService"; serviceInstaller.DisplayName = "WCF Windows Service"; serviceInstaller.StartType = ServiceStartMode.Manual; Installers.Add(processInstaller); Installers.Add(serviceInstaller); } }}
4. 安装和运行Windows服务
4.1 编译项目
确保项目没有错误,然后编译项目。
4.2 使用InstallUtil.exe安装服务
打开管理员权限的命令提示符,导航到编译输出目录(通常是bin\Debug或bin\Release),并运行以下命令以安装服务:
installutil WcfWindowsService.exe
4.3 启动服务
打开Services
管理器(按下Win+R,输入 services.msc
后回车)。找到名为 WcfWindowsService
的服务。右键点击服务,选择 Start
启动服务。 5. 测试WCF服务
5.1 添加客户端应用程序
创建一个新的Console Application
项目来测试服务,命名为 WcfClient
。 5.2 添加服务引用
在客户端项目中,右键点击项目,选择 Add Service Reference
,输入服务地址(如 http://localhost:8733/Design_Time_Addresses/WcfWindowsService/Service1/
),然后点击 Go
和 OK
。
5.3 调用服务
在客户端的 Program.cs
中调用服务:
using System;namespace WcfClient{ class Program { static void Main(string[] args) { var client = new ServiceReference1.Service1Client(); string result = client.GetData(42); Console.WriteLine(result); client.Close(); } }}
6. 卸载Windows服务
如果不再需要服务,可以卸载:
installutil /u WcfWindowsService.exe
通过这些步骤,您可以将WCF服务和宿主项目合并到同一个项目中,并将其安装为Windows服务。这样可以实现WCF服务的长期运行,并通过Windows服务管理器来管理服务的生命周期。