将一个公用模块做成windows服务

本文章介绍,将一个公用模块做成windows服务。以供各个程序调用。此服务类似WCF。

首先,服务端分为三个部分,1.windows服务: 

protected override void OnStart(string[] args)
        {
            string port = "";
            port = System.Configuration.ConfigurationSettings.AppSettings["ServerPort"];
            int temp = 0;
            if (port.Trim() == "" || !int.TryParse(port, out temp))
                port = "35981";
            IDictionary channelproperties = new Hashtable();
            channelproperties["port"] = port;
            IServerChannelSinkProvider chain = new BinaryServerFormatterSinkProvider();
            TcpChannel channel = new TcpChannel(channelproperties, null, chain);
            LifetimeServices.LeaseTime = TimeSpan.Zero;
            ChannelServices.RegisterChannel(channel, false);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(Finger), "Finger", WellKnownObjectMode.SingleCall);
        }

        protected override void OnStop()
        {
        }

2.暴露给客户端调用的接口项目:

public interface IFinger
    {
        //
        bool CheckUser(byte[] userimg, List<byte[]> usertmp, FingerType ft, int level);
        bool CheckUser2(string userimg, List<byte[]> usertmp, FingerType ft, int level = 3);
    }

3.接口的实现项目

public bool CheckUser(byte[] userimg, List<byte[]> usertmp, FingerType ft, int level = 3)
        {
            bool ret = false;
            // do your something
        }

二、下面是客户端如何调用。 首先将接口项目的dll引用给调用的项目。然后使用下面代码创建连接:

internal class CreateFingerService
    {


        private static string _serverip = "";

        public static string ServerIP
        {
            get
            {
                if (_serverip == "")
                {
                    _serverip = ConfigurationManager.AppSettings["ServerIP"];
                    if (string.IsNullOrWhiteSpace(_serverip))
                        _serverip = "127.0.0.1";
                }
                return _serverip;
            }
            set
            {
                if (value == "")
                {
                    _serverip = ConfigurationManager.AppSettings["ServerIP"];
                }
                else
                    _serverip = value;
            }
        }

        private static void CreateChannel()
        {

            if (ChannelServices.RegisteredChannels.Length == 0)
                ChannelServices.RegisterChannel(new TcpClientChannel(), false);
        }

        private static string GetServerURL(string typename)
        {
            CreateChannel();
            string ip = ServerIP;
            string port = ConfigurationManager.AppSettings["ServerPort"];
            if (port == "")
                port = "35981";
            string url = "";
            url = string.Format("tcp://{0}:{1}/{2}", ip, port, typename);
            return url;
        }
        public static IFinger GetServer()
        {
            IFinger obj = (IFinger)Activator.GetObject(typeof(IFinger), GetServerURL("Finger"));
            return obj;
        }
    }

然后使用的地方如下:

//调用Remoting服务进行指纹比对
IFinger finger = CreateFingerService.GetServer();

checkSuccess = finger.CheckUser(fingerFeature, fingerTemplates, FingerType.ZZ_ZH, 3);

即可正常使用该windows服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值