分享

使用IPC实现进程间通讯(服务端使用Windows服务实现)

 ThinkTank_引擎 2015-01-11
  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来调用接口中的方法了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多