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
Evitare memory leaks nelle closure JavaScript
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Dallo sviluppo locale ad Azure con .NET Aspire
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
Creare agenti facilmente con Azure AI Agent Service
Integrare SQL Server in un progetto .NET Aspire
Integrare Agenti A2A in Azure API Management
Definire il colore di una scrollbar HTML tramite CSS
Gestire il routing HTTP in Azure Container App
Gestire gli errori nelle Promise JavaScript con try()
Supportare la crittografia di ASP.NET Core con Azure Container App
.NET Aspire per applicazioni distribuite
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Sfruttare una CDN con i bundle di ASP.NET
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Inserire le news di Punto Informatico nel proprio sito


