Net下看通过NetRemoting方便的实现进程间通讯,下面就具体总结一下: 1、先定义通讯的接口,并封装成库: 注意,如果通讯时涉及到自定义的类型,一定要添加[Serializable]属性,使类可串行化。 [Serializable] public class IPCInfo { 。。。 } public interface IPCDll { void SetInfo(PCInfo); PCInfo GetInfo(); } 2、服务端 用于服务端一般在后台运行,所以非常适合使用Windows服务来实现。 1)、实现接口 public class IPCSrvInfo : MarshalByRefObject, IPCDll // MarshalByRefObject是必须的,且要为第一个 { public void SetInfo(PCInfo) { . .. } PCInfo GetInfo(); { ... } } 2)、创建IPC服务端 System.Collections.IDictionary dicProp = new System.Collections.Hashtable(); dicProp["priority"] = "20"; dicProp["portName"] = "MyIPC"; dicProp["authorizedGroup"] = "Everyone"; //如果以服务方式运行,这句是必须的,否则客户端没有连接权限。 IpcServerChannel srvChannel = new IpcServerChannel(dicProp, null); ChannelServices.RegisterChannel(srvChannel, false); RemotingConfiguration.RegisterWellKnownServiceType( typeof(IPCSrvInfo ), “SrvInfo”, WellKnownObjectMode.Singleton ); 服务的安装、启动具体看下一遍‘C#编写Windows服务并安装与启动’; 3)、客户端 服务端启动后,客户端就可以连接了 IpcClientChannel clientChan = new IpcClientChannel(); ChannelServices.RegisterChannel(clientChan, false); string logUrl = LogIpc.GetFullUrl(LogIpc.AddLogUriName); IPCDll logFun = (IPCDll)RemotingServices.Connect( typeof(IPCDll), “Ipc://MyIPC/SrvInfo" ); 获取后,就可以通过LogFun来调用接口中的方法了。 |
|
来自: ThinkTank_引擎 > 《Remoting》