使用支持双工通道或回调的 .NET Core 的 IPC
Posted
技术标签:
【中文标题】使用支持双工通道或回调的 .NET Core 的 IPC【英文标题】:IPC using .NET Core that supports duplex channel or callbacks 【发布时间】:2017-06-08 16:03:11 【问题描述】:我正在评估 .NET Core 2.0 的 IPC 通信。我发现 .NET Core 不支持服务器端的 WCF。 .NET Core 中可以使用什么来进行进程间通信以及回调(用于发布-订阅)模型?
【问题讨论】:
【参考方案1】:如果你准备好进入底层,你可以使用named pipes,但你必须自己实现发布/订阅模式。
在更高的层次上,您可以查看 ZeroMQ/NetMQ 之类的库 - 这些是位于套接字之上的非常薄的层,支持各种模式(如发布/订阅)。
更高级别是真正的消息队列 - RabbitMQ。
当然,原生方式是使用 ASP.NET Core 的 Web API。
【讨论】:
感谢您的建议伊戈尔。无论如何,我们可以使用 asp.net core 在 web api 中启用双工或 pubsub 通信吗? Web API 不支持双工或发布订阅。但是 WebSockets 可以(至少肯定是双工的)。 .NET Core 似乎支持System.Net.WebSockets
命名空间。【参考方案2】:
我也有类似的需求,但现有的解决方案对我来说有太多依赖项,并且不支持正确的双向通信。
所以我写了PipeMethodCalls 包:
var pipeServer = new PipeServerWithCallback<IConcatenator, IAdder>("mypipe", () => new Adder());
await pipeServer.WaitForConnectionAsync();
string concatResult = await pipeServer.InvokeAsync(c => c.Concatenate("a", "b"));
var pipeClient = new PipeClientWithCallback<IAdder, IConcatenator>("mypipe", () => new Concatenator());
await pipeClient.ConnectAsync();
int result = await pipeClient.InvokeAsync(a => a.AddNumbers(4, 7));
它将方法名称和参数序列化为 JSON,在另一端调用它,然后将响应打包发回。
【讨论】:
看起来不错,但无法引用我的.NET 4.5
,因为这只是.NET Core
@AlexG 该库是 .NET Standard 2.0,因此您至少需要 .NET 4.6.1
才能使用它。它使用的 API 在 .NET Standard 的早期版本中不存在。
这对我来说是几乎的答案,但我需要将服务器作为 Windows 服务运行并遇到 UnauthorizedAccessExceptions。 .Net Standard 显然没有 PipeSecurity 的实现,所以似乎我对此不走运。不过,在我发现这一点之前,它的效果非常好。以上是关于使用支持双工通道或回调的 .NET Core 的 IPC的主要内容,如果未能解决你的问题,请参考以下文章