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来调用接口中的方法了。
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来调用接口中的方法了。