天天看點

WCF的WindowsService開發參考【附源碼】

首先看圖:

1:源碼結構圖 

2:配置檔案參考

<?xml version="1.0"?>

<configuration>

  <system.serviceModel>

    <services>

      <service name="DotNet.Service.ExceptionService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/ExceptionService/" binding="basicHttpBinding" contract="DotNet.IService.IExceptionService">

        </endpoint>

      </service>

      <service name="DotNet.Service.FileService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/FileService/" binding="basicHttpBinding" contract="DotNet.IService.IFileService">

      <service name="DotNet.Service.FolderService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/FolderService/" binding="basicHttpBinding" contract="DotNet.IService.IFolderService">

      <service name="DotNet.Service.ItemDetailsService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/ItemDetailsService/" binding="basicHttpBinding" contract="DotNet.IService.IItemDetailsService">

      <service name="DotNet.Service.ItemsService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/ItemsService/" binding="basicHttpBinding" contract="DotNet.IService.IItemsService">

      <service name="DotNet.Service.LogOnService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/LogOnService/" binding="basicHttpBinding" contract="DotNet.IService.ILogOnService">

      <service name="DotNet.Service.LogService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/LogService/" binding="basicHttpBinding" contract="DotNet.IService.ILogService">

      <service name="DotNet.Service.MessageService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/MessageService/" binding="basicHttpBinding" contract="DotNet.IService.IMessageService">

      <service name="DotNet.Service.ModuleService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/ModuleService/" binding="basicHttpBinding" contract="DotNet.IService.IModuleService">

      <service name="DotNet.Service.OrganizeService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/OrganizeService/" binding="basicHttpBinding" contract="DotNet.IService.IOrganizeService">

      <service name="DotNet.Service.ParameterService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/ParameterService/" binding="basicHttpBinding" contract="DotNet.IService.IParameterService">

      <service name="DotNet.Service.PermissionItemService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/PermissionItemService/" binding="basicHttpBinding" contract="DotNet.IService.IPermissionItemService">

      <service name="DotNet.Service.PermissionService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/PermissionService/" binding="basicHttpBinding" contract="DotNet.IService.IPermissionService">

      <service name="DotNet.Service.RoleService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/RoleService/" binding="basicHttpBinding" contract="DotNet.IService.IRoleService">

      <service name="DotNet.Service.SequenceService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/SequenceService/" binding="basicHttpBinding" contract="DotNet.IService.ISequenceService">

      <service name="DotNet.Service.StaffService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/StaffService/" binding="basicHttpBinding" contract="DotNet.IService.IStaffService">

      <service name="DotNet.Service.UserService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/UserService/" binding="basicHttpBinding" contract="DotNet.IService.IUserService">

      <service name="DotNet.Service.UserCenterDbHelperService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/UserCenterDbHelperService/" binding="basicHttpBinding" contract="DotNet.IService.IDbHelperService">

      <service name="DotNet.Service.BusinessDbHelperService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/BusinessDbHelperService/" binding="basicHttpBinding" contract="DotNet.IService.IDbHelperService">

      <service name="DotNet.Service.WorkFlowActivityAdminService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/WorkFlowActivityAdminService/" binding="basicHttpBinding" contract="DotNet.IService.IWorkFlowActivityAdminService">

      <service name="DotNet.Service.WorkFlowCurrentService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/WorkFlowCurrentService/" binding="basicHttpBinding" contract="DotNet.IService.IWorkFlowCurrentService">

      <service name="DotNet.Service.WorkFlowProcessAdminService" behaviorConfiguration="Internet">

        <endpoint address="http://localhost:8888/DotNet.Service/WorkFlowProcessAdminService/" binding="basicHttpBinding" contract="DotNet.IService.IWorkFlowProcessAdminService">

    </services>

    <behaviors>

      <serviceBehaviors>

        <behavior name="Internet">

          <serviceMetadata httpGetEnabled="true" />

          <serviceDebug httpHelpPageEnabled="True" includeExceptionDetailInFaults="True" />

        </behavior>

      </serviceBehaviors>

    </behaviors>

  </system.serviceModel>

</configuration>

3:核心代碼部分

//--------------------------------------------------------------------

// All Rights Reserved , Copyright (C) 2011 , Hairihan TECH, Ltd. 

using System;

using System.Configuration;

using System.Reflection;

using System.ServiceModel;

using System.ServiceModel.Configuration;

using System.ServiceProcess;

using System.Diagnostics;

using System.Windows.Forms;

namespace DotNet.WindowsService

{

    using DotNet.Utilities;

    /// <summary>

    /// CommonService

    /// 

    /// 修改紀錄

    ///

    ///        2008.03.06 版本:1.0 JiRiGaLa 建立Windows服務。

    ///        

    /// 版本:1.0

    /// <author>

    ///        <name>JiRiGaLa</name>

    ///        <date>2007.08.15</date>

    /// </author> 

    /// </summary>

    public partial class CommonService : ServiceBase

    {

        public CommonService()

        {

            InitializeComponent();

        }

        /// <summary>

        /// 服務數組

        /// </summary>

        ServiceHost[] serviceHosts = null;

        protected override void OnStart(string[] args)

            // 是否檢查線上狀态

            BaseSystemInfo.CheckOnLine = false;

            BaseSystemInfo.AllowNullPassword = true;

            // 是否記錄日志

            BaseSystemInfo.RecordLog = true;

            // 是否需要注冊

            BaseSystemInfo.NeedRegister = false;

            // 讀取配置檔案

            ConfigHelper.GetConfig(Application.StartupPath + "\\" + ConfigHelper.FileName);

            Configuration configuration = ConfigurationManager.OpenExeConfiguration(Assembly.GetEntryAssembly().Location);

            ServiceModelSectionGroup serviceModelSectionGroup = (ServiceModelSectionGroup)configuration.GetSectionGroup("system.serviceModel");

            // 開啟每個服務

            int i = 0;

            serviceHosts = new ServiceHost[serviceModelSectionGroup.Services.Services.Count];

            foreach (ServiceElement serviceElement in serviceModelSectionGroup.Services.Services)

            {

                string assemblyString = serviceElement.Name.Substring(0, serviceElement.Name.LastIndexOf('.'));

                var serviceHost = new ServiceHost(Assembly.Load(assemblyString).GetType(serviceElement.Name), serviceElement.Endpoints[0].Address);

                serviceHost.Opened += delegate { Console.WriteLine("第{0}服務:{1}", i+1, serviceHost.BaseAddresses[0]); };

                serviceHost.Open();

                serviceHosts[i] = serviceHost;

                i++;

            }

            base.OnStart(args);

        protected override void OnStop()

            Trace.WriteLine("Shutting down ServiceHost...");

            if (serviceHosts != null)

                for (int i = serviceHosts.Length-1; i >= 0; i--)

                {

                    serviceHosts[i].Close();

                    serviceHosts[i] = null;

                }

            base.OnStop();

    }

}

4:安裝服務、解除安裝服務的指令

installutil /i "D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WindowsService\bin\Debug\DotNet.WindowsService.exe"

installutil /u "D:\DotNet.Common\DotNet.CommonV3.6\DotNet.WindowsService\bin\Debug\DotNet.WindowsService.exe"

5:安裝服務

6:運作情況 

7:運作用戶端,搞定!

8:全部功能調試ok,源碼參考下載下傳【WindowsService部分】

本文轉自jirigala_bao 51CTO部落格,原文連結:http://blog.51cto.com/jirigala/811868

繼續閱讀