1

我们更新到 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 数据库。

4

1 回答 1

2

应该将BodyString值转换为varchar而不是nvarchar

请参阅:https ://docs.particular.net/transports/sql/operations-scripting#inspecting-messages-in-the-queue “

这是计算列定义中的一个错误,已更正。BodyString 列不被 NServiceBus 本身使用,仅用于操作员的诊断原因。因此,NServiceBus 创建的架构中存在一个非关键错误。

这将在 NServiceBus SQL 传输的下一个维护版本中得到修复。

请手动修改架构以通过更新架构手动更正此问题。

请执行以下操作:

ALTER TABLE [MyQueueTable] DROP COLUMN BodyString;
GO

其次是:

ALTER TABLE [MyQueueTable] ADD BodyString as cast(Body as varchar(max));
GO
于 2018-11-26T08:59:20.813 回答