Skip to content

0.4.0

Compare
Choose a tag to compare
@bernardnormier bernardnormier released this 16 Sep 20:12
· 20 commits to main since this release
f5b6244

What's Changed

  • Add support for .NET 9.0 (.NET 9.0 RC1).

  • QUIC transport

    • Add new KeepAliveInterval option to IceRpc.Transports.Quic.QuicClientTransportOptions. This new option is implemented with .NET 9.0 and has no effect with .NET 8.0.

      In .NET 8.0, .NET QUIC does not keep connections alive and does not provide an option to keep connections alive. For example, if you send a request to a server and the server takes a long time to return the corresponding response (more than the connection's idle timeout, which is by default 30 seconds) and there is no other activity (request/response) on this connection, .NET QUIC aborts the connection because it remained idle for too long. This is naturally an undesirable behavior, with unfortunately no good solution in .NET 8.0.

      In .NET 9.0, .NET QUIC provides the option to keep a connection alive with the KeepAliveInterval option (on System.Net.Quic.QuicConnectionOptions). This option instructs .NET QUIC to send a ping every KeepAliveInterval to keep the connection alive. The new KeepAliveInterval of IceRpc.Transports.Quic.QuicClientTransportOptions configures this option for client connections. The default value is 15 seconds (half of the default idle timeout). This way, with the default idle timeout and keep-alive interval, the previous scenario (a server that takes a long time to return a response) works perfectly fine and the connection is not aborted. If you reduce the idle timeout, you should also reduce this KeepAliveInterval to about half the idle timeout. IceRPC sets the KeepAliveInterval to infinite for server connections; in other words, IceRPC servers never send QUIC pings to clients.

  • Slice

    • Improve the mapping for fields in structs, classes and exceptions: fields with a non-optional Slice type mapped to a C# reference type are now required.
    • (Slice1) Simplify mapping for Slice classes and exceptions. A Slice class or exception is now mapped to C# class with a public parameterless constructor (and other constructors). This parameterless constructor is used by the ZeroC.Slice activator for decoding.
  • Slice and Protobuf compilation

    • Add build telemetry. IceRPC collects anonymous telemetry data when you compile Slice files or Protobuf files. You can find detailed information about what data is collected and how to opt-out in the READMEs for IceRpc.Slice.Tools and IceRpc.Protobuf.Tools.
  • Ice interop

    • Changed the default value for the EnableIceIdleCheck option on IceRpc.ConnectionOptions to true. See the documentation of this option for full details.

Full Changelog: v0.3.1...v0.4.0