WCF注册Windows Service
问题:
在前面创建的WCF的HelloWorld程序,我们把WCF的服务寄宿到了Host这个控制台项目中了。现在你想将WCF的服务寄宿到Windows服务中。
解决过程:
- 删除原来Host控制台项目,然后在solution上右键,新建一个WindowService项目。如下图:
- 对MyFirstWindowsService项目添加对Contracts项目、Service项目和System.ServiceModel的引用。
- 将MyFristWindowsService项目中的Class1.cs文件重命名为HelloHost.cs,然后打开这个文件,里面代码如下:
-
HelloHost.cs
namespace MyFirstWindowsService { partial class HelloHost : ServiceBase { private ServiceHost _host; public ServiceHost Host { get { return _host; } set { _host = value; } } public HelloHost() { InitializeComponent(); } protected override void OnStart(string[] args) { // TODO: Add code here to start your service. Host = new ServiceHost(typeof(HelloWorld)); Host.Open(); } protected override void OnStop() { // TODO: Add code here to perform any tear-down necessary to stop your service. if (Host != null) { Host.Close(); Host = null; } } } } g
- HelloHost.cs[Design]的界面上右键,选择添加安装器(Add Installer)。这时,项目里会自动生成一个ProjectInstaller.cs文件。
- 打开ProjectInstaller.cs[Design]的设计界面,将会出现下图:
- 选中serviceInstaller1,打开它的属性视图(Ctrl W,P),修改属性。如下图所示:
- 接着选中serviceProcessInstaller1,打开它的属性视图,修改属性。如下图:(这里服务账号也可以是其他的。)
- 接下来我们看看这个项目里的program.cs文件。代码如下:
Program.cs
namespace MyFirstWindowsService { static class Program { /// <summary> /// The main entry point for the application. /// </summary> static void Main() { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new HelloHost(), }; ServiceBase.Run(ServicesToRun); } } }
- 这些都做好了之后,在MyFirstWindowsService项目中添加服务端的配置文件。这个在上一节中也写过,代码如下:
App.config
<?xml version="1.0"?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="HelloWorldBehavior"> <serviceMetadata httpGetEnabled="true" /> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="HelloWorldBehavior" name="Services.HelloWorld"> <endpoint address="Hello" binding="basicHttpBinding" name="Hello" contract="Contracts.IHello" listenUriMode="Explicit" /> <endpoint address="mexHello" binding="mexHttpBinding" bindingConfiguration="" name="mexHello" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="http://localhost:8080/Service" /> </baseAddresses> </host> </service> </services> </system.serviceModel> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> </configuration>
- 现在我们的solution的目录是这个样子的:F6,Build。确保build success。
- 打开MyFirstWindowsService项目的bin/debug文件。在项目上右键,open folder in Windows explorer。debug文件夹中有如下文件:
- 将整个debug文件夹中文件拷出来,放到另外一个目录下。我这儿是放在C:\FirstService中。后面我们注册的windows服务将从这个目录下找exe文件。
- 下面就是要注册了。我们用InstallUtil.exe来注册(当然你也可以用sc)。打开InstallUtil.exe在我的电脑的目录是:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319。你可以从命令行进如这个目录,然后执行InstallUtil命令。也可以在所有程序中找到visual studio Tools,里面的visual studio command prompt命令行工具。执行安装的命令是InstallUtil C:\FirstService\MyFirstWindowsService.exe
- 成功后,你就可以在控制面板-》管理工具-》服务中找到它了。