WCF注册Windows Service

问题:

    在前面创建的WCF的HelloWorld程序,我们把WCF的服务寄宿到了Host这个控制台项目中了。现在你想将WCF的服务寄宿到Windows服务中。

解决过程:

  1.  删除原来Host控制台项目,然后在solution上右键,新建一个WindowService项目。如下图:

  2. 对MyFirstWindowsService项目添加对Contracts项目、Service项目和System.ServiceModel的引用。
  3. 将MyFristWindowsService项目中的Class1.cs文件重命名为HelloHost.cs,然后打开这个文件,里面代码如下:
  4. 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
    复制代码
  5. HelloHost.cs[Design]的界面上右键,选择添加安装器(Add Installer)。这时,项目里会自动生成一个ProjectInstaller.cs文件。
  6. 打开ProjectInstaller.cs[Design]的设计界面,将会出现下图:

  7. 选中serviceInstaller1,打开它的属性视图(Ctrl W,P),修改属性。如下图所示:

  8. 接着选中serviceProcessInstaller1,打开它的属性视图,修改属性。如下图:(这里服务账号也可以是其他的。)

  9. 接下来我们看看这个项目里的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);
                
            }
        }
    }
    复制代码
  10. 这些都做好了之后,在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>
    复制代码

     

  11. 现在我们的solution的目录是这个样子的:F6,Build。确保build success。

  12. 打开MyFirstWindowsService项目的bin/debug文件。在项目上右键,open folder in Windows explorer。debug文件夹中有如下文件:

  13. 将整个debug文件夹中文件拷出来,放到另外一个目录下。我这儿是放在C:\FirstService中。后面我们注册的windows服务将从这个目录下找exe文件。
  14. 下面就是要注册了。我们用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

  15. 成功后,你就可以在控制面板-》管理工具-》服务中找到它了。
posted @ 2012-09-03 22:05  小锋神  阅读(416)  评论(0编辑  收藏  举报