使用IPC實現程序間通訊(服務端使用Windows服務實現)
阿新 • • 發佈:2019-01-27
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)、客戶端
ChannelServices.RegisterChannel(clientChan, false);
string logUrl = LogIpc.GetFullUrl(LogIpc.AddLogUriName);
IPCDll logFun = (IPCDll)RemotingServices.Connect(
typeof(IPCDll),
“Ipc://MyIPC/SrvInfo"
);獲取後,就可以通過LogFun來呼叫介面中的方法了。