Edurep:Implementaties/Dotnet

Uit Kennisnet Developers Documentatie
Ga naar: navigatie, zoeken

Deze pagina laat de verschillende stappen zien die nodig zijn voor een succesvolle dotnet-implementatie van de Edurep SRW Webservice. In dit voorbeeld zal er een webservice client worden geïmplementeerd in C# op basis van de .NET SDK met behulp van de command line tools wsdl.exe en csc.exe.

WebService Client Genereren

Met de wsdl.exe tool is het eenvoudig mogelijk om C# webservice client code te genereren. De aanroep "wsdl.exe edurep.wsdl diagnostics.xsd" zorgt ervoor dat het C# bestand SRWService.cs wordt gegenereerd waarin de zogenaamde webservice stubs worden gegenereerd. Met behulp van de classes in dit bestand is het eenvoudig om een webservice te implementeren.

In de distributie is in de dotnet directory als voorbeeld het DotNetWebServiceTest.cs-bestand gemaakt waarin met de volgende 3 stappen de webservice wordt aangeroepen:

  1. Een binding naar de webservice wordt verkregen door de constructor van SRWService aan te roepen.
  2. Een zoek-request wordt gecreëerd waarin de zoekopdracht kan worden vastgelegd. Vervolgens worden daarin de verschillende zoektermen etc. gespecificeerd.
  3. Uiteindelijk kan de webservice worden aangeroepen met de zoekmethode en wordt een zoekresponse verkregen waaruit de resultaten kunnen worden verkregen.

In C# code ziet dat er als volgt uit:

SRWService webService = new SRWService();
// Specificeer de webservice URL.
webService.Url = "<nowiki>https://wszoeken.edurep.kennisnet.nl/edurep/srwns</nowiki>";
// Als er een proxy is, specificieer die dan als volgt:
// WebProxy proxyObject = new WebProxy("<nowiki>http://proxy.domain.com:3128</nowiki>", false);
// webService.Proxy = proxyObject;
searchRetrieveRequestType req = new searchRetrieveRequestType();
req.query = "water";
req.version = "1.2";
searchRetrieveResponseType res = webService.SearchRetrieveOperation(req);

De C# bestanden zijn nu te compileren tot een executable met het commando "csc.exe DotNetWebServiceTest.cs SrwClientWebService.cs". Dit zal resulteren in de executable DotNetWebServiceTest.exe die direct vanaf de command line kan worden gestart.

Foutafhandeling

Bij het benaderen van de webservice kunnen er systeemfouten ontstaan. Bij een webservice worden zulke fouten als een SOAP Fault naar de client gestuurd. Bij een C# implementatie worden de SOAP Faults gemapped op een SoapException die beschikbaar is in System.Web.Services.Protocols.

Bij het aanroepen van een webservice moet dan met een try/catch block eventuele SoapException fouten worden opgevangen. In een SoapException is in ieder geval altijd een foutcode en foutbericht aanwezig. De structuur van de foutafhandeling ziet er dan als volgt uit:

try {
  // … hier wordt de webservice aangeroepen.
}
catch (SoapException error) 
{
  Console.WriteLine("Er is een SOAP Fault opgetreden.");
  Console.WriteLine("Fault code is: " + error.Code.Name);
  Console.WriteLine("Fault message is: " + error.Message);
  // .. Onderneem hier de benodigde acties om de fout af te handelen.
}

Proxy Configuratie

Als de webservice via een proxy moet worden benaderd, dan moeten er in een C# .NET omgeving een aantal settings worden geconfigureerd. In de broncode zet de GlobalProxySelection.Select naar een nieuw WebProxy-object. Deze setting is globaal voor de applicatie en heeft dus effect op alle requests vanaf de betreffende applicatie. In C# ziet dit er als volgt uit:

using System.Net; // bevat de GlobalProxySelection class
...
Uri proxyURI = new Uri("<nowiki>http://proxy.domain.com:3128</nowiki>");
GlobalProxySelection.Select = new WebProxy(proxyURI);

Alternatief kan in de source code de Proxy property van het client object naar een nieuw WebProxy-object worden gezet. Deze setting heeft alleen effect op de requests van het betreffende object:

using System.Net; // bevat de WebProxy class
...
// Create an instance of the Web Service
SRWService webService = new SRWService ();
// Zet de HTTP proxy.
WebProxy proxyObject = new WebProxy("<nowiki>http://proxy.domain.com:3128</nowiki>", false);
webService.Proxy = proxyObject;

De .NET Voorbeelden Gebruiken

In de distributie zijn de op deze pagina beschreven voorbeelden opgenomen in de cs-test directory. Er is ook een build.bat script dat de C# code zal compileren en vervolgens de executable zal bouwen. Het DotNetWebServiceTest.cs bestand kan een goed startpunt zijn voor een eigen C# implementatie van de SRU/SRW interface.