Seriály Reklama
Vývojářské akce

Je WebMatrix a LightSwitch pro lamy?
5.10.2010 18:00 - 20:00, Praha - Microsoft

Další akce...

Spřízněné servery

WCF - Základné pojmy

Marián Košťál | Vydáno 8. února 2007 | Nový komentář | .NET

S príchodom Windows Communication Foundation prišla pre mnohých programátorov aj nová terminológia. V tejto časti seriálu o WCF sa pozrieme na základné pojmy a vzťahy medzi nimi.

reklama

S príchodom Windows Communication Foundation prišla pre mnohých programátorov aj nová terminológia. V tejto časti seriálu o WCF sa pozrieme na základné pojmy a vzťahy medzi nimi.

WCF je založené na komunikácií pomocou správ. Správa (message) je skupina dát obsahujúca záhlavie a telo správy. Príkladom správy je napríklad HTTP požiadavka alebo MSMQ správa. Model WCF rozlišuje medzi klientami a službami. Klient je aplikácia ktorá iniciuje komunikáciu, služba je aplikácia ktorá čaká na požiadavky klientov. Keďže WCF je implementáciou servisne orientovanej architektúry, základným prvkom je služba.

Služba (service) - je systém, ktorý poskytuje jeden alebo viacero endpointov. WCF služba je vnímaná okolitým svetom ako kolekcia endpointov. WCF službu tvoria tri základné časti:

  • trieda služby, ktorá implementuje poskytovanú službu,
  • hostovacie prostredie,
  • jeden alebo viac endpointov.

Komunikáciu klienta so službou posielaním správ znázorňuje nasledovný obrázok:

Endpoint (koncový bod) - miesto na prijímanie a odosielanie správ. Endpoint tvoria 3 časti:

  • adresa
  • binding
  • kontrakt

Pre jednoduchšie zapamätanie sa používa nasledovný zápis:

Endpoint = Address + Binding + Contract = ABC

Myslím, že tento zápis najstručnejšie a najvýstižnejšie charakterizuje filozofiu WCF. Endpoint vytvoríme v konfiguračnom súbore nasledovne:

<endpoint address="http://localhost:8080/library"
          binding="basicHttpBinding"
          contract="Client.Library.ILibrary" />

Adresa - špecifikuje kam sú správy posielané.
Binding - špecifikuje komunikačný mechanizmus a popisuje ako majú byť správy posielané. Medzi základné veci ktoré špecifikuje binding patrí spôsob prenosu (HTTP, TCP, ...) a kódovanie alebo encoding (text, binary). Binding taktiež zahŕňa zabezpečenie (security), session a podporu transakcií.
Kontrakt (contract) - špecifikuje sadu správ, teda aké správy môžu byť prijaté a odoslané.

Hosting - služba musí byť hostovaná v nejakom procese. Host je aplikácia ktorá kontroluje životný cyklus služby.
Kanál (channel) - je prostredie v ktorom sa prenášajú správy. Predtým ako si dve aplikácie začnú vymieňať správy, musí sa medzi nimi vytvoriť kanál smerom k endpointu.
Metadata - popisujú službu, pričom tento popis používajú externé systémy aby dokázali komunikovať so službou. Metadata môžu byť spracované pomocou Service Model Metadata Utility Tool (Svcutil.exe) a použité na vytvorenie WCF klienta.

Modely posielania správ (messaging patterns)

Aplikácie si môžu vymieňať správy 3 spôsobmi:

  • simplex - jednosmerné posielanie správ (napr. od klienta k službe),
  • duplex - asynchrónne obojsmerné posielanie správ,
  • request-reply - synchrónne obojsmerné posielanie správ.

Konfigurácia vs. písanie kódu

Nastavenie správania aplikácie môže byť vo WCF realizované pomocou:

  • kódu (imperatívne),
  • konfigurácie (deklaratívne v App.config),
  • kombináciou kódu a konfigurácie.

Výhodou použitia konfigurácie je, že aj niekto iný ako vývojár môže nakonfigurovať klienta alebo službu aj bez toho, aby musel rekompilovať kód. Pomocou konfigurácie môžeme nielen nastavovať vlastnosti endpointov, ale aj pridávať nové endpointy.

Na záver ešte ukážem nastavenie správania WCF služby a klienta prostredníctvom kódu. Pre tento účel použijem príklad z minulej časti. Z projektu klienta a hostovacej aplikácie vymažeme súbor App.config a konfiguráciu vykonáme pomocou kódu (imperatívne). Upravený kód hostovacej aplikácie potom bude:

using System;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace Host
{
    class Program
    {
        static void Main(string[] args)
        {
            Uri baseAddress = new Uri("http://localhost:8080/library");
            Type serviceType = typeof(LibraryService.Library);
            Type contractType = typeof(LibraryService.ILibrary);
            BasicHttpBinding binding = new BasicHttpBinding();

            using (ServiceHost host = new ServiceHost(serviceType, baseAddress))
            {
                host.AddServiceEndpoint(contractType, binding, baseAddress);
                SetMetadataPublishing(host);

                host.Open();
                Console.WriteLine("Service started at address: " + baseAddress);
                Console.ReadLine();
                host.Close();
            }
        }

        private static void SetMetadataPublishing(ServiceHost serviceHost)
        {
            ServiceMetadataBehavior smb = serviceHost.Description.Behaviors.Find<ServiceMetadataBehavior>();

            if (smb == null)
            {
                smb = new ServiceMetadataBehavior();
                serviceHost.Description.Behaviors.Add(smb);
            }

            smb.HttpGetEnabled = true;
        }
    }
}

Zdrojový kód klienta:

using System;
using System.ServiceModel;
using Client.Library;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            EndpointAddress address = new EndpointAddress("http://localhost:8080/library");
            BasicHttpBinding binding = new BasicHttpBinding();

            using (LibraryClient libraryClient = new LibraryClient(binding, address))
            {
                Console.Write("Enter keyword: ");
                string keyword = Console.ReadLine();

                string[] result = libraryClient.SearchBooksByTitle(keyword);
                libraryClient.Close();

                PrintResult(result);
                Console.ReadLine();
            }
        }

        private static void PrintResult(string[] result)
        {
            Console.WriteLine("\nResult:");

            foreach (string book in result)
            {
                Console.WriteLine(book);
            }
        }
    }
}

Zdrojový kód upraveného príkladu si môžete stiahnúť tu.



Ing. Marián Košťál (csharp@azet.sk)

V režimu TEXT nejsou povoleny žádné HTML značky. Odstavce jsou vytvořeny automaticky, webové adresy a e-maily jsou převedeny na odkazy. V režimu "HTML" jsou povoleny následující elementy: a b i cite strong em p br code blockquote ul ol li. Redakce si vyhrazuje právo komentáře mazat.








Uživatel

Pro zobrazení informací o svém účtu se musíte přihlásit. Pokud ještě nemáte svůj účet, tak si ho prosím vytvořte!

Reklama
Seriál Odběr článků

Pokud se přihlásíte k odběru zpráv, pošle Vám systém každý týden e-mail se seznamem posledních článků.

Zdrojak .NET Hosting Reklama
 
  Copyright 2002-2007 Devmasters s.r.o., Michal Bláha a autoři | running on Nemesis Publishing | Právní doložka  
TOPlist