本开源项目基于 JKang.IpcServiceFramework项目继续扩展完善。.net8.0中序列化方法改用System.Text.Json中的JsonSerializer静态方法.netstandard2.0版本仍旧使用Newtonsoft.Json进行序列化
$ dotnet add package IpcServiceFramework.Hosting.Tcp.Net本开源项目基于 JKang.IpcServiceFramework项目继续扩展完善。
.net8.0中序列化方法改用System.Text.Json中的JsonSerializer静态方法
.netstandard2.0版本仍旧使用Newtonsoft.Json进行序列化
| CI build | Stable build |
|---|---|
A .NET 8.0 based lightweight framework for efficient inter-process communication. Named pipeline and TCP support out-of-the-box, extensible with other protocols.
| Client SDK to consume IPC service over TCP |
| IpcServiceFramework.Hosting.NamedPipe.Net | Server SDK to run Named pipe IPC service endpoint |
| IpcServiceFramework.Hosting.Tcp.Net | Server SDK to run TCP IPC service endpoint |
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 IpcServiceFramework.Hosting.NamedPipe.Net
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 IpcServiceFramework.Client.NamedPipe.Net
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));