diff --git a/.gitignore b/.gitignore index 427adc7189..99e05dccb9 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ BenchmarkDotNet.Artifacts/ .gradle/ src/SignalR/clients/**/dist/ modules/ +.ionide/ # File extensions *.aps @@ -41,4 +42,4 @@ launchSettings.json msbuild.ProjectImports.zip StyleCop.Cache UpgradeLog.htm -.idea \ No newline at end of file +.idea diff --git a/eng/Dependencies.props b/eng/Dependencies.props index 42c9849342..37c0b6a471 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -163,6 +163,7 @@ and are generated based on the last package release. + diff --git a/eng/Versions.props b/eng/Versions.props index 4e2038b4bd..7046eefd5d 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -225,7 +225,7 @@ 3.0.0 3.0.0 3.0.0 - 2.1.80 + 2.1.90 4.10.0 0.10.1 1.0.2 diff --git a/src/SignalR/common/Protocols.MessagePack/src/.editorconfig b/src/SignalR/common/Protocols.MessagePack/src/.editorconfig new file mode 100644 index 0000000000..6b409a9a5d --- /dev/null +++ b/src/SignalR/common/Protocols.MessagePack/src/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome:http://EditorConfig.org +# NOTE: Requires **VS2019 16.3** or later + +# New Rule Set +# Description: +# MsgPack001 : MsgPack001 Avoid static default for MessagePackSerializerOptions +# MsgPack002 : MsgPack002 Avoid using a mutable static value for MessagePackSerializerOptions + +# Code files +[*.{cs,vb}] +dotnet_diagnostic.MsgPack001.severity = error +dotnet_diagnostic.MsgPack002.severity = error diff --git a/src/SignalR/common/Protocols.MessagePack/src/Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj b/src/SignalR/common/Protocols.MessagePack/src/Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj index 993bb94a5f..43f4873c80 100644 --- a/src/SignalR/common/Protocols.MessagePack/src/Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj +++ b/src/SignalR/common/Protocols.MessagePack/src/Microsoft.AspNetCore.SignalR.Protocols.MessagePack.csproj @@ -1,4 +1,4 @@ - + Implements the SignalR Hub Protocol over MsgPack. @@ -17,6 +17,7 @@ + diff --git a/src/SignalR/common/Protocols.MessagePack/src/Protocol/MessagePackHubProtocol.cs b/src/SignalR/common/Protocols.MessagePack/src/Protocol/MessagePackHubProtocol.cs index bd16161b0e..e1a762937b 100644 --- a/src/SignalR/common/Protocols.MessagePack/src/Protocol/MessagePackHubProtocol.cs +++ b/src/SignalR/common/Protocols.MessagePack/src/Protocol/MessagePackHubProtocol.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.SignalR.Protocol private const int VoidResult = 2; private const int NonVoidResult = 3; - private MessagePackSerializerOptions _msgPackSerializerOptions; + private readonly MessagePackSerializerOptions _msgPackSerializerOptions; private static readonly string ProtocolName = "messagepack"; private static readonly int ProtocolVersion = 1; @@ -53,34 +53,36 @@ namespace Microsoft.AspNetCore.SignalR.Protocol public MessagePackHubProtocol(IOptions options) { var msgPackOptions = options.Value; - SetupResolver(msgPackOptions); - _msgPackSerializerOptions.WithSecurity(MessagePackSecurity.UntrustedData); - } + var resolver = SignalRResolver.Instance; + var hasCustomFormatterResolver = false; - private void SetupResolver(MessagePackHubProtocolOptions options) - { - // if counts don't match then we know users customized resolvers so we set up the options - // with the provided resolvers - if (options.FormatterResolvers.Count != SignalRResolver.Resolvers.Count) + // if counts don't match then we know users customized resolvers so we set up the options with the provided resolvers + if (msgPackOptions.FormatterResolvers.Count != SignalRResolver.Resolvers.Count) { - var resolver = CompositeResolver.Create(Array.Empty(), (IReadOnlyList)options.FormatterResolvers); - _msgPackSerializerOptions = MessagePackSerializerOptions.Standard.WithResolver(resolver); - return; + hasCustomFormatterResolver = true; } - - for (var i = 0; i < options.FormatterResolvers.Count; i++) + else { - // check if the user customized the resolvers - if (options.FormatterResolvers[i] != SignalRResolver.Resolvers[i]) + // Compare each "reference" in the FormatterResolvers IList<> against the default "SignalRResolver.Resolvers" IList<> + for (var i = 0; i < msgPackOptions.FormatterResolvers.Count; i++) { - var resolver = CompositeResolver.Create(Array.Empty(), (IReadOnlyList)options.FormatterResolvers); - _msgPackSerializerOptions = MessagePackSerializerOptions.Standard.WithResolver(resolver); - return; + // check if the user customized the resolvers + if (msgPackOptions.FormatterResolvers[i] != SignalRResolver.Resolvers[i]) + { + hasCustomFormatterResolver = true; + break; + } } } - // Use optimized cached resolver if the default is chosen - _msgPackSerializerOptions = MessagePackSerializerOptions.Standard.WithResolver(SignalRResolver.Instance); + if (hasCustomFormatterResolver) + { + resolver = CompositeResolver.Create(Array.Empty(), (IReadOnlyList)msgPackOptions.FormatterResolvers); + } + + _msgPackSerializerOptions = MessagePackSerializerOptions.Standard + .WithResolver(resolver) + .WithSecurity(MessagePackSecurity.UntrustedData); } ///