1. 程式人生 > >使用IPC實現程序間通訊(服務端使用Windows服務實現)

使用IPC實現程序間通訊(服務端使用Windows服務實現)

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來呼叫介面中的方法了。