GitHub - jacqueskang/IpcServiceFramework: .NET Core Inter-process communication framework (original) (raw)
| 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.
NuGet packages
Usage
- 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(pipeName: "pipeinternal");
})
.ConfigureLogging(builder =>
{
// optionally configure logging
builder.SetMinimumLevel(LogLevel.Information);
});
} 5. Install the following NuGet package in client application:
Install-Package JKang.IpcServiceFramework.Client.NamedPipe 6. Invoke the server
// register IPC clients
ServiceProvider serviceProvider = new ServiceCollection()
.AddNamedPipeIpcClient("client1", pipeName: "pipeinternal")
.BuildServiceProvider();
// resolve IPC client factory
IIpcClientFactory clientFactory = serviceProvider
.GetRequiredService<IIpcClientFactory>();
// create client
IIpcClient client = clientFactory.CreateClient("client1");
string output = await client.InvokeAsync(x => x.ReverseString(input));