Standaarden:Edukoppeling/Proefopstelling/Uitvoering

Uit Kennisnet Developers Documentatie
< Standaarden:Edukoppeling‎ | Proefopstelling
Versie door Vankrimpen01 (overleg | bijdragen) op 15 dec 2015 om 14:57 (→‎WSDL naar Proxy Class)
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen

Opzet

TC

Java implementatie

.Net implementatie

OSOTC-Client .NET is een client/server implementatie in C#.NET dat als voorbeeld dient voor de communicatie met het OSO (Overstapservice Onderwijs) Traffic Center en de Bron- en Doelsystemen binnen het OSO domein. OSOTC-Client .NET implementeert globaal de volgende functionaliteiten; - Globale communicatie met het Traffic Center (PingRequest, Sessie starten, Sessie afsluiten, Registratie aanleverpunt); - Communicatie met een Bronsysteem vanuit de rol van Doelsysteem (DocumentRequest); - Communicatie met een Doelsysteem vanuit de rol van Bronsysteem (aanleveren van Dossier); - Communicatie met het Traffic Center vanuit de rol als Bronsysteem (SessieControle).


Voor alle bovenstaande functionaliteiten wordt gebruik gemaakt van SOAP Messaging tussen de verschillende actoren. Authenticatie vindt plaats middels OSO-Certificaten die over TLSv1.2 worden uitgewisseld. Aanvullende informatie over OSO kan gevonden worden op de OSO Wiki van Stichting Kennisnet.

Ontwikkeling

WSDL naar Proxy Class

Voor de ontwikkeling van de applicatie is de WSDL van het Traffic Center als uitgangspunt genomen. De WSDL wordt aangeboden via een TLS/SSL beveiligde verbinding, waar de standaard .NET utilities niet (eenvoudig) bij kunnen. Het is daarom aan te raden de WSDL eerst te downloaden en lokaal op te slaan.


Voor het omzetten van een WSDL naar gegenereerde code zijn uit de .NET toolset grofweg twee utilities beschikbaar; wsdl.exe en svcutil.exe. De utility wsdl.exe zet een WSDL om in een webservice, waarbij de nieuwe class SoapHttpClientProtocol overerft. Het resultaat kan gebruikt worden als ASMX webservice. De utility svcutil.exe zet een WSDL om in een WCF proxy class (interface), die gebruikt kan worden door webservices door de interface te implementeren en de class SoapHttpClientProtocol te overerven. Omdat het nieuwere WCF door Microsoft is aangemerkt om ASMX services te vervangen, is voor de ontwikkeling van deze applicatie gekozen om de webservices middels WCF te implementeren. De gebruikte commando voor de utility is als volgt:

svcutil.exe /mc /syncOnly overstap.wsdl

In de applicatie is de gegenereerde class niet één-op-één overgenomen. De class is hernoemd naar IOverstapService.cs, onder de juiste namespace (OSOTC_Client.OverstapService) gevoegd, van de gedefinieerde methodes is alleen DocumentRequest overgenomen (omdat de overige methodes alleen door het Traffic Center worden geïmplementeerd), de methodes eindigend op een 1 hernoemt naar meerzeggende varianten (bv. documentRequest1() naar documentRequestWrapper()) en de enum VerstrekkingsUitkomsten is handmatig toegevoegd omdat deze niet werd herkend door de svcutil.exe utility.

Implementatie Doelsysteem

De applicatie is opgezet als een Visual C# / ASP.NET Web Application. De standaard opbouw van deze applicatie template is gevolgd voor de implementatie als Doelsysteem; het systeem dat bij het Traffic Center een sessie initieert, bij een Bronsysteem een dossier ophaalt, en bij het Traffic Center de sessie afsluit. De implementatie is vastgelegd in de HomeController.cs en in de Views. Vanuit de HomeController.cs wordt de class OverstapService.cs aangeroepen voor de communicatie met het Traffic Center en het (beoogde) Bronsysteem. De OverstapService.cs implementeert de proxy class / interface IOVerstapService.cs en overerft SoapHttpClientProtocol. De OverstapService.cs biedt tevens de functionaliteiten om de OSO clientcertificaat in te lezen en te gebruiken bij de communicatie t.b.v. de authenticatie. Mede voor deze initialisatie en tevens wegens sessiebeheer richting het Traffic Center is de OverstapService.cs geïmplementeerd als een Singleton.

Er is één WSDL beschikbaar voor alle systemen binnen het OSO domein (Traffic Center, Bronsystemen en Doelsystemen). Als Doelsysteem dient de applicatie eerst aan het Traffic Center het opvragen van een Dossier bij een Bronsysteem aan te melden alvorens het Dossier bij een Bronsysteem kan worden opgehaald. Dit betekent dat de proxy class voor twee verschillende doelen moet worden ingezet (Traffic Center en Bronsysteem). In de code is dit opgelost door een DocumentRequest aan het Bronsysteem uit te voeren met de aanvullende functie InvokeWithUrl(), dat tijdelijk een nieuw Object initialiseert op basis van de class Overstap, deze initialiseert met dezelfde certificaatgegevens maar met een ander targetUrl. De opgehaalde DocumentResponse wordt vervolgens weer teruggegeven via de Overstap Singleton aan de HomeController. Het Doelsysteem is opgebouwd met formulieren waarbij parameters handmatig kunnen worden ingevuld. Dit biedt de vrijheid om de applicatie in te zetten voor testwerkzaamheden. De authenticatie van het Doelsysteem, gebaseerd op een OSO-certificaat, kan niet binnen de draaiende applicatie worden gewijzigd. De configuratie hiervan is vastgelegd in de Web.config, waarbij het certificaat als .pfx of .p12 in de applicatie-directory dient te worden geplaatst. De configuratie hiervan vindt zodoende plaats buiten de IIS configuratie.

Implementatie Bronsysteem

De implementatie van het Bronsysteem is gerealiseerd in de Bronservice.svc. De Bronservice class implementeert eveneens de proxy class / interface IOVerstapService.cs en ook overerft deze de class SoapHttpClientProtocol. De Bronservice implementeert alleen de functie document() t.b.v. een documentRequest. Bij een ontvangen request wordt bij het Traffic Center een sessiecontrole uitgevoerd. Daarnaast wordt het request getoetst tegen de gebruikte client certificaat. Als alles goed is verlopen, en het dossier van de bevraagde bsn beschikbaar is (061463905, 074200689, 241865542, 540258209, 690069212), wordt deze middels een DocumentResponse teruggegeven. De configuratie van de Bronservice is geheel opgenomen in de Web.config.