WCF寄宿到Windows Service[1]
2014-06-14
WCF寄宿到Windows Service
在前面创建一个简单的WCF程序,我们把WCF的服务寄宿到了Host这个控制台项目中了。下面将介绍如何把WCF的服务寄宿到Windows服务中(源代码):
1. 删除原来Host控制台项目,然后在solution上右键,新建一个WindowService项目。如下图:
2.对WcfServices.HostingWindowsSerice项目添加对Contracts项目、Service项目和System.ServiceModel的引用。
3.将WcfServices.HostingWindowsSerice项目中的Class1.cs文件重命名为CalculatorHost.cs,然后打开这个文件,里面代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System.ServiceProcess; 2 using System.ServiceModel; 3 using WcfServices.Services; 4 5 namespace WcfServices.HostingWindowsService 6 { 7 public partial class CalculatorHost : ServiceBase 8 { 9 private ServiceHost _host; 10 11 public ServiceHost Host 12 { 13 get { return _host; } 14 set { _host = value; } 15 } 16 17 18 public CalculatorHost() 19 { 20 InitializeComponent(); 21 } 22 23 protected override void OnStart(string[] args) 24 { 25 Host = new ServiceHost(typeof(CalculatorService)); 26 Host.Open(); 27 } 28 29 protected override void OnStop() 30 { 31 if (Host != null) 32 { 33 Host.Close(); 34 Host = null; 35 } 36 37 } 38 } 39 }
4.CalculatorHost.cs[Design]的界面上右键,选择添加安装器(Add Installer)。这时,项目里会自动生成一个ProjectInstaller.cs文件。
5.打开ProjectInstaller.cs[Design]的设计界面,将会出现下图:
6.选中serviceInstaller1,打开它的属性视图(Ctrl W,P),修改属性。如下图所示:
7.接着选中serviceProcessInstaller1,打开它的属性视图,修改属性。如下图:(这里服务账号也可以是其他的。)
8.接下来我们看看这个项目里的program.cs文件。代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System.ServiceProcess; 2 3 namespace WcfServices.HostingWindowsService 4 { 5 static class Program 6 { 7 /// <summary> 8 /// 应用程序的主入口点。 9 /// </summary> 10 static void Main() 11 { 12 ServiceBase[] ServicesToRun; 13 ServicesToRun = new ServiceBase[] 14 { 15 new CalculatorHost() 16 }; 17 ServiceBase.Run(ServicesToRun); 18 } 19 } 20 }
9.这些都做好了之后,在WcfServices.HostingWindowsSerice项目中添加服务端的配置文件。这个在上一节中也写过,代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <system.serviceModel> 4 <behaviors> 5 <serviceBehaviors> 6 <behavior name="CaclulaterBehavior"> 7 <serviceMetadata httpGetEnabled="true" /> 8 </behavior> 9 </serviceBehaviors> 10 </behaviors> 11 <services> 12 <service behaviorConfiguration="CaclulaterBehavior" name="WcfServices.Services.CalculatorService"> 13 <endpoint address="http://localhost:8080/calculatorservice" binding="basicHttpBinding" 14 bindingConfiguration="" contract="WcfServices.Contracts.ICalculator" /> 15 <host> 16 <baseAddresses> 17 <add baseAddress="http://localhost:8080/calculatorservice" /> 18 </baseAddresses> 19 </host> 20 </service> 21 </services> 22 </system.serviceModel> 23 </configuration>
10.Build项目WcfServices.HostingWindowsSerice,查看生成的文件如下:
将整个debug文件夹中文件拷出来,放到另外一个目录下。比如D:WCFCalculatorService中。后面我们注册的windows服务将从这个目录下找exe文件。
11.下面就是要注册了。我们用InstallUtil.exe来注册(当然你也可以用sc)。打开InstallUtil.exe在我的电脑的目录是:C:WINDOWSMicrosoft.NETFrameworkv4.0.30319。你可以从命令行进如这个目录,然后执行InstallUtil命令。也可以在所有程序中找到visual studio Tools,里面的visual studio command prompt命令行工具。执行安装的命令是InstallUtil D:WCFCalculatorServiceWcfServices.HostingWindowsSerice.exe
12.成功后,你就可以在控制面板->管理工具->服务中找到它了,如下图:
参考:
[1] WCF注册Windows Service http://www.cnblogs.com/judastree/archive/2012/08/29/2662184.html