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