Kezdőlap > Kategorizálatlan > Windows Communication Foundation – Elméleti háttér

Windows Communication Foundation – Elméleti háttér

2008. május 13. kedd Hozzászólás Go to comments

Már nagyon korán az informatika aranykorának hajnalán felmerült az igény arra, hogy az alkalmazások egymással kommunikáljanak. Több kommunikációs technológia alakult ki az idők folyamán volt, amelyek sikeresek voltak és voltak olyanok amelyek szinte azonnal elhaltak. Csak imageegy pár említésre méltó technológia, OLE, COM, DCOM majd a nagy előre lépés a Remoting. Sokáig ezek a technológiák uralták a piacot, de elég nehézkes volt a kezelésük , tanulásuk, megértésük. Majd ahogy a piac igénye nőttek egyre kiforrtabb technológiák álltak a fejlesztők rendelkezésére. Emlékezzünk vissza a 2000-es évek elején a web szolgáltatások megjelenésével már egyszerűen tudtunk más platformokon futó alkalmazásokkal is kommunikálni, hisz a kommunikáció alapja szöveges vagy nyers XML formában történt. És nem bináris alapú volt mint a DCOM esetében. De a kommunikáció még mindig nagy  probléma volt, hisz az egyes kommunikációs technológiák elsajátítása komoly utánajárást és szakértelmet igényelt. És ha szükség volt egy Remotingot használó alkalmazásra vagy egy web szolgáltatást publikáló alkalmazásra sok esetben nem volt meg a megfelelő tudás a kezünkben. Ezzel szemben a WCF a kommunikációs problémákra teljes körű megoldást kínál. Talán a WCF egyik legfontosabb újítása, hogy innentől kezdve a fejlesztőnek nem kell törődnie azzal, hogy a kommunikáció hogy valósul meg TCP/IP alapon vagy HTTP vagy esetleg más alapokon. A kód ugyan az marad. Ha át akarjuk írni, optimális esetben ezt megtehetjük vagy a konfigurációs fájlból, de a programban is csak néhány sort kell változtatnunk.

És hogy mégis hogyan működik a WCF? Egyáltalán mi is ez a WCF? Ezt fogjuk megnézni ebben a blog bejegyzésben.

Windows Communication Foundation (CodeName: Indigo)

A WCF a .NET Framework 3.0-ban jelent meg először. A WCF segítségével szolgáltatás orientált alkalmazásokat tudunk létrehozni, amelyekkel akár más platformon futó alkalmazásokkal is kommunikálhatnak. Akár Linuxon futó alkalmazásokkal is hatékonyan tud együtt működni. Tehát a WCF nem más mint egy újgeneráció technológia elosztott alkalmazások fejlesztéséhez.

A WCF egy egységes programozási modellt nyújt a fejlesztők számára. Így ugyanabban a környezetben tudunk fejleszteni, ha web szolgáltatást, enterprise web szolgáltatást vagy épp .NET Remoting alkalmazásokat. Így egy technológia ismeretével a korábbinál kevesebbet kellesz kódolnunk és a hatékonyabban tudunk elosztott alkalmazásokat készíteni. Alapvetően SOA szemléletet követ a WCF, de a SOA -nál többet nyújt. Akár bináris kommunikációra, nyers XML kommunikációt illetve a P2P kommunikációra is képes. A WCF számos szolgáltatást nyújt többek között a biztonság, a tranzakció kezelés és megbízható üzenetkézbesítés területén. Ezen túlmenően teljes körű diagnosztikai funkciókkal rendelkezik (üzenetnaplózás, trace, teljesítményszámlálók, WMI). A WCF igazi keretrendszer: működésének szinte valamennyi aspektusa testre szabható, kiterjeszthető.

A WCF terminológiában két szereplőről beszélhetünk. Van a szolgáltatás (egy- vagy több végpontot publikál) és van a kliens, amely a szolgáltatások végpontjainak üzeneteket küldeni, és a szolgáltatás végpontoktól üzenetet tud fogadni.

Minden végpont 3 dolgot fog össze. Az ABC-t. Azaz az Address, Binding , Contractot.
De mik is ezek?
Az Address a végpont címe. Ez tulajdonképpen egy URL amelynek segítségével elérjük az adott szolgáltatást.
A Binding definiálja, hogy milyen módon történik a kommunikáció. (TCP/IP, HTTP stb.. ) Számos előre definiált Bindingot nyújt a számunkra a WCF.
A Contract a szolgáltatás interfacenek a leírása, azt határozza meg, hogy az adott szolgáltatás milyen műveleteket támogat. Ez definiálható .NET interfacek formájában vagy WSDL nyelvű leírással is. Ez mindegy a számunkra hisz átjárható.

WCF kötések (Binding)

A WCF számos beépített kötés típussal rendelkezik, amelyek a legkülönfélébb transzport protokollokat, titkosítást é s biztonsági előírásokat valósítanak meg. A legtöbb esetben ezek számunkra megfélőek, de ha a helyzet úgy hozza ezek a kötések testre szabhatók, kiterjeszthetők alkalmazás specifikus funkcionalitással, megszorítással. Ismerkedjünk meg néhánnyal.

  • BasicHttpBinding – ASMX alapú web szolgáltatásokkal való kommunikációra alkalmas. http protokollokon alapszik és szövege vagy XML formátumú üzenetkódolást definiál. (Alapvető biztonság)
  • WsHttpBinding – Biztonságos csak egyirányú (simplex) illetve kérdés/válasz üzenettovábbításon alapuló szolgáltatás szerződések esetén használatos.
  • WsDualHttpBinding – Biztonságos, duplex üzenettovábbításra és SOAP alapú kommunikációra használjuk.
  • NetTcpBinding – WCF alkalmazások közötti gép-gép kapcsolaton megvalósított biztonságos, megbízható és optimalizált kommunikációra alkalmas kötés.
  • NetNamedPipeBinding – Ha egy gépen futó WCF alkalmazás között szeretnénk biztonságos, hatékony és optimalizált kommunikációt megvalósítani.
  • NetMsmqBinding – WCF alkalmazások kommunikációját elősegítő, várakozási soron alapuló kötés. A legnagyobb előnye ennek a kötésnek az, hogy ha a szolgáltatás nem is érhető el és a kliens üzenetet küld a szolgáltatásnak, akkor az üzenet nem vész el, hanem a szolgáltatás bekapcsolásakor meg kapja az összes üzenetet.
  • NetPeerTcpBinding –Több számítógép között szeretnénk biztonságos kapcsolatot létesíteni.

WCF Architektúra – Csatornák

Most, hogy megismerkedtünk a WCF nyújtotta Bindingokkal, nézzük meg, hogy hogy is történik a kommunikáció, és miért is olyan fontos a binding.

Amikor a kliens meghívja a szolgáltatás valamelyik műveletét akkor a kliens oldalon ezt a kérést a kliens oldalon a channel proxy fogadja, majd átalakítja üzenetté és ez az üzenet végighalad a kliens oldali channel stack egyes rétegein.

Minden réteg valamilyen szolgáltatást valósimageít meg. Pl. biztonság, megbízhatóság, tranzakció kezelés stb. A legalsó réteg minden esetben a Transport channel mely az üzenetek továbbításáért felelős, amely az üzeneteket adat folyammá alakítja, amit elküld. A szolgáltatás oldalon a transzport channel fogadja az adatfolyamot, majd vissza alakítja üzenetté. És ez az üzenet ugyanúgy végighalad a rétegeken csak itt jelen esetben fölfelé. És végül a Dispatch runtime meghívja a szolgáltatás objektumunk megfelelő műveletét.

Az, hogy hogyan épül fel egy channel stack azt a Binding határozza meg. Például, ha kiválasztjuk a WsHttpBindingot akkor a transzport http alapon valósul meg. Fölötte lesz egy Ws Security réteg fölötte egy realible message réteg, és egy tranzakció réteg. Tehát a Bindingra a csatorna konfiguráció leírásaként is tekinthetünk. image

WCF használata

Ahhoz, hogy WCF-et használni tudjuk szükségünk lesz a System.ServiceModel névtérre.

Technikai követelmények:
Operációs Rendszer: Windows Vista, Windows XP SP2 vagy Windows Server 2003 SP1
IDE: Visual Studio 2008 vagy Visual Studio 2005 SP1 with WCF extension
Framework: .NET 3.0 , .NET 3.5
SDK: Microsoft Windows Software Development Kit 6.0

A WCF szerződések meghatározzák az adott szolgáltatás viselkedését. A WCF ötféle szerződést ismer.

· Serive Contract – Szolgáltatás szerződés

· Operation Contract – Művelet szerződés

· Data Contract –Adat Szerződés

· Fault Contract – Hiba szerződés

· Message Contract – Üzenet szerződés

Service Contract
Minden WCF osztály implementál legalább egy Service Contractot, amely a szolgáltatás által publikált műveleteket definiálja. A Service contact egy olyan interface vagy osztály amely a [ServiceContract] attributummal van ellátva.

[ServiceContract]

public class Calculator

{
…
}

Operation Contract
A művelet szerződés a szolgáltatás által definiált műveleteket definiálja. Művelet szerződés olyan metódus, amely el van látva egy [OperationContract] attribútummal az intefaceben vagy az osztályon belül. Fontos megjegyezni, hogy nem csak publikus metódusok lehetnek részei a szerződének hanem private minősítésűek is. (Asmx web szolgáltatásoknál például csak publikus lehetet a [WebMethod])

[OperationContract]

private int MyOperation(…)

{

…

}

Data Contract
Adatszerződésre akkor van szükség, ha a kliens és a szerver közötti csatornán történő kommunikáció során összetett típusú objektumot szeretnénk továbbítani. Egy adatszerződés tehát egy olyan osztály, melyet [DataContract] attribútummal látunk el, adattagjait pedig [DataMember] attribútummal.

[DataContract]

public class MyClass

{

[DataMember]

public string MyVariable;

[DataMember]

public string MyVariable2;
} 

Fault Contract
A WCF alkalmazások úgy kezelik a kivételeket, hogy a menedzselt kivétel példányokat SOAP hiba példányokká képezik le, majd a fogadó ismét menedzselt példányokká képezi le.

[OperationContract]

[FaultContract(typeof(Exception))]

public double MyOperation(…)

{

…
}

Message Contract
Az üzenet szerződés egy teljes SOAP üzenet formátumot definiál. A komplex típusok továbbítására használható csak úgy, mint az adatszerződés, viszont azzal ellentétben a kommunikációs csatornára kerülő SOAP üzenet struktúrájára vonatkozó információk megadását is lehetővé teszi.

Meta adat csere – MetadataExchange

Ha kész a szolgáltatásunk ezt el kell érnünk a kliensből, de ehhez meg kell kapnia a szerződés leírását. Hisz a kliens önmagában, nem tudhatja, hogy mégis milyen távoli metódusokat hívhat majd meg. Ezt valahogy közölnünk kell vele. De, hogyan? Erre több lehetőség is van.

1) Vagy Copy -Pastel beilleszthetjük és meghívjuk. Ez egyszerű, de sok esetben lehetetlen feladat hisz mi van akkor, ha a kliens Java platformon fut? Akkor Hiába kapnánk meg az interfacet.

2) SOA környezetben természetesen van erre megoldás.
1) MetaDataExchange – meta adatcsere végpont. Egy adott címen letölthetővé válnak a szolgáltatás megvalósításának elemei. Visual Studio 2008-ból az Add Service Reference szolgáltatással használható

3) Illetve, ha fejlesztőcsapat másik észét megkérjük, hogy küldje el a számunkra az adott szolgáltatás WSDL vagy XSD leírását.

WCF szolgáltatás publikálása

De hogy publikáljuk a szolgáltatásunkat? Tulajdonképpen szinte bárhogy. Lehet akár egy console alkalmazás, vagy egy windows forms, netalán egy WPF alkalmazás is hosztolhatja. Ezt nevezzük Self- Hostingnak. De akár Windows Service is publikálhatja a szolgáltatást. Vagy akár az IIS is hosztolhatja számunkra a szolgáltatást (IIS 5.1, IIS 6.0). Viszont az IIS 5.1 és 6.0 használatával van néhány megkötés a hosztolással kapcsolatban. Csak HTTP vagy HTTPS alapú kommunikációt lehet megvalósítani, így csak olyan binding használhatunk, ami ezt a kommunikációt valósítja meg. De IIS 7.0 alatt már nincsenek ezek a megkötések ott már lehet használni TCP-t vagy bármely más kommunikációt.

Advertisements
Kategóriák:Kategorizálatlan
  1. Még nincs hozzászólás.
  1. No trackbacks yet.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: