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 Service Host Factory WCF-provided Host
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 Information Services) WAS (Windows Process Activation Service) Hostolás után a kliensek elérhetik a szolgáltatást és használhatják azt. Managed application-nel A WAS előnyei: Nincs szükség web szerverre. Támogatja a HTTP-n kívül a TCP, MSMQ és named pipes protokollokat. El kell tudni döntenünk mikor melyik hostolási lehetőséget (IIS/WAS/MA) és konfigurációs beállításokat válasszuk. 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 named pipes protokollokat. Kevesebb kódolás: nem kell lekódolni az automatikus processz feldolgozást, vagy azt a folyamatot ami biztosítja a host állandó futását. Ezenfelül a host üzenetekkel történő aktiválása is további előnyökkel jár. advantage of IIS features, such as process recycling, idle (tétlen) shutdown, process health monitoring, and message-based activation. Process recycling IIS automatically refreshes Web applications by restarting their worker processes. Process recycling keeps problematic applications running smoothly, and is an especially effective solution in cases where it is not possible to modify the application code. Process Health Monitoring The World Wide Web Publishing Service (WWW service) monitors the health of worker processes by periodically pinging them to determine their responsiveness. If a worker process fails to respond to a ping, the WWW service terminates the worker process and creates another worker process as a replacement. Additionally, the WWW service maintains a communication channel to each worker process, and it can detect a drop in the communication channel, which indicates a worker process failure. When a worker process fails on its own accord, the WWW service starts another worker process in its place. Message-Based Activation One of the most important features IIS provides your WCF services is message-based activation. ServiceHost instances need not be open prior to processing requests for a given endpoint. Instead, the World Wide Web Publishing Service (WWW Service) is responsible for ensuring a worker process is present to handle requests. Then, when IIS forwards requests for a particular .svc endpoint to the worker process, the service model initializes the corresponding ServiceHost (if necessary), before dispatching the request through the channel stack.
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. Windows 7en már elképzelhető, hogy minden beépített
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 Information Services/Webkezelési ezkö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 inetmgr paranccsal a leggyorsabb.
IIS telepítése és kezelő felülete
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-HTTP Activation
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. <%@ ServiceHost Language="C#" Debug="true" Service=„Service" CodeBehind="~/App_Code/Service.cs" %> App_Code directory 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-el hostolt szolgáltatásokra is igaz) A @ServiceHost direktíva azonosítja a szolgáltatást, és tartalmaznia kell azokat az attribútumokat amelyek azonosítják a kódnyelvet és a szolgáltatás nevét. Az App_Code directoryban vannak a szolgáltatáshoz szükséges kódfileok. Itt található mind a Service Contract mind a Service implementációja. Endpoint konfiguráció a Web.config fileban. Ezen információk alapján a WCF létrehoz egy endpointot, amelyen keresztül a kliens alkalmazások kommunikálhatnak.
Hostolás WAS-el (nem-HTTP protokollokon keresztül.) WAS (Windows Process Activation 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 Named pipes 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? Alapértelmezetten a Net.Msmq Listener Adapter le van állítva. Elindításához először telepíteni kell az MSMQ szerver core-t. A named pipe is a named, one-way or duplex pipe for communication between the pipe server and one or more pipe clients. MSMQ is essentially a messaging protocol that allows applications running on separate servers/processes to communicate in a failsafe manner. A queue is a temporary storage location from which messages can be sent and received reliably, as and when conditions permit
Hostolás WAS-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ó application domain létrejönne. Alapértelmezetten az application domain 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ás WAS-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ás WAS-el Ha WAS-el HTTP-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-HTTP Activation
Hostolás WAS-el WAS konfiguráció: Site binding hozzáadása %windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" - +bindings.[protocol='net.tcp',bindingInformation='808:*'] %windir%\system32\inetsrv\appcmd.exe set app "Default Web Site/<WCF Application>" /enabledProtocols:http,net.tcp Az első parancs a net.tcp sitebinding-et adja hozzá a %windir%\system32\inetsrv\config directory-ban található applicationHost.config filehoz. A második parancs az enabledProtocols paraméterben megadott protokollokat engedélyezi a website számára.
Hostolás WAS-el
Service Host Factory Mivel a WAS és az IIS 7.0 támogatja a dinamikus aktiválást, lehetőség van saját Service Host Factory- 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. A CreateServiceHost metódus felelős az új host példány visszaadásáért.
Hostolás Managed Application-ben Managed Application 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ás Managed Application-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. Legrugalmasabb mert ezt a legegyszerűbb telepíteni. (It requires the least infrastructure to deploy.)
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 „open listener”-t hoz létre a szolgáltatáshoz, valamint engedélyezi, hogy üzeneteket fogadjon.
Hostolás konzol alkalmazással II. static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(WhiskeyService))) host.Open(); Console.WriteLine("The WhiskeyService is ready.\nPress a key to exit if you can"); Console.ReadKey(true); host.Close(); } Ezt a kódot kell hozzáadnunk egy egyszerű console alkalmazás projekthez. Ezzel példányosítunk egy ServiceHost objektumot, majd megnyutjuk azt. Ezzel létrehozunk egy open listener-t a szolgáltatáshoz, ami engedélyezi az üzenetek fogadását.
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 default endpoint-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: „By using a Windows service, you can be sure that the service host is always available” 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, Named pipes)
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: using System.ServiceModel; using System.ComponentModel; using System.Configuration.Install; using System.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 public ServiceHost serviceHost = null; ServiceName propery beállítása és entrypoint megadása (ha eddig nem volt) public VodkaWindowsService() { ServiceName = "Vodka Windows Service"; } public static void Main(string[] args) ServiceBase.Run(new VodkaWindowsService());
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. protected override void OnStart(string[] args) { if(serviceHost != null) serviceHost.Close(); } serviceHost = new ServiceHost(typeof (VodkaService)); serviceHost.Open(); 6. Ezáltal a ServiceHost meg fog nyílni, így elérhetővé válik az összes kliens számára.
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. protected override void OnStop() { 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)] public class ProjectInstaller : Installer { private ServiceProcessInstaller process; private ServiceInstaller service; public ProjectInstaller() process = new ServiceProcessInstaller(); process.Account = ServiceAccount.LocalSystem; service = new ServiceInstaller(); service.ServiceName = "Vodka Windows Service"; Installers.Add(process); Installers.Add(service); } Az Installer osztály a System.ComponentModel része
WCF szolgáltatás hostolása Windows szolgáltatással Konfiguráció az App.config fileban (hozzá is kell adni a projekthez). Tartalmaznia kell egy base address-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-provided hostal 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-provided hostal 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.
Összefoglalás, előnyök, hátrányok Hosting Environment Common Scenarios Key Benefits and Limitations IIS 5.1, IIS 6.0 Running a WCF service side-by-side with ASP.NET content on the Internet using the HTTP protocol. Process recycling. Idle shutdown. Process health monitoring. Message-based activation. HTTP only. Windows Process Activation Service (WAS) Running a WCF service without installing IIS on the Internet using various transport protocols. IIS is not required. Works with HTTP, TCP, named pipes, and MSMQ. IIS 7.0 Running a WCF service with ASP.NET content. Running a WCF service on the Internet using various transport protocols. WAS benefits. Integrated with ASP.NET and IIS content.
Összefoglalás, előnyök, hátrányok Hosting Environment Common Scenarios Key Benefits and Limitations Managed Application ("Self-Hosted") Console applications used during development. Rich WinForm and WPF client applications accessing services. Flexible. Easy to deploy. Not an enterprise solution for services. Windows Services (formerly known as NT services) A long-running WCF service hosted outside of IIS. Service process lifetime controlled by the operating system, not message-activated. Supported by all versions of Windows. Secure environment.
Köszönöm a figyelmet!