4.0.0
[4.0.0] - 2021-02-22
Starting with this version, the API documentation for the latest release is viewable at https://launchdarkly.github.io/dotnet-eventsource.
The 4.x major version of LaunchDarkly.EventSource
will be used in the upcoming major version releases of LaunchDarkly's .NET-based SDKs. This release streamlines the API, updates platform compatibility, and improves performance.
Added:
EventSource.Restart
: this method allows the caller to trigger a connection restart even if there was not an error on the stream.MessageEvent.Name
: previously, the event name was only available as a property ofMessageReceivedEventArgs
.ConfigurationBuilder.DefaultEncoding
: sets the character encoding to use for parsing the stream data if the server did not specify an encoding in itsContent-Type
.ConfigurationBuilder.PreferDataAsUtf8Bytes
: an optional mode in whichEventSource
will read thedata:
property of events as a raw UTF-8 byte array (assuming the stream encoding is UTF-8) to avoid unnecessarily allocating a UTF-16string
. This is meant as an optimization for applications that will be processing the data with a UTF-8-based API such asSystem.Text.Json
.- Simple
EventSource(Uri)
constructor for cases where you do not need any other configuration options. - Standard .NET XML documentation of all public types and methods is now produced in the build.
- The release now publishes a Source Link package.
Changed:
- The minimum .NET Standard compatibility version is now 2.0.
- The minimum .NET Framework compatibility version is now 4.5.2.
- Logging now works through the new
LaunchDarkly.Logging
facade which is used by LaunchDarkly .NET-based SDKs, instead ofCommon.Logging
. ConfigurationBuilder
methods no longer throw any exceptions, except for one case: passingnull
for the stream URI. In all cases where a property has a maximum and/or minimum value, if you try to set a value outside that range it will simply be changed to the closest valid value. If two properties do not make sense to use together (such as a non-nullHttpClient
and a non-nullHttpMessageHandler
), one will simply override the other as described in the API documentation.ConfigurationBuilder.DelayRetryDuration
is named toInitialRetryDelay
, which more accurately describes its meaning.ConfigurationBuilder.MessageHandler
is renamed toHttpMessageHandler
, since that's the name of its type (also, "message" has other meanings in this API).- The type of
Configuration.HttpContentFactory
is now simplyFunc<HttpContent>
rather than using a custom delegate type. - If you pass a
Dictionary
of headers toConfigurationBuilder.RequestHeaders
, it will now be copied. Previously the configuration retained a reference to the originalDictionary
, which could cause problems if it was later modified. EventSource
now implements the stream read timeout in a way that uses the task scheduler more efficiently. Previously, it executed an additional task for each read withTask.Delay
; now, it uses a timed cancellation token.- Exception messages have been rewritten for clarity and style.
Fixed:
ConfigurationBuilder.BackoffResetThreshold
had no effect; the default value was being used regardless of what you set it to.- When reading the SSE stream,
EventSource
was using a case-insensitive comparison to recognize field names likeevent
anddata
. The SSE specification states that field name "must be compared literally, with no case folding performed," so a field name likeEVENT
is invalid.
Removed:
- Removed all types and methods that were marked as deprecated/obsolete in the last 3.x version.
Configuration
no longer has a public constructor. Instances must now be created withConfiguration.Builder
.- The helper class
ExponentialBackoffWithDecorrelation
is no longer public.