ServiceWire 5.4.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package ServiceWire --version 5.4.1                
NuGet\Install-Package ServiceWire -Version 5.4.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ServiceWire" Version="5.4.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ServiceWire --version 5.4.1                
#r "nuget: ServiceWire, 5.4.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ServiceWire as a Cake Addin
#addin nuget:?package=ServiceWire&version=5.4.1

// Install ServiceWire as a Cake Tool
#tool nuget:?package=ServiceWire&version=5.4.1                

tylerjensen --.NET 6.0 not yet supported.

ServiceWire

Capture serialization error bug fix in 5.4.1

  1. In .NET 5+, the BinaryFormatter is marked obsolete and prohibited in ASP.NET apps.
  2. This bug caused and end of stream error rather than capturing it properly. This version fixes that bug and exposes the limitation introduced in .NET 5+ on ASP.NET apps.
  3. Using ServiceWire in an ASP.NET app is still possible but requires the use of the EnableUnsafeBinaryFormatterSerialization flag in your project file. Use this carefully and be sure you understand the risks.

ICompression added for injecting compression strategy in 5.4.0

  1. Added ICompression for injecting custom compression into usage.
  2. Added .NET 5.0 as target back in.

AssemblyQualified names from user defined types in 5.3.6

  1. Fix for AssemblyQualified names from user defined types.

Multiple Framework Targets and void Return Types 5.3.5

  1. Updated all projects to target .net462, .net48, netcoreapp3.1, and net6.0 only.
  2. Corrected multiple targets for multiple OS in projects for those using Linux.
  3. Updated NuGet package version.

BugFix + Test cases + 48

  1. Throwing the original error through an Intercept would fail for interface methods that have a void return type
  2. Updated framework references from .net462 to .net48

.NET Framework to .NET Core and Serializer Bug Fixes 5.3.4

  1. Support for .NET Framework to .NET Core core parameter types to eliminate exceptions when a Framework client is talking to a Core host or vice versa.
  2. Serializer injection bug fixed.

.NET 4.62 added back in version 5.3.3

  1. Added .NET Framework 4.62 build in package to prevent permissions issue in named pipes.
  2. Fixed custom serializer issue.
  3. .NET Standard 2.0 and 2.1 builds remain.
  4. Resolved parallel Zk test issues.

Note: Use of async/await and Task<T> not recommended. Use of Task return type not supported. While the syntax of Task return type is supported, apparently it is not marked as Serializable. In fact async/await is not really supported. Under the covers the task type is stripped away over the wire and the method is executed on a worker thread on the server synchronously. If you think about it, you will understand that it's two separate processes, so the Task Parallel Library is not going to be able to manage the thread context across the processes. RPC is inherently synchronous but the handling of each request on the host is done on thread pools.

.NET Standard 2.0 and 2.1 in version 5.3.2

  1. Changed library build to only .NET Standard 2.0 and 2.1.
  2. This breaks users of named pipes in .NET 4.6.2 -- DO NOT UPGRADE until we resolve that issue.

Bug Fixes in version 5.3.1

  1. Fixed bug related to complex type serialization that occurred when using output parameters.

BREAKING CHANGES in version 5.3.0

  1. Injectable serialization (see project library tests for examples).

  2. Removes dependency on Newtonsoft.Json and uses BinaryFormatter for default serialization which means wire data classes must be marked [Serializable].

  3. Internal classes are attributed to support protobuf-net serialization as well.

Changes in version 5.2.0

  1. Adds support for return types of Task and Task<T> to support async / await across the wire.

Changes including some breaking changes in version 5.1.0

  1. Dropped strong named assembly.

  2. Support for NetCoreApp 2.0, 2.2 and .NET Framework 4.62. Dropped support for .NET 3.5.

  3. Modified projects and NuGet package generation from Visual Studio 2017.

  4. Dropped separate projects used to build different targets.

  5. Converted test projects to XUnit with multiple targets to allow "dotnet test" run of all targets.

Breaking Changes in version 4.0.1

  1. Switched ServiceWire (and ServiceMq) to Newtonsoft.Json for serialization. Eliminates use of BinaryFormatter and its required Serializable attribute. Also eliminates ServiceStack.Text 3 dependency which has problems serializing structs.

  2. Relaxed assembly version matching to allow additive changes without breaking the client or requiring an immediate client update.

  3. Strong name added to allow the library to be used by strong named applications and libraries.

  4. Added .NET 3.5 support to allow legacy applications to use the library. This adds a Framework specific dependency on TaskParallelLibrary 1.0.2856.0.

  5. For the .NET 4.0 and 3.5 versions, changed to "Client Profile" for the target framework.

  6. Removed dependency on System.Numerics in order to support .NET 3.5 and introduced ZkBigInt class taken from Scott Garland's BigInteger class. See license text for full attribution.

A Lightweight Services Library for .NET.

ServiceWire is a very fast and light weight services host and dynamic client library that simplifies the development and use of high performance remote procedure call (RPC) communication between .NET processes over Named Pipes or TCP/IP.

Find "how to use" examples in the tests code. ServiceWire documentation is available on the wiki.

Important

ServiceWire's dynamically generated proxy will NOT run as x86 on an x64 system. This ususally occurs when you use Visual Studio to create a console application with the default "prefer x86" in project properties selected. Just be sure to choose AnyCPU or the specific target (x86 or x64) so that you do not run 32bit in WOW on an x64 machine.

Get It on Nuget

Get the NuGet package here.

Using the library is easy.

  1. Code your interface

  2. Code your implementation

  3. Host the implementation

  4. Use dynamic proxy of your interface on the client side

This unique library supports:

  • TCP and NamedPipes protocols

  • ByRef (out and ref) parameters (except for non-primitive value types)

  • Dynamic client proxy generation from service interface

  • Very fast serialization of most native types and arrays of those types

  • Multiple service interface hosting on the same endpoint

  • Aspect oriented interception with pre-, post- and exception handling cross cutting

  • Hosting of single service implementation singleton on multiple endpoints and protocols

  • Protocol, serialization and execution strategy extension

Portions of this library are a derivative of RemotingLite.

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 is compatible.  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 netcoreapp3.1 is compatible. 
.NET Framework net462 is compatible.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 is compatible.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (9)

Showing the top 5 NuGet packages that depend on ServiceWire:

Package Downloads
Stride.Core

Core assembly for all Stride assemblies.

Stride.GameStudio

Package Description

Stride.Core.BuildEngine.Common

Package Description

ServiceMq

A store and forward message queue for .NET. based on ServiceWire.

Levrum.Utils

Package Description

GitHub repositories (3)

Showing the top 3 popular GitHub repositories that depend on ServiceWire:

Repository Stars
stride3d/stride
Stride (formerly Xenko), a free and open-source cross-platform C# game engine.
MatterHackers/MatterControl
3D printing software for Windows, Mac and Linux
tylerjensen/ServiceWire
ServiceWire is a very fast and light weight service host and dynamic client library that simplifies the development and use of high performance remote procedure call (RPC) communication between .NET processes over Named Pipes or TCP/IP.
Version Downloads Last updated
5.6.0 109 12/1/2024
5.5.4 47,656 2/21/2023
5.5.3 4,445 12/1/2022
5.5.2 8,321 10/29/2022
5.5.1 10,201 7/21/2022
5.5.0 8,219 6/6/2022
5.4.2 1,313 5/20/2022
5.4.1 10,633 5/11/2022
5.4.0 695 4/24/2022
5.3.6 629 3/21/2022
5.3.5 625 2/28/2022
5.3.4 89,756 6/29/2020
5.3.3 667 4/30/2020
5.3.2 2,129 1/21/2020
5.3.1 1,801 6/4/2019
5.3.0 900 1/11/2019
5.2.0 822 1/7/2019
5.1.0 1,018 1/1/2019
5.0.0 2,039 8/6/2016
4.0.2 1,743 8/3/2016
4.0.1 2,315 12/22/2014
2.0.0 1,400 11/28/2014
1.6.3 1,657 11/26/2014
1.6.2 2,590 11/13/2014
1.6.1 4,213 10/30/2014
1.6.0 3,048 10/30/2014
1.5.1 1,964 4/1/2014
1.5.0 3,072 1/25/2014

Fixes interface sync serialization error capture.