360 likes | 478 Views
WCF szolgáltatások telepítése. Roja Csaba – 2011. Október 17. Amiről szó lesz…. Bevezetés a hostolás szükségességéről A szükséges Windows szolgáltatások bekapcsolása/telepítése Hostolás : IIS web szereveren WAS használatával Managed application-nel Windows szolgáltatáskéntként
E N D
WCF szolgáltatások telepítése Roja Csaba – 2011. Október 17.
Amiről szó lesz… • Bevezetés a hostolás szükségességéről • A szükséges Windows szolgáltatások bekapcsolása/telepítése • Hostolás: • IIS web szereveren • WAS használatával • Managedapplication-nel • Windows szolgáltatáskéntként • Service HostFactory • WCF-providedHost
Bevezetés • Eddig: szolgáltatások készítése és kinyilvánítása • A WCF szolgáltatások nem önálló, futtatható alkalmazások. • Hostolásra van szükség. Ehhez a WCF sok lehetőséggel szolgál. • Host: • Konzol alkalmazás • Windows service • Windows Form alkalmazás • WPF alkalmazás • IIS (Internet InformationServices) • WAS (Windows ProcessActivation Service) • Hostolás után a kliensek elérhetik a szolgáltatást és használhatják azt. Managedapplication-nel Web szerveren
Hostolás Web szerveren • IIS / WAS • Előnye: kevesebb feladat hárul ránk (kevesebbet kell kódolni) • Az ilyen módon hostolt szolgáltatások elindulnak az első fogadott kérés alkalmával. • További előnyök a WAS-nál: • Támogatja a HTTP-n kívül a TCP, MSMQ és namedpipes protokollokat.
Hostolás IIS web szerveren I. • A művelet hasonló egy hagyományos web-szolgáltatás hostolásához. • Előnyei: • Magas rendelkezésre állás • Skálázhatóság • A hostolt szolgáltatások képesek párhuzamosan futni korábbi .NET alkalmazásokkal, így lehetőségünk van már létező web szolgáltatásokba történő integrálásra. • Hátránya: • Megkívánja egy IIS web szerver telepítését és konfigurálását. • A IIS 7.0 előtti verziókon hostolt szolgáltatások csak a HTTP protokollt képesek használni. • Számít a verziószám: • IIS 5.1-el hostolt szolgáltatások csak ugyanazt a portot használhatják ez korlátozza a párhuzamosan végrehajtható host folyamatok számát.
Hostolás IIS web szerveren II. • Meg kell győződnünk róla, hogy az IIS megfelelően van-e telepítve és konfigurálva. • IIS telepítése: • VezérlőpultProgramokWin. Szolg. Ki és bekapcs.Internet InformationServices/Webkezelésiezközök/IIS-kezelő konzolOK • Ezáltal az IIS 7.0 verziója települ fel. • IIS konfigurálása: • A telepítés egy default konfigurációt is magába foglal, ami nekünk egyelőre elég. • Ha mégis kéne: az IIS kezelő elérése az inetmgrparanccsal a leggyorsabb.
IIS telepítése és kezelő felülete Telepítés Kezelő felület
Hostolás IIS web szerveren III. • Ha az IIS a .NET keretrendszer után lett telepítve, még egy lépés szükséges: • A WCF Activation komponensek telepítése: • VezérlőpultProgramokWin. Szolg. Ki és bekapcs.Microsoft .NET Framework/WCF HTTP & Non-HTTPActivation
Hostolás IIS web szerveren IV. • Új website készítése: • VS2010FileNewWebsiteWCF Service (C#) • Ami kell de a Visual Studio elintézi: • .svc file létrehozása. • Ennek tartalmaznia kell a @ServiceHost direktívát. • <%@ ServiceHostLanguage="C#" Debug="true" Service=„Service" CodeBehind="~/App_Code/Service.cs" %> • App_Codedirectory létrehozása. • Ez tartalmazza a Service osztályt (Service.cs)(és a hozzá tartozó interface-t (IService.cs)). • A Web.config file-ban a szolgáltatás által használt endpointokat kell megadni. • Ami eltér az IIS-nél: • Nem kell baseAddress-t megadni, mert a címet a Website virtuális directory-ja határozza meg. (Ez a WAS-elhostolt szolgáltatásokra is igaz)
HostolásWAS-el (nem-HTTP protokollokon keresztül.) • WAS (Windows ProcessActivation Service) • Az IIS-hez hasonló hostolást tesz lehetővé. • Az IIS 7.0 részét képezi. • A WAS-el való hostoláshoz nem kell feltétlenül az egész IIS 7.0 csomagot feltelepítenünk. • Támogatott protokollok: • HTTP • TCP • Namedpipes • MSMQ • Hasonlóságok: • Service (.svc) file @ServiceHost direktívával név és a kódnyelv megadásához • App_Code alkönyvtár amelyben megtalálhatók a szolgáltatást leíró kódfileok (szerződések) • Web.config file a konfigurációhoz, abc beállításhoz. Minden használni kívánt végpontnak a system.ServiceModel tag-en belül kell szerepelnie. • Ez eddig nagyon ismerős, de mi a különbség?
HostolásWAS-el • A WAS-en keresztüli hostolás annyit tesz, hogy számítunk egy kérés beérkezésére, még mielőtt az szolgáltatást hostolóapplicationdomain létrejönne. • Alapértelmezetten az applicationdomain 29 óránként kerül újra feldolgozásra. Ez probléma lehet. • Emiatt a WAS PreCall session módú szolgáltatásokhoz előnyös.
HostolásWAS-el • Működése (activation): • Az IIS 7.0 és a WAS Windows NT szolgáltatásokat használ, hogy a nem-HTTP protokollokat kezelni tudják. • Ezek adaptereikkel a portok figyeléséért és a kérések fogadásáért felelősek. • Ha kérés érkezik, azt egy külső process lekezeli (SMSvcHost.exe). • Minden egyes használni kívánt Windows NT szolgáltatásnak futnia kell a host gépen. • Ezek a szolgáltatások:(CPRendszer…Felügyeleti Eszk.Szolgáltatások) (services.msc)
HostolásWAS-el • Ha WAS-elHTTP-től eltérő protokollokat kívánunk használni, A Windows szolgáltatásoknál be kell kapcsolnunk ezt az opciót. • VezérlőpultProgramokWin. Szolg. Ki és bekapcs.Microsoft .NET Framework/WCF HTTP & Non-HTTPActivation
HostolásWAS-el • WAS konfiguráció: • Site binding hozzáadása • %windir%\system32\inetsrv\appcmd.exeset site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='808:*'] • %windir%\system32\inetsrv\appcmd.exesetapp "Default Web Site/<WCF Application>" /enabledProtocols:http,net.tcp • Az első parancs a net.tcpsitebinding-et adja hozzá a %windir%\system32\inetsrv\configdirectory-ban található applicationHost.configfilehoz. • A második parancs az enabledProtocols paraméterben megadott protokollokat engedélyezi a website számára.
Service HostFactory • Mivel a WAS és az IIS 7.0 támogatja a dinamikus aktiválást, lehetőség van saját Service HostFactory-k létrehozására. • A WCF ServiceHostFactory osztályával dinamikusan tudunk példányosítani hostokat, a bejövő kérések függvényében. • Hasznos amikor • eseménykezelőket kell létrehoznunk a szolgáltatások nyitására és lezárására. • egyszerre sok szolgáltatást kell bekonfigurálni. • Létrehozása: • Implementálni kell a ServiceHostFactory osztály CreateServiceHost metódusát.
HostolásManagedApplication-ben • ManagedApplication mint host: • Konzol alkalmazás • Windows service • Windows Form alkalmazás • WPF alkalmazás • Egyszerűbb, kisebb szolgáltatások hostolásához a WCF egy beépített hostot szolgáltat, amely parancssoron keresztül elérhető. • A választás attól függ, hogy • a hostnak mennyire robosztusnak kell lennie, • valamint, hogy milyen típusú kliens alkalmazások fognak hozzáférni a szolgáltatáshoz.
HostolásManagedApplication-ben • Ezt a fajta hostolást hívják self-hosting-nak. • Előnye: • Ez a legrugalmasabb hostolási lehetőség, mert ez a legegyszerűbb és leggyorsabb módja a telepítésnek. • Hátránya: • Ez a legkevésbé robosztus hostolási lehetőség, mert nem szolgáltat magasabb szintű hostolási és kezelő lehetőségeket.
Hostolás konzol alkalmazással I. • Az IIS vagy WAS használatától eltérően, ebben az esetben szükséges hostolási folyamatot vezérlő kódot írni. (self-hosting) • Ezt a „módszert” általában fejlesztési fázis alatt szokták használni. • Működése: • A konzol alkalmazásnak létre kell hoznia és meg kell nyitnia egy ServiceHost objektum példányát. • Ez nyitva és elérhető marad mindaddig, amíg nincs többé rá szükség. • A példányosítás után nyitjuk meg az objektumot, amely egy „openlistener”-t hoz létre a szolgáltatáshoz, valamint engedélyezi, hogy üzeneteket fogadjon.
Hostolás konzol alkalmazással II. staticvoid Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(WhiskeyService))) { host.Open(); Console.WriteLine("The WhiskeyService is ready.\nPress a key to exitifyoucan"); Console.ReadKey(true); host.Close(); } }
Hostolás konzol alkalmazással III. • Még nincs vége, mert • Itt is meg kell határozni egy endpoint-ot a szolgáltatásnak. • Ez kóddal is megoldható éppúgy mint a szolgáltatás • vagy egy konfigurációs fileon keresztül, amelyet mi adunk hozzá a projekthez (App.config). • Ha nem határozunk meg endpoint-ot, a szolgáltatás defaultendpoint-okat fog használni. Ez annyit jelent, hogy minden a szolgáltatás által implementált szerződés báziscíméhez automatikusan létre fog jönni egy endpoint. Így nem kell konfigurációs file sem.
WCF szolgáltatás hostolása Windows szolgáltatással I. • A Windows szolgáltatások akkor hasznosak ha felhasználói felület nélküli, hosszan futó (napok++) WCF szolgáltatásokkal van dolgunk. • Hasznos mert: • „Byusing a Windows service, youcan be surethatthe service host is alwaysavailable” • Egy Windows szolgáltatást be lehet konfigurálni, hogy automatikusan elinduljon, ha az operációs rendszer betölt. • Lehet szüneteltetni, leállítani és újraindítani is a Microsoft Management Console-on (MMC) keresztül.
WCF szolgáltatás hostolása Windows szolgáltatással II. • Azoknak az alkalmazásoknak amelyek, hosszan futó WCF szolgáltatásokat hostolnak, sok közös vonása van a Windows szolgáltatásokkal. • Az ilyen WCF szolgáltatások főleg futtatható szerver állományok, amelyeknek nem érintkeznek közvetlenül a felhasználókkal, ezáltal nincs semmilyen felhasználói felületük. • Ebből kifolyólag, a WCF szolgáltatások Windows service alkalmazásokban történő hostolása egy kézenfekvő módszer, ha hosszan futó, robosztus WCF alkalmazásokat akarunk létrehozni.
WCF szolgáltatás hostolása Windows szolgáltatással III. • A fejlesztők gyakori dilemmája, hogy Windows Service-el, vagy IIS/WAS-en keresztül hostolják a WCF alkalmazásokat. • Windows szolgáltatást akkor érdemes választani, ha: • Explicit aktiválás szükséges. (automatikus, ellentétben az első bejövő üzenet hatására történő dinamikus indítással) • Ha állandóan futó host-ra van szükségünk. (Megbízhatóság) A szolgáltatás csak akkor álljon le, ha azt egy adminisztrátor leállítja a szolgáltatáskezelőn keresztül. (ellentétben a dinamikus indítással, leállítással, amely optimális az erőforrások szempontjából) • Ha használni akarjuk a HTTP-n kívüli protokollokat is (TCP, MSMQ, Namedpipes)
WCF szolgáltatás hostolása Windows szolgáltatással • Windows szolgáltatást éppúgy létrehozhatunk Visual Studioban egy mintával mint egy konzol alkalmazást. • Folyamata: • Projektlétrehozás Windows Service mintával • Referenciák hozzáadása a projekthez: • System.ServiceModel • System.ServiceProcess • System.Configuration.Install (a project telepítőhöz kell)
WCF szolgáltatás hostolása Windows szolgáltatással • Hivatkozások hozzáadása: • usingSystem.ServiceModel; • usingSystem.ComponentModel; • usingSystem.Configuration.Install; • usingSystem.ServiceProcess; (Az OnStart és OnStop metóduskezelők automatikusan létrejönnek a projekt létrehozásakor. Ezenfelül az alkalmazás őse a ServiceBase osztály, amely elengedhetetlen, ha Windows szolgáltatást akarunk létrehozni.)
WCF szolgáltatás hostolása Windows szolgáltatással • ServiceHost változó létrehozása publicServiceHostserviceHost = null; • ServiceNamepropery beállítása és entrypoint megadása (ha eddig nem volt) publicVodkaWindowsService() { ServiceName = "Vodka Windows Service"; } publicstaticvoid Main(string[] args) { ServiceBase.Run(newVodkaWindowsService()); }
WCF szolgáltatás hostolása Windows szolgáltatással • Az OnStart metódus megírása, amely a ServiceHost egy példányát fogja létrehozni. protectedoverridevoidOnStart(string[] args) { if(serviceHost != null) { serviceHost.Close(); } serviceHost = newServiceHost(typeof (VodkaService)); serviceHost.Open(); }
WCF szolgáltatás hostolása Windows szolgáltatással • Az OnStop metódus megírása, amely a ServiceHost példány bezárásáért felel. protectedoverridevoidOnStop() { if(serviceHost != null) { serviceHost.Close(); serviceHost = null; } }
WCF szolgáltatás hostolása Windows szolgáltatással • Ahhoz, hogy a szolgáltatást Windows service-ként tudjuk telepíteni, létre kell hoznunk egy ProjectInstaller osztályt. Ennek le kell származnia az Installer osztályból és meg kell jelölni a RunInstaller attribútummal. [RunInstaller(true)] publicclassProjectInstaller : Installer { privateServiceProcessInstallerprocess; privateServiceInstaller service; publicProjectInstaller() { process = newServiceProcessInstaller(); process.Account = ServiceAccount.LocalSystem; service = newServiceInstaller(); service.ServiceName = "Vodka Windows Service"; Installers.Add(process); Installers.Add(service); } }
WCF szolgáltatás hostolása Windows szolgáltatással • Konfiguráció az App.configfileban (hozzá is kell adni a projekthez). Tartalmaznia kell egy baseaddress-t és minden endpoint-ot amely a WCF szolgáltatáshoz szükséges. • Fordítás • Telepítés command-lineal: • installutil C:\Projectsxyz\bin\Debug\VodkaWindowsService.exe • Telepítés után a szolgáltatás elérhető a Service Control Manager-en keresztül.
Telepítés WCF-providedhostal • Egyszerűbb, kisebb szolgáltatások gyors telepítéséhez a WCF egy beépített hostot szolgáltat, amely parancssoron keresztül elérhető. • Például: • Egy SimpleService nevű szolgáltatást szeretnénk hostolni. • A szerződés és az implementációs osztályok a SimpleService.dll-be lettek lefordítva. • A konfig file neve App.config • Comman-line: • WcfSvcHost.exe /service:C:\Projectxyz\bin\SimpleService.dll /config:C:\Projectxyz\App.config
Telepítés WCF-providedhostal II. • WCF Service Host dialógusablak: információkat jelenít meg a betöltött szolgáltatásról. • Innentől kezdve már hozzáférhetünk a szolgáltatáshoz kliensen keresztül.