PipeMethodCalls 4.0.3
dotnet add package PipeMethodCalls --version 4.0.3
NuGet\Install-Package PipeMethodCalls -Version 4.0.3
<PackageReference Include="PipeMethodCalls" Version="4.0.3" />
<PackageVersion Include="PipeMethodCalls" Version="4.0.3" />
<PackageReference Include="PipeMethodCalls" />
paket add PipeMethodCalls --version 4.0.3
#r "nuget: PipeMethodCalls, 4.0.3"
#:package PipeMethodCalls@4.0.3
#addin nuget:?package=PipeMethodCalls&version=4.0.3
#tool nuget:?package=PipeMethodCalls&version=4.0.3
PipeMethodCalls
Lightweight .NET Standard 2.0 library to use method calls over named and anonymous pipes for IPC. Supports two-way communication with callbacks.
Calls from client to server
var pipeServer = new PipeServer<IAdder>(
new NetJsonPipeSerializer(),
"mypipe",
() => new Adder());
await pipeServer.WaitForConnectionAsync();
var pipeClient = new PipeClient<IAdder>(new NetJsonPipeSerializer(), "mypipe");
await pipeClient.ConnectAsync();
int result = await pipeClient.InvokeAsync(adder => adder.AddNumbers(1, 3));
Calls both way
var pipeServer = new PipeServerWithCallback<IConcatenator, IAdder>(
new NetJsonPipeSerializer(),
"mypipe",
() => new Adder());
await pipeServer.WaitForConnectionAsync();
string concatResult = await pipeServer.InvokeAsync(c => c.Concatenate("a", "b"));
var pipeClient = new PipeClientWithCallback<IAdder, IConcatenator>(
new NetJsonPipeSerializer(),
"mypipe",
() => new Concatenator());
await pipeClient.ConnectAsync();
int result = await pipeClient.InvokeAsync(a => a.AddNumbers(4, 7));
About the library
This library uses named pipes to invoke method calls on a remote endpoint. The method arguments are serialized to binary and sent over the pipe.
Serialization
PipeMethodCalls supports customizable serialization logic through IPipeSerializer. You've got two options:
- Use a pre-built serializer
new NetJsonPipeSerializer()from the PipeMethodCalls.NetJson package. That uses the System.Text.Json serializer that's built into .NET.new MessagePackPipeSerializer()from the PipeMethodCalls.MessagePack package. That uses the MessagePack-CSharp serializer, which has excellent performance.
- Plug in your own implementation of
IPipeSerializer. Refer to the NetJsonPipeSerializer code for an example of how to do this.
Open an issue or pull request if you'd like to see more built-in serializers.
Features
- 100% asynchronous communication with .ConfigureAwait(false) to minimize context switches and reduce thread use
- 45KB with no built-in dependencies
- Invoking async methods
- Passing and returning complex types with pluggable JSON or binary serialization
- Interleaved or multiple simultaneous calls
- Throwing exceptions
- CancellationToken support
- Works on Windows, Linux and MacOS
Not supported
- Methods with out and ref parameters
- Properties
- Method overloads
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (11)
Showing the top 5 NuGet packages that depend on PipeMethodCalls:
| Package | Downloads |
|---|---|
|
RProvider
An F# Type Provider providing strongly typed access to the R statistical package. The type provider automatically discovers available R packages and makes them easily accessible from F#, so you can easily call powerful packages and visualization libraries from code running on the .NET platform. |
|
|
PipeMethodCalls.NetJson
System.Text.Json serializer for PipeMethodCalls. |
|
|
PipeMethodCalls.MessagePack
MessagePack serializer for PipeMethodCalls. Uses the MessagePack-CSharp library. |
|
|
LijsDev.CrystalReportsRunner.Core
API needed to use Crystal Reports Runner from caller applications. |
|
|
Binom.AutoML.Contracts
Package Description |
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on PipeMethodCalls:
| Repository | Stars |
|---|---|
|
RandomEngy/VidCoder
A Blu-ray, DVD and video file transcoder for Windows.
|
|
|
Sidekick-Poe/Sidekick
The main repository for the Sidekick project, a companion trade tool for Path of Exile and Path of Exile 2.
|
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.3 | 18,239 | 9/8/2025 |
| 4.0.2 | 76,696 | 5/19/2024 |
| 4.0.1 | 165,963 | 4/14/2023 |
| 4.0.0 | 456 | 4/6/2023 |
| 3.2.1 | 19,491 | 3/13/2023 |
| 3.2.0 | 77,398 | 6/25/2022 |
| 3.1.1 | 32,470 | 4/2/2022 |
| 3.1.0 | 94,341 | 12/24/2021 |
| 3.0.4 | 18,253 | 9/27/2021 |
| 3.0.3 | 3,172 | 8/3/2021 |
| 3.0.2 | 3,057 | 4/4/2021 |
| 3.0.1 | 501 | 4/4/2021 |
| 3.0.0 | 34,174 | 4/4/2021 |
| 2.1.0 | 743 | 2/12/2021 |
| 2.0.2 | 1,435 | 11/17/2020 |
| 2.0.1 | 573 | 10/24/2020 |
| 2.0.0 | 849 | 8/8/2020 |
| 1.0.1 | 6,181 | 4/21/2019 |
| 1.0.0 | 1,080 | 3/20/2019 |
Use AssemblyQualifiedName instead of ToString() for the string representation of generic type arguments.