Interprocess communication for Windows in C# (.NET 2.0)

IPC in .Net can be achieved using:

WCF

using named pipes requires .Net 3.0 and above.

Code example

  • The WCF class NetNamedPipeBinding can be used for interprocess communication on the same machine. The MSDN documentaion for this class includes a code sample covering this scenario http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx

Remoting

The original IPC framework released with .Net 1.0. I believe remoting is no longer being actively developed, and you are encouraged to use WCF instead

Code example

Inter-process communication via Remoting – uses a tcp channel

Resources

  • GenuineChannels, sell a remoting toolkit that includes a Shared Memory Channel. http://www.genuinechannels.com/Index.aspx
  • Ingo Rammer, wrote the definitive .Net remoting book, Advanced .NET Remoting, Second Edition

Win32 RPC using csharptest-net RpcLibrary

I came across a project recently that has wrapped the Win32 RPC library and created a .net class library that can be used for local and remote RPC

Project home page: http://csharptest.net/projects/rpclibrary/

MSDN references:

  • How rpc works: http://technet.microsoft.com/en-us/library/cc738291(v=ws.10).aspx
  • RPC functions: http://msdn.microsoft.com/en-us/library/aa378623(v=VS.85).aspx

Also has a google protocol buffers rpc client that runs on top of the library: https://code.google.com/p/protobuf-csharp-rpc/


WM_COPYDATA

For completeness it’s also possible to use the WIN32 method with the WM_COPYDATA message. I’ve used this method before in .Net 1.1 to create a single instance application opening multiple files from windows explorer.

Resources

  • MSDN – WM_COPYDATA
  • Code example
  • PInvoke.net declaration

Sockets

Using a custom protocol (harder)

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)