Vanavond (27 maart 2018) door met module 7 van de C# Jump Start Video, interacting with the file system - leveraging web services. Oftewel hoe je met het bestandssysteem kunt werken, bestanden aanpassen, webservices, REST-services en serialisatie en als afsluiting (het grootste deel) asynchroon programmeren.
Waarom schrijf je data weg en lees je het? Om bestaande gegevens aan de gebruiker te tonen. Om data die de gebruiker aanlevert te integreren. Objecten uit het geheugen serializeren. Data persistent houden tijdens sessies. Bepaal de omgevingsconfiguratie (zit je op een DEV of PROD omgeving?). Geheugen is "volitile", als de stroom wegvalt ben je de gegevens kwijt.
We hebben hiervoor de Framework methods; File.WriteAllText / ReadAllText
Open het bestand for reading om het open te houden en blijven schrijven.
Open as stream for grote datahoeveelheden en real-time verwerking.
We krijgen wat voorbeelden. De welbekende Path.Combine, Directory.GetCurrentDirectory(). Environment Special Folders, GetFiles(), System.UI.FileInfo.
We kunnen Isolated Storage gebruiken, een opslag alleen voor deze applicatie, alleen voor deze gebruiker. Zeg maar een soort "sandbox". Anything Else. Caveat: Windows Store App development, je kunt niet buiten je Windows 8 applicatie / app systeem komen. We krijgen een lijstje met voorbeelden:
var docs = Environment.SpecialFolder.MyDocuments;
var app = Environment.SpecialFolder.CommonApplicationData;
var prog = Environment.SpecialFolder.ProgramFiles;
var desk = Environment.SpecialFolder.Desktop;
var dir = System.IO.Directory.GetCurrentDirectory();
var iso = IsolatedStorageFile.GetStore(IsolatedStorageScope.Assembly, "Demo"). GetDirectoryNames("*");
var temp = new System.IO.DirectoryInfo("c:\temp");
Vervolgens krijgen we Web Services. Het omvat de implementatie, dat gebeurt achter de schermen, de abstractie zorgt dat jij niet hoeft te weten wat er onder de motorkap gebeurt. WS is beschikbaar voor ipad, iphone, windows. Anders had je libraries die op maat gemaakt moesten worden. WS zorgt dat cliƫnts met servers kunnen communiceren (HTTP, GET, POST). WS zijn belangrijk voor Service Oriented Architecture. Met en zonder metadata. "Loose" coupeling. Als je interface gelijk blijft, kun je de rest gewoon aanpassen.
SOAP. Is een standaard voor gestructureerde data via het Web. Service as XML, Envelope met Header en Body. SOAP handeling is standaard ingebouwd in Visual Studio. Met de WSDL kan uitgewerkt worden hoe de structuur eruit ziet. SOAP is een "bulky" methode, we krijgen ook nog alternatieven.
REST. REpresentative State Transfer. Het wordt steeds meer een standaard industriƫle standaard. Heeft geen XML parsing nodig. Heeft geen message-header nodig. Is door mensen te lezen. Gebruikt minder bandbreedte dan SOAP. Stuurt XML of JSON terug. JSON is de JavaScript Object Notation; JSON wordt ook steeds meer een standaard, en is lichter in gebruik dan XML/SOAP.
var url = new URI("http://localhost:1234/MyService.svc/json/4");
var client = new WebClient();
var json = await client.DownloadStringTaskAsync(url);
var serializer = new JavaScriptSerializer();
var data = serializer.Deserialize<JSONSAMPLE.Data>(json);Console.WriteLine(data.Number);
foreach (var item in data.Multiples)
Console.Write("{0}, ", item);
// var serializer = new DataContractJsonSerializer(typeof(DATACONTRACT.DATA))
// var data = serielizer.ReadObject(json) as DATACONTRACT.Data;
// var serializer = new XmlSerializer(typeof(XMLSAMPLE.Data));
namespace DATACONTRACT
{
[DataContract]
public class Data
{
[DataMember]
public int Number {get;set;}
[DataMember]
public int[] Multiples {get;set;}
}
}
In Visual Studio zien we nog even een breakpoint in Visual Studio, rechtermuisklik erop, waarbij je onder andere kunt kiezen voor condition. Continu doorklikken kan irritant zijn, met een condition kun je kiezen wanneer je echt wilt debuggen.
Async komt in de volgende module terug, we krijgen in deze module een minuutje uitleg. Op multicore systemen worden je resources gemaximaliseerd. Zorgt dat de user interface niet "bevriest", zodat je niet op lange routines hoeft te wachten.