Sdílet prostřednictvím


Konfigurace serializace v Orleans

Konfigurace serializace Orleans je klíčovou součástí celkového návrhu systému. I když Orleans poskytuje rozumné výchozí hodnoty, můžete serializaci nakonfigurovat tak, aby vyhovovala potřebám vašich aplikací. Pro odesílání dat mezi hostiteli Orleans.Serialization podporuje delegování na jiné serializátory, jako jsou Newtonsoft.Json a System.Text.Json. Podporu jiných serializátorů můžete přidat podle vzoru nastaveného těmito implementacemi. Pro odstupňované úložiště je nejlepší použít IGrainStorageSerializer ke konfiguraci vlastního serializátoru.

Konfigurace Orleans pro použití Newtonsoft.Json

Chcete-li nakonfigurovat Orleans serializaci určitých typů pomocí Newtonsoft.Json, musíte nejprve odkazovat na Microsoft.Orleans. Balíček NuGet Serialization.NewtonsoftJson . Potom nakonfigurujte serializátor a určete, za které typy bude zodpovědný. V následujícím příkladu určíme, že Newtonsoft.Json serializátor bude zodpovědný za všechny typy v Example.Namespace oboru názvů.

siloBuilder.Services.AddSerializer(serializerBuilder =>
{
    serializerBuilder.AddNewtonsoftJsonSerializer(
        isSupported: type => type.Namespace.StartsWith("Example.Namespace"));
});

V předchozím příkladu volání AddNewtonsoftJsonSerializer přidává podporu pro serializaci a deserializaci hodnot pomocí Newtonsoft.Json.JsonSerializer. Podobná konfigurace musí být provedena u všech klientů, kteří potřebují tyto typy zpracovat.

U typů, které jsou označeny GenerateSerializerAttribute), Orleans bude upřednostňovat vygenerovaný serializátor před serializátorem Newtonsoft.Json .

Konfigurace Orleans pro použití System.Text.Json

Alternativně můžete nakonfigurovat Orleans použití System.Text.Json k serializaci typů, odkazovat na Microsoft.Orleans. Serialization.SystemTextJson NuGet package. Potom nakonfigurujte serializátor a určete, za které typy bude zodpovědný. V následujícím příkladu určíme, že System.Text.Json serializátor bude zodpovědný za všechny typy v Example.Namespace oboru názvů.

Při interakci s aplikací ISiloBuilderzvažte následující příklad:

siloBuilder.Services.AddSerializer(serializerBuilder =>
{
    serializerBuilder.AddJsonSerializer(
        isSupported: type => type.Namespace.StartsWith("Example.Namespace"));
});

Externí zprostředkovatelé serializátoru

Je důležité zajistit, aby konfigurace serializace byla stejná na všech klientech a sila. Pokud jsou konfigurace nekonzistentní, může dojít k chybám serializace.

Zprostředkovatelé serializace, které implementují IExternalSerializer , lze zadat pomocí SerializationProviderOptions.SerializationProviders vlastnosti ClientConfiguration a GlobalConfiguration v kódu:

// Client configuration
var clientConfiguration = new ClientConfiguration();
clientConfiguration.SerializationProviders.Add(
    typeof(FantasticSerializer).GetTypeInfo());

// Global configuration
var globalConfiguration = new GlobalConfiguration();
globalConfiguration.SerializationProviders.Add(
    typeof(FantasticSerializer).GetTypeInfo());

Alternativně je možné je zadat v konfiguraci XML v rámci <SerializationProviders /> vlastnosti <Messaging>:

<Messaging>
    <SerializationProviders>
        <Provider type="GreatCompany.FantasticSerializer, GreatCompany.SerializerAssembly" />
    </SerializationProviders>
</Messaging>

V obou případech je možné nakonfigurovat více poskytovatelů. Kolekce je seřazena, což znamená, že pokud zprostředkovatel, který může serializovat typy A a B je zadán před poskytovatelem, který může pouze serializovat typ B, pak druhý zprostředkovatel nebude použit.

Viz také