Windows Communication Foundation è un motore per realizzare servizi che è possibile personalizzare in tutti gli aspetti: contratti, binding, operazioni, comportamenti. Normalmente, il serializzatore usato per convertire il grafo degli oggetti in XML infoset è il DataContractSerializer che, in un unione ai writer, materializzano la struttura in XML testuale, MTOM o binario.
E' possibile però cambiare questo comportamento cambiando il motore della serializzazione. E' disponibile ad esempio un progetto open source di nome protobuf-net che sfrutta la stessa tecnica di serializzazione usata da Google per le comunicazioni. Essa si basa su una serializzazione binaria che non utilizza nomi e namespace, snellendo molto la dimensione dei messaggi. Oltre a questo il motore si dimostra decisamente performante, anche due o tre volte superiore a quello predefinito di WCF.
Per utilizzarlo occorre scaricare la libreria dal sito http://code.google.com/p/protobuf-net/ e referenziarla. Per cambiare il serializzatore ci sono molte tecniche, ma la più semplice è agire sul behavior del client e del servizio. Si modifica quindi nell'app.config la sezione system.serviceModel come nel codice seguente:
<system.serviceModel> <extensions> <behaviorExtensions> <add name="ProtoBufSerialization" type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, protobuf-net, Version=1.0.0.282, Culture=neutral, PublicKeyToken=257b51d87d2e4d67"/> </behaviorExtensions> </extensions> <system.serviceModel>
La dichiarazione dell'estensione permette di utilizzarla poi nel behavior generico o specifico di un servizio:
<behaviors> <endpointBehaviors> <behavior> <ProtoBufSerialization/> </behavior> </endpointBehaviors> </behaviors>
Infine, per rendere funzionante protobuf, è necessario marcare le classi con gli attributi ProtoContract e ProtoMember che, in modo del tutto simile al DataContractSerializer, indicano quali membri serializzare.
[DataContract] [ProtoContract] public class Result { [ProtoMember(1)] [DataMember] public string Name { get; set; } [ProtoMember(2)] [DataMember] public int Quantity { get; set; } }
Per maggiori informazioni si rimanda alla documentazione
http://code.google.com/p/protobuf-net/w/list
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Anonimizzare i dati sensibili nei log di Azure Front Door
Creare una libreria CSS universale: Clip-path
Recuperare App Service cancellati su Azure
Utilizzare Copilot con Azure Cosmos DB
Eseguire query in contemporanea con EF
Eliminare una project wiki di Azure DevOps
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Estrarre dati randomici da una lista di oggetti in C#
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Filtering sulle colonne in una QuickGrid di Blazor
Utilizzare i variable font nel CSS
I più letti di oggi
- Ricavare l'indirizzo completo della pagina che esegue lo script
- Tutorial ASP.NET
- Windows 7 Installation Fest - Roma, Firenze
- Container & DevOps Day - Online
- .NET Conference Italia 2021 - Online
- .NET Conference Italia 2022 - Milano e Online
- SQL Server 2008 February CTP
- Mono 0.12: verso una nuova implementazione di ASP.NET
- Tutto per portarsi ASP.NET 4.0, Silverlight 4.0 e .NET Framework 4.0 sotto l'ombrellone