目录
[1. 创建一个新的Windows服务项目](#1. 创建一个新的Windows服务项目)
[2. 添加WCF服务](#2. 添加WCF服务)
[2.1 添加服务接口和实现](#2.1 添加服务接口和实现)
[2.2 添加服务配置](#2.2 添加服务配置)
[3. 实现Windows服务](#3. 实现Windows服务)
[3.1 修改Service1类](#3.1 修改Service1类)
[3.2 在项目中添加ServiceInstaller](#3.2 在项目中添加ServiceInstaller)
[4. 安装和运行Windows服务](#4. 安装和运行Windows服务)
[4.1 编译项目](#4.1 编译项目)
[4.2 使用InstallUtil.exe安装服务](#4.2 使用InstallUtil.exe安装服务)
[4.3 启动服务](#4.3 启动服务)
[5. 测试WCF服务](#5. 测试WCF服务)
[5.1 添加客户端应用程序](#5.1 添加客户端应用程序)
[5.2 添加服务引用](#5.2 添加服务引用)
[5.3 调用服务](#5.3 调用服务)
[6. 卸载Windows服务](#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:
cs
using System.ServiceModel;
namespace WcfWindowsService
{
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
}
}
Service1.cs:
cs
namespace WcfWindowsService
{
public class Service1 : IService1
{
public string GetData(int value)
{
return $"You entered: {value}";
}
}
}
2.2 添加服务配置
在项目中添加一个 App.config
文件,并添加以下配置:
XML
<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
类:
cs
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
中实现服务安装:
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),并运行以下命令以安装服务:
bash
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
中调用服务:
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服务
如果不再需要服务,可以卸载:
bash
installutil /u WcfWindowsService.exe
通过这些步骤,您可以将WCF服务和宿主项目合并到同一个项目中,并将其安装为Windows服务。这样可以实现WCF服务的长期运行,并通过Windows服务管理器来管理服务的生命周期。