Поделиться через


SignalR: изменен тип параметров протокола MessagePack Hub

Тип параметров протокола концентратора MessagePack ASP.NET Core SignalR изменился с IList<MessagePack.IFormatterResolver> на тип MessagePackSerializerOptions библиотеки MessagePack.

Обсуждение этого изменения см. на странице dotnet/aspnetcore#20506.

Представленные версии

5.0, предварительная версия 4

Старое поведение

Можно добавить параметры, как показано в следующем примере:

services.AddSignalR()
    .AddMessagePackProtocol(options =>
    {
        options.FormatterResolvers.Add(MessagePack.Resolvers.StandardResolver.Instance);
    });

И заменить параметры следующим образом:

services.AddSignalR()
    .AddMessagePackProtocol(options =>
    {
        options.FormatterResolvers = new List<MessagePack.IFormatterResolver>()
        {
            MessagePack.Resolvers.StandardResolver.Instance
        };
    });

Новое поведение

Можно добавить параметры, как показано в следующем примере:

services.AddSignalR()
    .AddMessagePackProtocol(options =>
    {
        options.SerializerOptions =
            options.SerializeOptions.WithResolver(MessagePack.Resolvers.StandardResolver.Instance);
    });

И заменить параметры следующим образом:

services.AddSignalR()
    .AddMessagePackProtocol(options =>
    {
        options.SerializerOptions = MessagePackSerializerOptions
                .Standard
                .WithResolver(MessagePack.Resolvers.StandardResolver.Instance)
                .WithSecurity(MessagePackSecurity.UntrustedData);
    });

Причина изменения

Это изменение является частью перехода к MessagePack v2.x, который был объявлен на странице aspnet/Announcements#404. В библиотеку v2.x добавлен API параметров, который проще в использовании и предоставляет больше возможностей, чем список MessagePack.IFormatterResolver, представленный ранее.

Это критическое изменение затрагивает всех, кто настраивает значения на MessagePackHubProtocolOptions. Если вы используете протокол концентратора MessagePack ASP.NET Core SignalR и изменяете параметры, внесите изменения, чтобы использовать новый API параметров, как показано выше.

Затронутые API

Microsoft.AspNetCore.SignalR.MessagePackHubProtocolOptions