Webbtjänster med API er

Relevanta dokument
Webbtjänster med API er

Webbtjänster med API er

Webbtjänster med API er

Webbtjänster med API er

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Distribuerade affärssystem

Webbteknik II. Föreläsning 4. Watching the river flow. John Häggerud, 2011

1 Comparator & Comparable

TUTORIAL: SAMLING & KONSOLL

Kärnfunktionalitet. Middleware. Samverkande system. Service Oriented Architecture. Kommunikationsmekanismer. Tjänsteorienterade arkitekturer

Kopiering av objekt i Java

TUTORIAL: KLASSER & OBJEKT

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

1ME323 Webbteknik 3 Lektion 6 API. Rune Körnefors. Medieteknik Rune Körnefors

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Facit Tentamen 17/3 Informationsinfrastruktur

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Systemutvecklare SU14, Malmö

XML-produkter. -Registret över verkliga huvudmän (RVH) Teknisk handledning för webbtjänst mot RVH (Web Services) Datum: Version: 1.

Classes och Interfaces, Objects och References, Initialization

3) Routern kontrollerar nu om destinationen återfinns i Routingtabellen av för att se om det finns en väg (route) till denna remote ost.

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

Mål med lektionen! Repetera och befästa kunskaperna.

Spelprogrammering med XNA och MonoGame

Mål med lektionen! Veta kursmålen. Ha kännedom om några av de grundläggande begreppen.

Konfigurera TP-link CPE210

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Objektorienterad programmering. Grundläggande begrepp

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Services + REST och OAuth

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

JavaScript in SharePoint and not just for Apps. Wictor Wilén

Öppna APIer - för att få allt det där gjort du annars inte hinner

Att skriva till och läsa från terminalfönstret

ID1004 Laboration 4, November 2012

Inlämningsuppgift 11e Nätvärksskrivare

Hur fungerar en IP uppkoppling till ETS? KNX Sweden KNX: The worldwide STANDARD for home & building control

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Ladda upp filer fra n PLC till PC

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Android översikt. TDDD80 Mobila och sociala applikationer

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Innehåll. Dokumentet gäller från och med version

Testdriven utveckling av Web Services. Ole Matzura

Övningar - Datorkommunikation

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Objekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018

Alla rättigheter till materialet reserverade Easec

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Statistik över heltal

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Föreläsning 5-6 Innehåll

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Laborationshandledning Laboration 02


Lab5 för prgmedcl04 Grafik

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Swedbank Mobile Loadtesting. LoadRunner Mobile App protocol

WEBBSERVERPROGRAMMERING

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Ajax TruClient. Erfarenheter, tips och trix från Swedbank IT. Christian Gerdes Performance Engineer, LIGHTS IN LINE AB

1 Klasser och objektorientering Vad är objektorientering?

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Utförande: I exemplet så kommer vi att utgå från att man gör laborationen i en Virtuell miljö (Virtualbox).

Win95/98 Nätverks Kompendium. av DRIFTGRUPPEN

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Totalt antal poäng på tentamen: 50 För att få respektive betyg krävs: U<20, 3>=20, 4>=30, 5>=40

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Alla rättigheter till materialet reserverade Easec

Laboration 1 - Grunderna för OOP i Java

Objektorienterad programmering

Klasshierarkier - repetition

Objektorienterad programmering

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

Sammansatta datatyper Generics: Parametrisk polymorfism

Programmering B med Visual C

Föreläsnings 9 - Exceptions, I/O

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Programutvecklingsprojekt Projektgrupp Elvin. Detailed Design Document

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Laboration 2 RESTful webb-api

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Installation xvis besökssystem, Koncern

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Referensarkitektur: T-boken, RIV-TA och tjänstekontrakt Referensimplementationen av T-boken: SKLTP

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Transkript:

Webbtjänster med API er

Mål med lektionen! Titta på WCF klienter och förstå dessa.

Vad lektionen omfattar WCF Clients

Komma åt endpoints Vi har pratat om WCF i stort och vi har pratat om hur vi bygger tjänsten och hur vi hostar den. Nu är det dags att prata om klienten. Då behöver vi först komma åt metadatan och då kan vi göra det på två sätt, metadatan finns i WSDL filen och via denna så kan vi generera två saker:

Komma åt endpoints

Vad vi får av WSDL Den ger en genererad kod fil som innehåller kontrakt definitionerna. Den ger en genererad konfigurations fil som vi kan använda som app.config fil, denna innehåller de endpoints som vi behöver.

Kort övning svcutils.exe Öppna EvalServicelösningen och kör ConsoleHost applikationen. Öppna sedan VisualStudio commandprompt, i kommandoprompten Stega er sedan fram till den mapp där ni har er lösning. Skriv sedan: svcutil http://localhost:8080/evals/mex. Tryck enter.

Kort övning svcutils.exe & wcf klient I EvalService lösningen skapa ett nytt konsol projekt som ni döper till Client. Släng app.config filen, högerklicka på projektet och välj lägg till existerande items. Lägg till de två filerna som ni genererade nyss. Referera in System.ServiceModel och System.Runtime.Serialization Döp om output.config till app.config Kompilera.

Programmera kanaler Vi har nu fått tag på våra endpoints och genom att använda WCF client-side programming model så skall vi bygga en kanal som är kapabel att skicka ett meddelande till vår tjänst. Att skapa en kanal består egentligen av några steg:

Programmera kanaler 1.Skapa och konfigurera en ChannelFactory 2.Skapa en faktisk instans av en kanal 3.Gör metodanrop genom kanalen 4.Stäng eller anropa Abort

Hur det kan se ut

Client-side app.config

Kanalens lifscykel Vi skapar en kanalgenom att anropa CreateChannel metoden på ChannelFactory, när vi gör det så bygger WCF den underliggande runtime logiken för att kunna skicka meddelanden över nätverket till tjänsten. Den gömmer det mesta för oss genom att enkelt returnera ett objekt som implementerar vårt Service Kontrakt. Så allt ni interfacar med är vårt service kontrakt. Vi gör helt enkelt enbart metod anrop som översätts till meddelanden som skickas genom den underliggande kanal stacken. Alla kanalinstanser implementerar också ett interface som heter IClientChannel som ger oss Close och Abort

Close() gör en behaglig/ordentlig nedstängning Den väntar för anrop som är in-progress för att de skall bli färdiga innan den stängs. Kan bli en utdragen process (det finns async varianter). Den stänger ned underliggande nätverks resurser. Kan kasta CommunicationException & TimeOutException Abort() sliter ner allt i klientkanalen omedelbart. Aborts in-progress anrop och stänger ned kanalen bums!

Liten klient övning Skapa nu en channelfactory och en channel samt en instans av Eval som ni ger lite värden. Stoppa in er eval instans i ett anrop till SubmitEval på en channel instans. Ta emot ett anrop ifrån GetEvals och skriv ut detta. Stäng kanalen.

Undvika använda Channelfactory Alla kanaler implementerar IClientChannel där vi har bla Close och Abort, men vi måste casta objektet till IClientChannel för att kunna använda dem/anropa dem. När vi genererar kod så genereras det även en proxyklass som gör det hela lite lättare för oss. Det genereras en sådan här för varje ServiceContract typ som vi har. Namnet byggs alltid upp enligt följande: ServiceContract namn (minus I) + Client.

Kort övning igen Ta fram samma klient ifrån EvalService lösningen och kommentera ut skapandet av Factory och skapandet av channel. Skapa nu en ny channel som är av proxy klass typen. Sedan när ni är klara med metod anropen till tjänsten så anropar ni close direkt på channeln istället för att casta den.

Konfigurering av vår klient kanal Vår klient kanal kan konfigureras på både bindings och behaviors. Några saker som kan konfigureras på bindningen: Skicka TimeOut värde (detta påverkar när det skall ske ett TimeOutException). Specifika transport/protokoll inställningar (behöver oftast vara i synk med servicen) Klient behaviors kallas endpoint behavior i WCF ClientViaBehavior är ett exempel som vi kan använda om vi vill använda oss av auto-routing.

Config exempel Ökar timeout med 5 min Basic auth över SSL

Config exempel Adressen som du vill att de utgående meddelandena skall routas genom

Exceptions Där är i huvudsak två typer av exceptions som vi behöver vara beredda på/medvetna om. Den ena är CommunicationException som är en slags basklass för exceptions. Vilket gör att vi kan göra en Gona catch em all och fånga exceptions av denna typ. Men det finns ett annat exception som du nog gärna vill fånga och det är FaultException. TimeOutException denna typ ärver inte av CommunicationException, och skickas när vi överskrider Timeout värdet.

Demo exceptions

Asynkrona WCF tjänster WCF gör det möjligt att använda tjänsterna asynkront, när vi använder svcutils.exe så skall vi använda /async switchen när vi genererar koden. Vilket ger oss Begin/End anropsmetoder för varje operation. Om vi använder oss av Add Service Reference featuren så finns det en checkbox/radiobtn att klicka i för detta. Sedan.Net WCF 3.5 så har de lagt till en simplifierad asynkron programmerings modell som genererar dessa direkt åt oss, där finns metodanrop som slutar på Async samt events till dessa.

Async övning Ta bort EvalService.cs samt kommentera bort allt i app.config som finns i taggarna bindings och client. Ta bort referenserna för System.ServiceModel och System.Runtime.Serialization. Högerklicka på References och välj Add Service Reference skriv in adressen http://localhost:8080/evals/meta samt se till att ni genererar asynkrona metoder. Ni kan även se till att ändra collection types till System.Collections.Generic.List för collection types och ändra i er kod. Dvs ta bort arrayen och sätt dit en lista samt ändra lenght till count.

Async övning Istället för att anropa GetEval() så skall ni anropa GetEvalAsync() och på raden innan skall ni anropa GetEvalCompleted som får resultatet plus vad det var innan av new Eventhandler<GetEvalCompletedEventArgs>(channel_GetEvalCompl eted); Glöm inte att tabba för att få metoden skapad åt er, i denna skall ni skriva ut e.result.count till konsolen. Innan ni stänger kanalen i try satsen så lägg in en konsol utskrift som säger waiting och en Console.ReadLine

Dynamiska endpoints Genom att använda MEX så tillåts vi att hämta metadata programmatiskt. WCF tillhandahåller bla två klasser som gör detta. En som heter MetadataResolver och en som heter MetadataExchangeClient. Båda gör i huvudsak samma sak, de går upp till tjänsten vid körning med hjälp av MEX protokollet och ber om metadatan. Tjänsten skickar då metadatan i svaret som sedan dessa två klasserna använder informationen i någon form av objektmodell.

Dynamiska endpoints Om man vill ta den informationen som returneras och översätta den till en uppsättning endpoints som vi sedan kan använda då är det MetadataResolver klassen vi vill använda. Detta kan vi sedan programmatiskt inspektera om vi vill och bygga en kanalstack baserat på våran valda endpoint. Detta ger oss lite andra möjligheter, vi behöver inte ha endpoint information som lagrats statiskt antingen i kod eller i konfigurationsfilen.

Dynamiska endpoints Istället kan klienten alltid dynamiskt hämta metadatan vid körning. Det fungerar ungefär som så att när klienten startar så ber den om metadata, laddar ner detta, väljer en endpoint och sedan kommunicerar med tjänsten. För om tjänsten skulle behöva göra ändringar över tiden, så kommer klienterna/klienten inte gå sönder eftersom nästa gång den startar så hämtar den ny information.

Mex övning Vi skall nu modifiera EvalService för att få denna dynamisk. Först gå till EvalServiceLibrary-> EvalService.cs och kommentera bort Sleep. Bygg nu EvalServiceLibrary och kör exe filen so att ConsoleHost ligger och väntar. Skapa först en utskrift som säger att vi hämtar endpoints via mex Sedan skapa en instans av ServiceEndpointsCollection som tilldelas resultatet ifrån MetadataResolver.Resolve(typeof(service kontraktet), new EndpointAddress( adressen till mex ));

Mer mex övning Loopa sedan igenom för varje ServiceEndpoint som finns i samlingen och ha detta runt om era try-catch. Sedan skall vi ändra lite i try delen, kanalen skall nu istället använda en konstruktor som tar två parametrar. Dessa två är endpointens bindning och dess adress. Kommentera ut asynk anropet och ta fram det gamla som returnerade en lista som vi skrev ut count på (antalet evals).

REST vs SOAP REST s starka sida är när du exponerar ett publikt API över internet för att hantera CRUD operationer på data. REST är fokuserat på att komma åt namngivna resurser genom ett konsistent interface. SOAP har sitt egna protokoll och fokuserar på exponera bitar av applikationslogik (inte data) som tjänster. SOAP fokuserar på namngivna operationer, varje operation implementerar lite business logik genom olika interfaces.

REST vs SOAP Även om SOAP ofta refereras som Web Services så är det en del som tycker att det är en felaktig betäckning, REST förser äkta Web Services genom URI s och HTTP. Eftersom REST är standard HTTP så är det mycket enklare (enligt en del) att skapa klienter, utveckla API er och dokumentationen brukar vara lättare att förstå, och det är inte många saker som REST inte gör enklare eller bättre än SOAP.

REST vs SOAP REST tillåter många olika data format medans SOAP endast tillåter XML. Detta kan en del tycka att det ger mer komplexitet till REST eftersom du behöver hantera multipla format. JSON är oftast ett bättre val av/för data och den parsar mycket snabbare. REST har lite bättre prestanda och skalbarhet, REST läsningar kan cachas det kan inte SOAP läsningar.

Varför SOAP? Medans SOAP stödjer SSL (precis som REST) så stödjer det även WS-Security vilket lägger till en del säkerhets funktioner som man annars bara ser i större företags lösningar (enterprise lösningar). Och stödjer identitet genom mellanhänder (tredjepart), inte bara point to-point (SSL). Den förser också med en standard implementation för dataintegritet och datasekretess. Genom att kalla det enteprise gör det inte mer säkert, det bara stödjer en del säkerhetsverktyg, som typiska internet tjänster inte har någon större nytta av utan endast behövs i några få fall

Varför SOAP? Behöver du ACID transaktioner för en tjänst då behöver du använda SOAP, medans REST inte stödjer transaktioner lika omfattande och inte stödjer ACID. Lyckligtvis så är nästan aldrig ACID transaktioner över internet vettiga, medans REST begränsas av HTTP som själv inte kan ge två-fas commit över distribuerade transaktions resurser, men SOAP kan. Internet appar i allmänhet behöver inte denna nivå av transaktions tillförlitlighet, vilket enterprise appar ibland gör.

Varför SOAP? REST har ingen standard för meddelandesystem och förväntar sig att klienterna hanterar kommunikationsfel genom att försöka igen. SOAP har succesful/retry logik inbyggd och ger end-to-end tillförlitlighet även genom SOAP mellanhänder.