Comunicarea cu resursele serverului este un aspect foarte important pentru o aplicatie a unui dispozitiv mobil care este inclus intr-o arhitectura distribuita. Exista mai multe optiuni disponibile dezvoltatorului care doreste o comunicare eficienta intre server si dispozitiv:
Web Services mesaje SOAP transmise prin HTTP
Sockets – protocol particular TCP/IP,
Direct Database Access – conexiune “live” la SQL Server prin TCP/IP sau HTTP care foloseste ADO.NET pentru schimbul de date
Syncronization – sincronizarea intre SQL Server si clientul SQL Server CE prin RDA, Merge Replication sau ADO.Net Sync Services
Message Queuing – schimb asincron de mesaje de date cu MSMQ (Message Queuing Services) prin TCP/IP
Email/SMS
HTTP
WCF – platforma Microsoft pentru construirea aplicatiilor distribuite service-oriented.
WCF inlocuieste tehnologii ca .NET Remoting, Enterprise Services si ASP.NET Web Services (ASMX). WCF ofera un model pentru construirea aplicatiilor care suporta aceleasi scenarii in cadrul sistemelor distribuite. De exemplu, in cadrul programarii web, avem scenarii care implica WCF pentru JSON (Javascript Object Notation) sau REST (Representatioal State Transfer).
Windows Communication Foundation in .Net Framework apare in versiunea 3.0, odata cu lansarea Windows Vista (2007). Alaturi de WCF, sunt introduse si Windows Workflow Foundation (WF) si Windows Presentation Foundation (WPF).
WCF a fost proiectat pentru interoperabilitatea cu alte tehnologii. Un client WCF se poate conecta prin proceduri remote la COM (Component Object Model), la aplicatii distribuite construite pe .Net Remoting sau cu servicii ASP.NET , REST.
Pentru a putea folosi WCF, mai intai trebuie sa intelegem notiunile pe care acesta le foloseste.
ENDPOINT
Un endpoint reprezinta o destinatie pentru mesaj. Facand analogie, acesta este similar unui receptor in cazul unei comunicatii telefonice. Cand un client comunica cu un serviciu, ambii au un endpoint.
Pentru a crea un endpoint, avem nevoie de ABC (Adress, Binding, Contract).
A – ADRESS
Address este definit printr-un URI. Exista mai multe tipuri de URI (HTTP, HTTPS – suportate in Compact Framework, TCP, Named Pipes, MSMQ). Fiecare este specific protocolului de transport compatibil WCF. De la URI, clientul poate localiza serverul in retea si apoi serviciul din cadrul serverului.
B – BINDING
Binding va stabili modul in care clientul va comunica cu serverul. Binding va descrie tot ce va contine mesajul transmis intre client si server. Binding-ul contine mai multe elemente, unele pentru securiate, codarea mesajului, transport, tranzactii. Unele sunt optionale, insa cele pentru codarea mesajului si transport sunt obligatorii.
Desi exista 13 binding-uri predefinite in Compact Framework este suportat doar unul: basicHttpBinding. Acesta va permite servicii de Web si transport.
C – CONTRACT
Contractul va furniza detaliile modului in care clientul va interactiona cu serviciul specific. Prin contract intelegem apelurile metodelor disponibile (service contracts), layout-ul structurilor de date (data contracts) si modul in care exceptiile sunt tratate (fault contracts – nu sunt suportate de Compact Framework).
In cod, contractele sunt definite prin folosirea atributelor. Metodele sunt definite cu ajutorul unor atribute, ServiceContract si OperationContract.
[ServiceContract] public interface IHello { [OperationContract] string SayHello(string name); [OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); }
Atributul aplicat interfetei, ServiceContract, permite metodelor marcate cu OperationContract sa fie disponibile clientilor.
Layoutul structurilor de date transmise este definit prin aplicarea altor atribute, DataContract si DataMember.
[DataContract] public class CompositeType { bool boolValue = true; string stringValue = "Hello "; [DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; } } [DataMember] public string StringValue { get { return stringValue; } set { stringValue = value; } } }
Atributul DataContract identifica o clasa/structura care contine elemente de date. La fel ca in cazul “service contracts”, in “data contracts” folosim atributul DataMember pentru ca membri sa poate fi folositi.
Pe scurt, cand ne referim la endpoint-ul unui WCF, avem:
Address (unde?), Binding (cum?), Contract (ce?).
WCF este o buna alegerea in crearea de servicii care necesita o interoperabilitate mare.
WCF ofera suport si pentru tehnologii mai vechi, de exemplu, Win32NamedPipes.
In .Net Compact Framework, se pot crea doar clientii WCF si nu servicii WCF. Serviciile WCF trebuie gazduite pe sistemul desktop sau pe un server si pot fi apelate din dispozitivul Windows Mobile.
De regula, pasii pentru construirea unui serviciu WCF incep de la proiectarea lui (definirea si implementare service contract), implemetare (endpoint, configurare binding, configurare comportament runtime), gazduire (initializare ServiceHost).
In urmatorul articol, vom construi un serviciu Windows Communication Foundation (WCF) care va avea un client Windows Mobile.
Pingback/Trackback
WCF – partea 2-a | by zeltera