SqlServer Transport для NServiceBus 7 показывает китайские символы в столбце тела сообщения

Мы обновились до NSB 7 и теперь используем Sql Server для транспорта и персистентности.

(Примечание: это работает после обновления большого количества сообщений, потому что каким-то образом они стали несовместимыми, поскольку сериализатор был изменен с Newtonsoft.Json на NServicebus.NewtonsoftSerializer. Вся логика проверки должна быть удалена из конструкторов класса сообщений.)

Итак, в SSMS 17.8.1 (последняя), когда я открываю таблицу для конечной точки, столбец BodyString показывает китайские символы. Текст не мусор, это просто китайский.

Итак, мой вопрос: почему вычисляемый столбец показывает китайские символы? Параметры сортировки в базе данных используются по умолчанию.

 var transport = endpointConfiguration.UseTransport<SqlServerTransport>();
 transport.ConnectionString( connectionString );
 transport.DefaultSchema( "dbo" );
 transport.UseSchemaForQueue( "error", "dbo" );
 transport.UseSchemaForQueue( "audit", "dbo" );
 //this shows Chinese text
 transport.CreateMessageBodyComputedColumn();

Почему это и что мне здесь не хватает? Это.NET 4.72, транспорт - это база данных Azure Sql.

1 ответ

BodyString следует привести значение к varchar и не nvarchar

Смотрите: https://docs.particular.net/transports/sql/operations-scripting"

Это была ошибка в определении вычисляемого столбца, которая была исправлена. Столбец BodyString не используется самим NServiceBus и присутствует только для диагностических целей операторов. Таким образом, некритическая ошибка в схеме, созданной NServiceBus.

Это будет исправлено в следующем выпуске обслуживания для NServiceBus SQL Transport.

Пожалуйста, измените схему вручную, чтобы исправить это вручную, обновив схему.

Пожалуйста, сделайте следующее:

ALTER TABLE [MyQueueTable] DROP COLUMN BodyString;
GO

С последующим:

ALTER TABLE [MyQueueTable] ADD BodyString as cast(Body as varchar(max));
GO
Другие вопросы по тегам