本文章介绍,将一个公用模块做成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服务