Skip to content

Releases: theRainbird/CoreRemoting

1.2.3.0

26 Oct 11:30

Choose a tag to compare

Updated WatsonTcp version to 6.0.11

1.2.2.0

15 Oct 06:04

Choose a tag to compare

New Features and Enhancements

  • Added support for LINQ expression return values in remote calls.
  • Full ValueTask handling, including new unit tests.
  • Introduced experimental QUIC channel (requires .NET 9.0, Windows only) with lock‑protected send/receive and a shared QuicTransport base class.
  • New async primitives: AsyncCountdownEvent, AsyncManualResetEvent, AsyncReaderWriterLock, AsyncLock and AsyncDisposable helpers (based on ideas by Stephen Toub and Stephen Cleary).
  • Thread‑safe BsonReferenceResolver with reference‑counting to avoid deserialization problems.
  • Customizable thread‑pool for event handlers to improve remote‑event processing.
  • ServiceProxy now includes ServiceInterfaceType and ServiceName properties.
  • Remote event handling improvements: subscription and un‑subscription support for non‑singleton server components, plus an EventStub class ported from the Zyan Framework.
  • Session and proxy utilities: ClientConfig can specify a custom proxy builder; all CreateProxy overloads now guarantee identical results.
  • Authentication enhancements: new BeginCall event, server Logon/Logoff events, and earlier authentication checks in the server pipeline.
  • Channel upgrades:
    • WebSocketSharp moved to a dedicated project and external package dependency removed.
    • New WebsocketSharpServerChannel and WebsocketSharpClientChannel classes.
    • Added System‑Net‑WebSockets client channel.
    • Refactored TCP handshake sequence, added configurable MaxMessageSize.
    • WatsonTcp v6.0.10 now handles partial headers and disposal race conditions correctly.
  • Support for processing messages larger than 2 MiB.
  • DataTable serialization added with corresponding unit test.

Bug Fixes and Stability Improvements

  • Fixed numerous race conditions, especially around disconnect and dispose operations in TcpClientChannel, WatsonTcpClient and RemotingClient.
  • Resolved memory leaks in ClientRpcContext, the internal TCP client, and SmallMemoryStream handling.
  • Improved serialization/deserialization handling for DateTimeKind, TimeSpan, BSON for common .NET types, and non‑serializable return values.
  • Corrected exception propagation so remote exceptions deserialize reliably; constructors now throw RemoteInvocationException on failure.
  • Fixed counter bugs that caused mismatched pending‑message counts.
  • Prevented duplicate RPC calls after session disposal or when the client is disconnected.
  • Fixed WebSocket thread‑safety issues on Windows for SendAsync and ReceiveAsync.
  • Resolved message‑order problems in the TCP handshake (issues #55 and #148).
  • Eliminated unhandled exceptions in KeepSessionAliveTimerOnElapsed and other background tasks.
  • Fixed authentication failure handling: client no longer stays connected after a failed login; proper disconnect logic added.
  • Cleaned up compiler warnings related to missing XML comments, unsafe Task.Result usage, and obsolete IDisposable implementations (now IAsyncDisposable).
  • Updated QUIC channel removal handling and solution structure.
  • Added missing unit tests for async RPC processing, event handling, DI containers, and race‑condition detection.

Performance and Code Quality Improvements

  • Introduced granular lock objects and AsyncLock to reduce contention.
  • Replaced wait‑handles with TaskCompletionSource‑based synchronization.
  • Added locking for send/receive in QUIC and TCP channels to avoid race conditions.
  • Implemented reference‑counter logic for BSON resolver, reducing garbage collection pressure.
  • Added SmallBlockMemoryStream to lower allocations when handling large payloads.
  • Cleaned up unreachable code, namespace indentation and duplicated warnings.
  • Updated CI matrix to include Windows‑latest detection and OS matrix for Linux and Windows testing.

Documentation and Miscellaneous

  • Added extensive XML comments and enabled ConfigureAwait(false) compliance checks.
  • Provided release notes for many tracked issues (e.g., #92, #95, #100, #105, #108, #116, #120, #134, #141, #153, #155, #156, #163, #168, #192, #203).
  • Updated CodeQL workflow to the latest version.
  • Included .NET 8.0 as a separate target framework for examples and tests.

Known Limitations

  • QUIC channel is Windows‑only and requires .NET 9.0.
  • Some tests remain disabled on WebSocket platforms pending further investigation (e.g., CloseSession on websockets).

1.2.1.0

22 Nov 22:56

Choose a tag to compare

  • Change default serializer to BSON to align with non-classic API's default
  • Change default channel to TCP to align with non-classic API's default
  • Implement TCP channel recognition from Classic Remoting API configuration
  • Preventing Leakage of the Remoting Session
  • Use Async methods for WatsonTCP
  • Replace obsolete methods for Aes encryption
  • Remove RemotingSession in a separate task
  • Avoid nested envelopes
  • RemotingSession shouldn't overwrite the serialized exception with an empty MessageCallResult message.
  • Try to keep useful information from the non-serializable exceptions.
  • Fix a hang due to a WireMessage deserialization error.
  • Demonstrate failing event dispatch when one of the clients disconnects unexpectedly.
  • Don't try to dispatch the client events to a disposed remoting session.
  • Try your best not to fail event dispatch even if the client had power failure

1.2.0.0

20 Mar 11:56

Choose a tag to compare

  • Added support for cross framework serialization
  • Fixed possible thread deadlocks
  • Improved service registration and methods for getting service registration metadata.

1.1.16

12 Oct 19:27

Choose a tag to compare

  • Fixed client freeze on server disconnect
  • Updated dependencies (Castle.Windsor, WatsonTCP, ...)

1.1.15

05 Jun 20:24

Choose a tag to compare

  • Fixed memory leaks
  • Fixed calling inherited interface methods

1.1.14

30 Nov 12:31

Choose a tag to compare

  • Added [ReturnAsProxy]
  • Fixed support for out parameters
  • Fixed .NET 6.0 support for encryption

1.1.13

15 Jan 12:35
611c864

Choose a tag to compare

Added support for async methods

1.1.12

22 Nov 06:36

Choose a tag to compare

- Added separate handling for infrastructure exceptions

- Moved BeforeCall event firing into user code try block

1.1.7

11 Apr 11:49

Choose a tag to compare

First feature complete tested release.