Friday, November 20, 2009

Silverlight 4 Beta släppt på PDC.

Såg att Microsoft släppt Silverlight 4 Beta på PDC, här finns en beskrivning av vad som är nytt: http://silverlight.net/getstarted/silverlight-4-beta/#whatsnew Intressant att se att det kommer stöd för utskrifter.

Thursday, November 19, 2009

Spara "sessionsvariabler" i WCF.

I vår loggninglösning så sparas SessionsID och Användarnamn och propageras mellan tjänster så att man kan hålla ihop anrop från en klient till underliggande tjänster. Dessa sparas som sessionsvariabler i ASP.Net och som static variabler i windows applikationer.

I ASP.Net så är det lätt att spara undan variabler i en session genom att spara i den collection som finns t.ex i Page objektet:
page.Session["SessionID"] = session.ToString();

Men i WCF är det inte lika lätt att se hur man sparar undan variabler. Detta beror till stor del på att WCF är gjort för att vara mer generellt och klara olika typer av underliggande tekniker. Man får läsa på en del innan man förstår hur det hänger ihop, här finns en bra beskrivning av InstanceContextMode:
http://msdn.microsoft.com/en-us/magazine/cc163590.aspx

Lösningen på problemet fann jag här: http://blogs.msdn.com/drnick/archive/2007/02/15/stashing-data-in-extensible-objects.aspx genom att skapa ett ExtensionObjekt som lagras på InstanceContext så uppnådde jag samma funktionalitet som tidigare i ASP.Net, dvs sessionsvariablen lever under anropets tid.

if (OperationContext.Current.InstanceContext.Extensions.Find() == null)
{
OperationContext.Current.InstanceContext.Extensions.Add(new SessionMessageInstanceContext());
}
OperationContext.Current.InstanceContext.Extensions.Find().ServiceCallCounter++;