.NET Core Inter-process communication framework
CI build | Stable build |
---|---|
A .NET Core 3.1 based lightweight framework for efficient inter-process communication.
Named pipeline and TCP support out-of-the-box, extensible with other protocols.
Create an interface as service contract and package it in an assembly to be referenced by server and client applications, for example:
public interface IInterProcessService
{
string ReverseString(string input);
}
Implement the service in server application, for example:
class InterProcessService : IInterProcessService
{
public string ReverseString(string input)
{
char[] charArray = input.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
}
Install the following NuGet packages in server application:
> Install-Package Microsoft.Extensions.Hosting
> Install-Package JKang.IpcServiceFramework.Hosting.NamedPipe
Register the service implementation and configure IPC endpoint(s):
class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.AddScoped<IInterProcessService, InterProcessService>();
})
.ConfigureIpcHost(builder =>
{
// configure IPC endpoints
builder.AddNamedPipeEndpoint<IInterProcessService>(pipeName: "pipeinternal");
})
.ConfigureLogging(builder =>
{
// optionally configure logging
builder.SetMinimumLevel(LogLevel.Information);
});
}
Install the following NuGet package in client application:
> Install-Package JKang.IpcServiceFramework.Client.NamedPipe
Invoke the server
// register IPC clients
ServiceProvider serviceProvider = new ServiceCollection()
.AddNamedPipeIpcClient<IInterProcessService>("client1", pipeName: "pipeinternal")
.BuildServiceProvider();
// resolve IPC client factory
IIpcClientFactory<IInterProcessService> clientFactory = serviceProvider
.GetRequiredService<IIpcClientFactory<IInterProcessService>>();
// create client
IIpcClient<IInterProcessService> client = clientFactory.CreateClient("client1");
string output = await client.InvokeAsync(x => x.ReverseString(input));