Windows Communication Foundation: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Etichette: Annullato Modifica visuale |
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti. Etichette: Modifica visuale Modifica da mobile Modifica da web per mobile Attività per i nuovi utenti Suggerito: aggiungi collegamenti |
||
(Una versione intermedia di un altro utente non mostrate) | |||
Riga 1:
[[File:DotNet3.0.svg|thumb|upright=1.4|Questo ''sottosistema'' è parte della piattaforma [[.NET Framework 3.0]]]]
'''Windows Communication Foundation''' (WCF), conosciuto in fase di sviluppo con il nome in codice '''Indigo''', è un "sottosistema applicativo" proprietario della [[Microsoft]], che offre la struttura [[Application programming interface|API]] per la creazione di applicazioni distribuite in ambienti [[Windows]].
Se da un lato ogni [[protocollo di rete]] (e.g. [[Hypertext Transfer Protocol|HTTP]], [[File Transfer Protocol|FTP]], [[Simple Mail Transfer Protocol|SMTP]], ecc.) ha un suo modello di programmazione, e necessita quindi di una conoscenza specifica da parte degli sviluppatori per poter essere utilizzata, WCF è stato realizzato con l'intento di ricondurre ad un unico modello diverse tecnologie, rendendo più semplice ed uniforme la programmazione in ambiente Windows.
È stato sviluppato per [[Windows Vista]], ma è disponibile anche per i sistemi [[Windows XP#Service Pack 2|Windows XP SP2]], [[Windows Server 2003]] e [[Windows 7]].
Riga 14:
Durante l'esecuzione della pipeline il messaggio deve attraversare due livelli: il primo si occupa dei ''[[Comportamento|Behaviour]]'' (comportamenti), ovvero delle trasformazioni che deve subire un messaggio, il secondo si occupa dei Canali (detti ''Channel''), ovvero dell'instradamento verso il canale fisico di trasporto. Nel primo livello ci si occupa della conversione dei dati dal formato 'codice' al formato messaggio; ad esempio, vengono trasformate le informazioni da una classe al formato [[XML]] di un messaggio [[SOAP]]. In aggiunta i Behaviour si occupano anche della sicurezza, della criptazione delle informazioni e di tutte le funzioni di gestione del dato. Durante la seconda fase il messaggio viene messo sul canale di trasporto secondo quanto specificato in fase di configurazione. Quindi è in questa fase che si instanzia il canale del protocollo originale su cui viaggeranno le informazioni. Poiché a livello di protocollo si possono controllare alcuni dettagli, in questo livello si possono aggiungere informazioni sulla modalità di trasmissione, protetta o meno, oppure sul Reliable Messaging. Come detto in precedenza; questo processo avviene per mezzo di una pipeline.
Seguendo lo stesso concetto della pipeline di [[ASP.NET]], possiamo vedere tutte le opzioni finora illustrate (protocollo, formattazione, ecc.) come moduli da inserire nel flusso di elaborazione del messaggio.
Poiché la gestione dei Binding può essere interamente gestita in fase di configurazione, si può intuire come semplicemente cambiando poche voci si può passare dalla pubblicazione in modalità [[Web]] su [[HTTPS]] criptato con un [[certificato digitale]], ad un trasporto diverso del messaggio come SMTPS (''SMTP Secured'') senza dover modificare il codice. Se si volesse dare una parola
=== Cosa sono i Contract ===
Riga 26:
=== I DataContract ===
Una volta che è stato stabilito quali operazioni mettere a disposizione dei [[client]], arriva il momento di definire quali informazioni debbano essere pubblicate. Questo è compito dei DataContract. Supponiamo che un servizio pubblichi un metodo che dato il [[codice fiscale]] ritorni i dati della persona associata. Nel '''''DomainModel''''' l'oggetto Persona contiene informazioni come Nome, Cognome, Data di Nascita e altro ancora, tuttavia può nascere l'esigenza di non pubblicare tutti i dati della persona ma soltanto quelli che si ritengono opportuni. Per ottenere un risultato del genere bisogna corredare sia la classe che le sue proprietà con attributi, più precisamente alla classe va applicato l'attributo DataContract e alle proprietà l'attributo '''''DataMember'''''.
=== I MessageContract ===
Per ''[[default (informatica)|default]]'', tutte le proprietà di una classe vengono mappate all'interno del corpo di un messaggio. A seconda delle esigenze, può capitare che si debbano piazzare delle informazioni nelle intestazioni invece che nel corpo; questa mappatura tra le classi ed il formato del messaggio viene impostato tramite i MessageContract. Anche in questo caso l'impostazione di queste opzioni avviene tramite attributi e, più precisamente, MessageContract per la classe e '''''MessageBody''''' o '''''MessageHeader''''' per le proprietà.
|