Stack-ul canalului Windows Communication Foundation (WCF) este o stivă de comunicare pe mai multe nivele, cu unul sau mai multe canale care procesează mesaje. În partea de jos a stivei există un canal de transport responsabil cu adaptarea stivei de canale la transportul utilizat (de exemplu, TCP, HTTP, SMTP și alte tipuri de transport). Canalele oferă un model de programare la nivel scăzut pentru trimiterea și primirea mesajelor. Acest model de programare se bazează pe mai multe interfețe și resurse de alte tipuri, denumite în mod colectiv modelul canalului WCF. Această secțiune discută despre formularele de canale, despre crearea unui ascultător de canal de bază (în serviciu) și despre fabrica de canale (pe client).
Obiectivele WCF interacționează cu lumea exterioară utilizând o stivă de comunicare denumită stack de canale. În figura următoare, stack-ul canalului este comparat cu alte stive de comunicare, de exemplu TCP / IP.
În primul rând, observăm asemănări. In ambele cazuri, fiecare strat stivă oferă o reprezentare abstractă a unui mediu care este sub ea și oferă o reprezentare abstractă a numai nivelul imediat deasupra lor. Fiecare nivel folosește o reprezentare abstractă a nivelului direct sub el. Mai mult, în ambele cazuri, interacțiunea dintre cele două stive, fiecare nivel interacționează cu un nivel adecvat de altă stivă, de exemplu, interacționează cu nivelul IP strat IP, nivelul TCP - cu nivel TCP, etc ...
Acum observăm diferențele. TCP a fost proiectat pentru a oferi o reprezentare abstractă a rețelei fizice și canal stiva - pentru transmiterea rezumatelor nu este doar capabil să livreze un mesaj, de exemplu, transport, dar alte caracteristici, cum ar fi conținutul mesajului, protocolul utilizat pentru comunicare, inclusiv transportul, dar .. nu numai el. De exemplu, elementul de legare a sesiunii fiabile este parte din stivele canalului, dar nu este sub transport și nu reprezintă transportul propriu-zis. Această abstractizare se realizează prin aducerea portul de jos pe cerințele stiva pentru a adapta protocolul de transport care stau la baza arhitecturii stivei de canal și calcularea ulterioară a faptului că canalele mai mari în stivă ar trebui să ofere funcții de legături, cum ar fi furnizarea de garanții de fiabilitate și siguranță.
Mesajele trec prin stivă de comunicare ca obiecte de mesaj. După cum se arată în figura de mai sus, canalul inferior se numește canalul de transport. Acest canal este responsabil pentru transmiterea mesajelor și primirea de mesaje de la alți participanți, inclusiv responsabilitatea pentru conversia obiectului Mesaj în formatul utilizat pentru comunicarea cu alți participanți și pentru transformarea inversă. Deasupra canalului de transport pot exista numeroase canale de protocol, fiecare dintre acestea fiind responsabil pentru furnizarea unei astfel de funcții de comunicare ca asigurând o livrare sigură. Canalele protocolului funcționează cu mesaje care trec prin ele sub forma unui obiect Mesaj. De obicei, fie convertesc mesajul, de exemplu prin adăugarea de antete sau prin criptarea corpului mesajului, fie trimit și primesc propriile mesaje de control ale protocolului, de exemplu, confirmări.
Fiecare canal implementează una sau mai multe interfețe, numite interfețe de canale sau forme de canale. Aceste forme de canale oferă astfel de metode orientate spre interacțiune, cum ar fi transmiterea și recepția sau solicitarea și răspunsul, care sunt implementate de canal și sunt apelate de utilizatorul canalului. Baza formelor canalului este interfața IChannel. care oferă GetProperty
Formatele de canale sunt create în conformitate cu unele șabloane de bază de mesaje, susținute de protocoalele de transport existente. De exemplu, mesajele într-o singură cale corespund cu perechea de canale IInputChannel / IOutputChannel. Interacțiunea în modul "cerere-răspuns" corespunde perechii IRequestChannel / IReplyChannel. și duplex cu două căi corespunde formei IDuplexChannel (care extinde formele IInputChannel și IOutputChannel).
Stivele de canale sunt de obicei create folosind șablonul din fabrică, unde legarea creează o stivă de canale. Pe partea de transmisie, legarea este utilizată pentru a crea fabrica ChannelFactory. care, la rândul său, creează un teanc de canale și returnează o legătură către canalul superior din stack. Aplicația poate apoi să utilizeze acest canal pentru a trimite mesaje. Pentru mai multe informații, consultați Programarea canalelor.
Pe partea receptoare, legarea este utilizată pentru a crea ascultătorul IChannelListener. care ascultă mesajele primite. IChannelListener oferă mesaje aplicației de ascultare prin crearea de stive de canale și procesarea link-ului aplicației la canalul superior. Aplicația utilizează apoi acest canal pentru a primi mesajele primite. Pentru informații suplimentare, consultați Servicii de programare la nivel de canal.
Modelul de obiect canal este un set de interfețe de bază necesare implementării canalelor, ascultătorilor de canale și fabricilor de canale. Există, de asemenea, câteva clase de bază furnizate pentru a ajuta la furnizarea de implementări personalizate.
Ascultătorii de canale sunt responsabili pentru ascultarea mesajelor primite și pentru difuzarea lor la un nivel mai înalt prin canalele pe care le-au creat.
Fabricile de canale sunt responsabile pentru crearea canalelor utilizate pentru transmiterea mesajelor și pentru închiderea tuturor canalelor create de acestea, atunci când aceste fabrici sunt închise.
ICommunicationObject este o interfață de bază care definește principala mașină de stare care implementează toate obiectele care schimbă mesaje. CommunicationObject oferă o implementare a acestei interfețe de bază, din care puteți moșteni celelalte clase de canale, evitând astfel re-implementarea interfeței. Cu toate acestea, acest lucru nu este necesar: canalul personalizat poate implementa direct interfața ICommunicationObject, mai degrabă decât moștenirea acestuia de la CommunicationObject. Nici una dintre clasele prezentate în Fig. 3, nu este considerat parte a modelului de canal; Acestea sunt clase de ajutor care sunt disponibile pentru cei care implementează canale personalizate și au nevoie de instrumente pentru a crea canale.
Următoarele secțiuni descriu modelul obiectului de canal, precum și diferitele domenii de dezvoltare care ajută la crearea canalelor personalizate.