[go: nahoru, domu]

Skip to content

jacqueskang/IpcServiceFramework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CI build Stable build
Build Status Build Status

IpcServiceFramework

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.

Usage

  1. 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);
    }
  2. 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);
        }
    }
  3. Install the following NuGet packages in server application:

    > Install-Package Microsoft.Extensions.Hosting
    > Install-Package JKang.IpcServiceFramework.Hosting.NamedPipe
  4. 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: "my-pipe");
                })
                .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<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));

Downloads

IpcServiceFramework is available via NuGet packages:

FAQs