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(input.ToCharArray()); 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));