Bootstrap
本文主要介绍.NET Core中轻量级进程间通信框架IpcServiceFramework的介绍和使用方法代码,.NET Core轻量级进程间通信框架,允许通过命名管道和/或TCP调用服务(与WCF类似,目前.NET Core不可用)。支持通过SSL进行安全通信。支持在服务契约中使用原始或复杂类型。支持服务器端的多线程,具有可配置的线程数(仅限命名管道端点)

1、使用步骤

1) 创建一个接口作为服务合同并将其打包在一个程序集中,以便在服务器和客户端之间共享。

2)实施服务并将其托管在控制台或Web应用程序中。

3)使用框架提供的代理客户端调用服务。

2、IpcServiceFramework下载

IpcServiceFramework可以通过NuGet安装:

相关文档VS(Visual Studio)中Nuget的使用

3、使用方法及代码

1) 创建服务contract

  public interface IComputingService
{
float AddFloat(float x, float y);
}

注意:理想情况下,此接口可放置在要在服务器和客户端之间共享的库程序集中。

2) 服务端实现

创建一个安装了以下2个NuGet包的控制台应用程序

> Install-Package Microsoft.Extensions.DependencyInjection
> Install-Package JKang.IpcServiceFramework.Server

添加服务contract的实现

class ComputingService : IComputingService
{
public float AddFloat(float x, float y)
{
return x + y;
}
}

配置并运行服务器

class Program
    {
        static void Main(string[] args)
        {
            // configure DI
            IServiceCollection services = ConfigureServices(new ServiceCollection());
            // build and run service host
            new IpcServiceHostBuilder(services.BuildServiceProvider())
                .AddNamedPipeEndpoint<IComputingService>(name: "endpoint1", pipeName: "pipeName")
                .AddTcpEndpoint<IComputingService>(name: "endpoint2", ipEndpoint: IPAddress.Loopback, port: 45684)
                .Build()
                .Run();
        }
        private static IServiceCollection ConfigureServices(IServiceCollection services)
        {
            return services
                .AddIpc(builder =>
                {
                    builder
                        .AddNamedPipe(options =>
                        {
                            options.ThreadCount = 2;
                        })
                        .AddService<IComputingService, ComputingService>();
                });
        }
    }

注意:可以在Web应用程序中托管IPC服务,请查看示例项目IpcServiceSample.WebServer

3) 从客户端进程调用服务

在客户端应用程序中安装以下包

$ dotnet add package JKang.IpcServiceFramework.Client

添加对包含IComputingService接口的步骤1)中创建的程序集的引用。

调用服务

IpcServiceClient<IComputingService> client = new IpcServiceClientBuilder<IComputingService>()
        .UseNamedPipe("pipeName") // or .UseTcp(IPAddress.Loopback, 45684) to invoke using TCP
        .Build();
    float result = await client.InvokeAsync(x => x.AddFloat(1.23f, 4.56f));

官方地址https://github.com/jacqueskang/IpcServiceFramework