PipeMethodCalls 4.0.2
dotnet add package PipeMethodCalls --version 4.0.2
NuGet\Install-Package PipeMethodCalls -Version 4.0.2
<PackageReference Include="PipeMethodCalls" Version="4.0.2" />
paket add PipeMethodCalls --version 4.0.2
#r "nuget: PipeMethodCalls, 4.0.2"
// Install PipeMethodCalls as a Cake Addin #addin nuget:?package=PipeMethodCalls&version=4.0.2 // Install PipeMethodCalls as a Cake Tool #tool nuget:?package=PipeMethodCalls&version=4.0.2
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. |
.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 (7)
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.MessagePack
MessagePack serializer for PipeMethodCalls. Uses the MessagePack-CSharp library. |
|
PipeMethodCalls.NetJson
System.Text.Json serializer for PipeMethodCalls. |
|
LijsDev.CrystalReportsRunner.Core
API needed to use Crystal Reports Runner from caller applications. |
|
FLio.Updater.Client
UpdarterClientService implementation |
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on PipeMethodCalls:
Repository | Stars |
---|---|
RandomEngy/VidCoder
A Blu-ray, DVD and video file transcoder for Windows.
|
Version | Downloads | Last updated |
---|---|---|
4.0.2 | 7,241 | 5/19/2024 |
4.0.1 | 67,068 | 4/14/2023 |
4.0.0 | 355 | 4/6/2023 |
3.2.1 | 13,865 | 3/13/2023 |
3.2.0 | 63,810 | 6/25/2022 |
3.1.1 | 5,405 | 4/2/2022 |
3.1.0 | 83,910 | 12/24/2021 |
3.0.4 | 17,736 | 9/27/2021 |
3.0.3 | 2,980 | 8/3/2021 |
3.0.2 | 2,867 | 4/4/2021 |
3.0.1 | 361 | 4/4/2021 |
3.0.0 | 9,715 | 4/4/2021 |
2.1.0 | 591 | 2/12/2021 |
2.0.2 | 1,246 | 11/17/2020 |
2.0.1 | 441 | 10/24/2020 |
2.0.0 | 703 | 8/8/2020 |
1.0.1 | 5,765 | 4/21/2019 |
1.0.0 | 821 | 3/20/2019 |
Fixed an issue with hung calls when pipe server disconnects. Pending calls now throw an IOException when the pipe closes in the middle of the call.