跳到主要内容
版本:1.3.0

配置

本页介绍 Apache Fory™ C# 的 ForyBuilder 选项和默认配置值。 Config 是由 ForyBuilder 创建的不可变运行时快照。

构建运行时

using Apache.Fory;

Fory fory = Fory.Builder().Build();
ThreadSafeFory threadSafe = Fory.Builder().BuildThreadSafe();

默认配置

Fory.Builder().Build() 使用以下默认值:

选项默认值说明
TrackReffalse默认关闭引用跟踪
CompatiblefalseSchema 一致模式,不写入演进元数据
CheckStructVersionfalse默认关闭结构体 schema hash 校验
MaxDepth20动态对象图的最大嵌套深度
MaxTypeFields512一个收到的 struct metadata body 最大字段数
MaxTypeMetaBytes4096一个收到的 metadata body 最大编码字节数
MaxSchemaVersionsPerType10一个逻辑类型最大远端 metadata 版本数
MaxAverageSchemaVersionsPerType3所有远端类型的平均 metadata 版本数

构建器选项

C# 始终使用与 xlang 兼容的帧头,因此 ForyBuilder 不提供单独的 Xlang(...) 开关。

TrackRef(bool enabled = false)

为共享对象图和循环对象图启用引用跟踪。

Fory fory = Fory.Builder()
.TrackRef(true)
.Build();

Compatible(bool enabled = false)

启用 Schema 演进模式。

Fory fory = Fory.Builder()
.Compatible(true)
.Build();

CheckStructVersion(bool enabled = false)

为生成的结构体序列化器启用严格的 schema hash 校验。

Fory fory = Fory.Builder()
.CheckStructVersion(true)
.Build();

MaxDepth(int value)

设置动态对象图允许的最大嵌套深度。

Fory fory = Fory.Builder()
.MaxDepth(32)
.Build();

value 必须大于 0

MaxTypeFields(int value)

设置一个收到的远端 struct metadata body 中可接受的最大字段数。

Fory fory = Fory.Builder()
.MaxTypeFields(512)
.Build();

MaxTypeMetaBytes(int value)

设置一个收到的 TypeMeta body 可接受的最大编码 body 字节数,不包含 8 字节 header 和扩展 size varint。

Fory fory = Fory.Builder()
.MaxTypeMetaBytes(4096)
.Build();

MaxSchemaVersionsPerType(int value)

设置一个逻辑类型可接受的最大远端 metadata 版本数。

Fory fory = Fory.Builder()
.MaxSchemaVersionsPerType(10)
.Build();

MaxAverageSchemaVersionsPerType(int value)

设置所有已接受远端类型的平均 metadata 版本数限制。有效全局下限为 8192 个 schema。

Fory fory = Fory.Builder()
.MaxAverageSchemaVersionsPerType(3)
.Build();

常见配置

追求速度的 Schema 一致服务

Fory fory = Fory.Builder()
.TrackRef(false)
.Compatible(false)
.Build();

兼容的跨语言服务

Fory fory = Fory.Builder()
.Compatible(true)
.TrackRef(true)
.Build();

线程安全的服务实例

ThreadSafeFory fory = Fory.Builder()
.Compatible(true)
.TrackRef(true)
.BuildThreadSafe();

安全

安全相关配置:

  • 在反序列化不可信 payload 前,只注册预期的类型。
  • 对 intentional same-schema payload,将 CheckStructVersion(true)Compatible(false) 配合使用。
  • 设置 MaxDepth(...) 以拒绝异常深的动态对象图。
  • 除非数据不是恶意输入,且可信 peer 会发送更大的 metadata 或大量 schema 版本,否则保持远端 schema metadata 限制的默认值。
  • 对不可信输入,优先使用生成或已注册的具体 model,避免宽泛的动态字段。

相关主题