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. 成功后,你就可以在控制面板-》管理工具-》服務中找到它了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM