System.Collections: ArrayList

Implementa l’interfaccia IList, usa un array che dinamicamente aumenta la sua dimensione se richiesto.

Implementazioni:

IList

Osservazioni:

Non è garantito che gli elementi nell’ArrayList siano ordinati.
La capacità dell’ArrayList è in numero degli elementi che può tenere in memoria.
Se il numero di elementi aumenta, anche la dimensione dell’ArrayList aumenterà.
Se il numero degli elementi diminuisce, per ridimensionare l’ArrayList bisognerà chiamare il metodo TrimToSize o settando
la proprietà Capacity.

Possiamo accedere agli elementi dell’ArrayList tramite un’indice. L’indice parte da 0.

L’ArrayList accetta elementi null e due elementi possono essere uguali.

Thread Safety:

I members public static sono thread safe.
Per garantire le operazioni multi-thread, bisogna istanziare un array tramite il metodo ArrayList.Synchronized

Code Snippet
  1.             // Creates and initializes a new ArrayList.
  2.             ArrayList myAL = new ArrayList();
  3.             myAL.Add("The");
  4.             myAL.Add("quick");
  5.             myAL.Add("brown");
  6.             myAL.Add("fox");
  7.             // Creates a synchronized wrapper around the ArrayList.
  8.             ArrayList mySyncdAL = ArrayList.Synchronized(myAL);
  9.             // Displays the sychronization status of both ArrayLists.
  10.             Console.WriteLine("myAL is {0}.", myAL.IsSynchronized ? "synchronized" : "not synchronized");
  11.             Console.WriteLine("mySyncdAL is {0}.", mySyncdAL.IsSynchronized ? "synchronized" : "not synchronized");

 

Durante l’enumerazione degli oggetti nella collection potremmo comunque incappare in un’eccezzione se altri thread modificano la collezione anche se questa è sincronizzata.
Per garantire anche l’accesso durante l’enumerazione bisogna lockare la collection durante l’operazione o catchare l’eccezione per notificare il cambio anche agli altri threads.

WCF: Encoding e Serializzazione – Parte 1 - Introduzione

Questo è un post introduttivo per i post seguenti questo argomento.

DataContract - Serializzazione

L’attributo DataContract è uno dei primi con cui si ha a che fare nel momento in cui si inizierà a scrivere un servizio WCF.
All’interno di un servizio WCF i dati possono avere una certa complessità; quando, gli stessi, vengono spediti vengono rappresentati
tramite un XML Schema Definition (XSD).

DataContract è il mezzo usato da WCF per mappare i tipi .NET CLR con le loro rappresentazioni XSD.

Il decoratore [DataContract] è usato per specificare quale classe deve essere specificata nell’XSD e esposto nell’WSDL esposto dal servizio.

Il decoratore [DataMember] è usato invece per specificare quali membri della classe devono essere specificati nell’XSD.

A runtime la classe DataContractSerializer serializza l’oggetto in XML usanto le regole specificate con gli attributi [DataContract] e [DataMember].

Ecco un esempio, questa è la nostra classe:

Code Snippet
  1.     [DataContract]
  2.     public class CompositeType
  3.     {
  4.         bool boolValue = true;
  5.         string stringValue = "Hello ";
  6.         [DataMember]
  7.         public bool BoolValue
  8.         {
  9.             get { return boolValue; }
  10.             set { boolValue = value; }
  11.         }
  12.         [DataMember]
  13.         public string StringValue
  14.         {
  15.             get { return stringValue; }
  16.             set { stringValue = value; }
  17.         }
  18.     }

 

Questo l’WSDL ottenuto:

Code Snippet
  1. <GetDataUsingDataContractResponse xmlns="http://tempuri.org/">
  2.   < GetDataUsingDataContractResult xmlns:a="http://schemas.datacontract.org/2004/07/WcfService1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  3.     < a:BoolValue>false</a:BoolValue>
  4.     < a:StringValue>Hello </a:StringValue>
  5.   </ GetDataUsingDataContractResult>
  6. </ GetDataUsingDataContractResponse>

 

In definitiva, la classe DataContractAttribute == [DataContract] specifica o implementa il tipo dei dati da serializzare tramite un serializer, ad esempio tramite la classe DataContractSerializer.

Per Serializzazione solitamente si descrive il processo di conversione di un oggetto in un array di bytes; tale processo viene usato per salvare lo stato di un oggetto su un file o su un database,
copiare lo stato sul clipboard, per trasferire l’oggetto tra un’applicazione ad un’altra tramire un network e per migliorarne la mantenibilità.

Con WCF, serializzare, si intende come un oggetto .NET e mappato nell’XML Infosets.

WCF supporta 3 serializer: XmlSerializer, DataContractSerializer e NetDataContractSerializer.

Tutte e 3 hanno possiedono un algoritmo di mapping diverso, ma lo scopo è sempre lo stesso: mappare gli oggetti .NET in XML Infosets.

Encoding

Abbiamo appena finito di descrivere la Serializzazione ed adesso possiamo capire che distinzione fa WCF con l’Encoding.

Encoding è il termine usato per descrivere il processo di conversione di un messaggio in un array di bytes.

WCF supporta cinque tipi di formati di encoding:

  • binary
  • text
  • Message Transmission Optimization Mechanism (MTOM)
  • JavaScript Objeect Notation
  • Plain-Old-XML (POX)

Quale di questi formati usare, dipende dal tipo di applicazione che stiamo sviluppando.

Ad esempio vorremmo usare il BinaryMessageEncoder per ottimizzare le performance tra le applicazioni, oppure usare TextMessageEncoder o MtomMessageEncoder per mantenere
l’interoperabilità basata sui vecchi servizi WS-* Web Services, o usare JsonMessageEncoder per AJAX

Se provaste a usare encodings diversi per scrivere lo stesso XML Infosets, otterrete N differenti byte streams, comunque rappresenterebbero gli stessi dati.

L’encoding non è considerato parte del contratto del servizio, ma piuttosto una configurazione dell’endpoint.

Conclusione

La separazione tra Serializzazione e Encoding rende possibile la creazione di applicazioni molto flessibili.
Questo è un cavallo di battaglia di WCF, perchè gli da la possibilità di configurarsi con qualsiasi scenario.

Se abbiamo bisogno di performance allora possiamo usare un encoder se invece necessitiamo di interoperabilità allora sceglieremo un formato testuale.

Tags:

OrangeDotNet

Gli amici sono arrivati.
Arance, cannoli, arancine, mozzarelle in carrozza, caponatina, pani ca mivusa, cazzilli, mussu, pani e panelle, cassata, cannolo africano, iris con nutella e con ricotta,
pasta al forno, pasta tinnirumi e zucchina, parmigiana, gelsi, fichi, fichi d’india, limoni e stigghiola.

E’ realmente tutto pronto, forse mancano ancora un paio di sedie e le tovaglie di lino.
Ma le otri son piene del vino buono (Nero d’Avola, ovvio).

Adesso tocca a noi, bavaglini al collo e via di coltello e forchetta.

Buon appetito!!!

http://www.orangedotnet.org/

Tags: