Applicaties Bouwen met Services van Microsoft Live
De laatste jaren is er binnen veel organisaties de focus gelegd op een service georiënteerde architectuur: het neerzetten van diensten die gebruikt kunnen worden door applicaties en applicaties die zelf als dienst dienen binnen de organisatie. Heden ten dage worden via het internet meer en meer diensten en applicatie functionaliteiten aangeboden. Microsoft biedt dit via het Live platform.
Dit artikel geeft een kort overzicht van de mogelijkheden van het Windows Live Platform. Windows Live geeft ontwikkelaars de mogelijkheid om op eenvoudige wijze bestaande functionaliteit te implementeren in hun applicaties. Microsoft zorgt voor goede data bandwidth en opslag ruimte.
Dit artikel laat zien wat het Microsoft Live platform de ontwikkelaar biedt en hoe men deze diensten kan gebruiken binnen applicaties van zijn/haar organisatie.
Overzicht van de Live Services
Het Live platform biedt vijf basale diensten aan:
- Live Foto’s: Het Live platform biedt webcontrols aan waarmee eindgebruikers de mogelijkheid krijgen foto’s te uploaden en te bekijken in de Live Spaces. Deze foto’s kunnen daarop weer worden gebruikt in 3rd party applicaties.
- Live Contacten: Het Live platform biedt ontwikkelaars de mogelijkheid om contactinformatie van gebruikers of klanten op te slaan binnen hun (web) applicatie. Voordelen hiervan zijn, dat hierbij eenvoudig gebruik kan worden gemaakt van de contactinformatie die Windows Live heeft (messenger id’s e.d.). Er kan bijvoorbeeld in de webapplicatie worden gecontroleerd op authenticatie en presence, waardoor eindgebruikers makkelijk kunnen inloggen en met elkaar kunnen communiceren.
- Kaart mapping: Het Live platform biedt een service aan genaamd Virtual Earth. Een kaart service waarmee ontwikkelaars rijke topografisch kaarten kunnen laten zien met specifieke eigen addities. (De tegenhanger hiervan is Google Maps).
- Zoeken: Het Live platform biedt ontwikkelaars om de Live zoek machine te integreren binnen hun applicaties. Zo kan er specifiek worden gezocht binnen een bepaalde bedrijfstak en/of industrie.
- Media ondersteuning: Het Live platform biedt naast de webcontrols en web services ook diensten aan waardoor er binnen applicaties gemakkelijk media kan worden getoond. Een voorbeeld hiervan is Silverlight streaming media: films kunnen zeer snel worden getoond binnen een website.
Naast deze diensten zijn er meerdere handige diensten die het Live platform aanbiedt. Aan het einde van het artikel wordt een opsomming gegeven van de overige diensten en integratiemogelijkheden.
De Live Application Programming Interface
Het Live platform biedt de ontwikkelaar de Live API. De Live API bestaat uit een aantal webcontrols en een verzameling van service objecten.
Het Live platform biedt 6 webcontrols aan die direct in webapplicaties geplaatst kunnen worden:
- Silverlight streaming control: Deze control biedt de ontwikkelaar de mogelijkheid om Silverlight applicaties te tonen binnen de website.
- Windows Live spaces control: Deze control biedt de ontwikkelaar de mogelijkheid om Windows Live Spaces onderdelen, zoals fotogalerijen, te tonen in de webapplicatie.
- Windows Live contacts control: Deze control biedt de ontwikkelaar de mogelijkheid om een control te integreren waarbij eindgebruikers op basis van hun live-id hun contacten (messenger contacten) kunnen zien.
- Microsoft Virtual Earth control: Deze control biedt de ontwikkelaar de mogelijkheid een kaart control te gebruiken waarbij specifieke kaarten getoond kunnen worden, bijvoorbeeld routes. Tevens kan de kaart op diverse manieren worden getoond.
- Live Search control: Deze control biedt de ontwikkelaar de mogelijkheid een live search box te integreren in de webapplicatie.
- Windows Live ID control: Deze control biedt de ontwikkelaar de mogelijkheid om een live id authenticatie box te integreren in de webapplicatie, en daardoor de gebruiker te authenticeren tegen Windows Live.
De controls kunnen gemakkelijk door middel van Javascript worden aangepast.
In het volgende code-voorbeeld (waarbij niet relevante HTML zo veel mogelijk is weggelaten) wordt getoond hoe de ontwikkelaar het Live spaces control kan gebruiken. De control zorgt ervoor dat gebruikers hun eigen space data (plaatjes) kunnen zien binnen een andere website.
In het head-deel van de HTML moeten de juiste Javascript-files opgenomen worden:
src="http://controls.services.live.com/scripts/
base/v0.3/live.js">
src="http://controls.services.live.com/scripts/
base/v0.3/controls.js">
Vervolgens hebben we een aantal wat algemenere Javascript-functies nodig voor de afhandeling van in- en uitloggen, errors, enz. Deze functies moeten we uiteraard binnen script-tags zetten.
var _market = "en";
function signin() {
elDisplay.innerHTML = "You're logged in!";
};
function signout() {
elDisplay.innerHTML = "You need to log in.";
};
function showerror(p_msg) {
elDisplay.innerHTML = hescq(p_msg);
}
function hescq(p_str) {
p_str = p_str.replace(/&/g,"&");
p_str = p_str.replace(/ p_str = p_str.replace(/>/g,">");
p_str = p_str.replace(/\"/g,""");
p_str = p_str.replace(/\'/g,"'");
return p_str;
}
function encode(str) {
if ("string" != typeof str) str = "";
str = encodeURIComponent(str);
/* hide '%' from browser (Firefox) */
return str.replace(/%/g, "\\");
}
function decode(str) {
if ("string" != typeof str) str = "";
/* translate '\\' back to '%' */
str = str.replace(/\\/g, "%");
return decodeURIComponent(str);
}
function setAttributes() {
var s = document.location.href;
var lang =
elMarket.options[elMarket.selectedIndex].value;
s = s.substr(
0,s.length - document.location.hash.length) +
"#" + encode(lang) +
"&" + encode(hescq(elWidth.value)) +
"&" + encode(hescq(elHeight.value)) +
"&" + encode(hescq(elInnerBackgroundColor.value)) +
"&" + encode(hescq(elInnerTextColor.value)) +
"&" + encode(hescq(elOuterBackgroundColor.value)) +
"&" + encode(hescq(elOuterTextColor.value)) +
"&" + encode(hescq(elLinkColor.value));
document.location.replace(s);
document.location.reload();
}
We hebben wat functies nodig om de juiste screen-handling te verzrogen:
function resize() {
elSpacesElement.style.width =
hescq(elWidth.value.replace("px", "") + "px");
elSpacesElement.style.height =
hescq(elHeight.value.replace("px", "") + "px");
}
function showControl() {
var iX = hescq(elWidth.value.replace("px", ""));
var x = 0;
expandControl();
function expandControl() {
if (x < iX) {
x = Math.min(x + 50, iX);
elSpacesElement.style.width = x + "px";
setTimeout(expandControl,50);
}
}
}
function hideControl() {
var x = hescq(elWidth.value.replace("px", ""));
shrinkControl();
function shrinkControl() {
if (x > 0) {
x = Math.max(x - 50, 0);
elSpacesElement.style.width = x + "px";
setTimeout(shrinkControl,50);
}
}
}
function toggleControl() {
var iX = elSpacesElement.style.width.replace("px", "");
if (iX <= 0) { showControl(); }
else { hideControl(); }
}
De functie genLanguageChoices wordt aan het onLoad-event van het window gehangen:
function genLanguageChoices() {
if (!document.getElementById(
"SpacesControl").supportedMarkets) {
setTimeout(genLanguageChoices, 500);
return;
}
var i;
var o = document.createElement("option");
o.value = "";
o.text = "(none)";
if (window.ActiveXObject) {
elMarket.add(o); }
else {
elMarket.add(o,null);
}
var languages = document.getElementById(
"SpacesControl").supportedMarkets();
for (i in languages) {
o = document.createElement("option");
o.value = i;
o.text = i;
if (document.getElementById("SpacesControl").
getAttribute("devlive:market") == o.value) {
o.selected = true;
}
if (window.ActiveXObject) {
elMarket.add(o); }
else {
elMarket.add(o,null);
}
}
elMarket.value = _market;
}
Microsoft.Live.Platform.addEvent(window, "load",
function () {setTimeout(genLanguageChoices, 500)});
De functie die het ontvangen van data moet afhandelen moet gedefinieerd worden:
function receiveData(p_contacts) {
var hash = window.location.hash;
var s = "Done! " + p_contacts.length +
" records received.
";
for (var i = 0; i < p_contacts.length; i++) {
s += "
";
for (var j in p_contacts[i]) {
s += hescq(j) +
": " +
hescq(p_contacts[i][j]) + "
";
}
s += "
";
}
elDisplay.innerHTML = s;
//Focus Display Element using bookmarks
if (window.location.hash.length>0) {
window.location.replace(
window.location.href.replace(
window.location.hash, "#Display"));
//this is to ensure we do not go up if the hash was empty.
if (hash != "#") {
//return the # value previously set
// so the user can do a refresh without
//losing the configuration
window.location.replace(
window.location.href.replace(
"#Display",hash));
}
}
else {
window.location.replace(
window.location.href+"#Display");
}
}
In de body hebben we tenslotte nog de volgende code nodig:
…
id="SpacesControl"
devlive:privacyStatementURL=
"http://g.msn.com/2privacy/enus"
devlive:market="en"
devlive:dataDesired=
"fileExpiringURL,fileAccessControlledURL"
devlive:onSignin="{ signin(); }"
devlive:onSignout="{ signout(); }"
devlive:onError="showerror"
devlive:onData="receiveData"
devlive:channelEndpointURL="channel.htm">
…
De specifieke live functies voor het ophalen van de plaatjes bevinden zich in de gelinkte Javascript-files (boven in het voorbeeld). De ontwikkelaar hoeft in feite zich geen zorgen te maken over het ophalen van de data en authenticatie, daar zorgen de control en de Javascript files voor.

Fig. 1: Het resultaat (na ingelogd te zijn op mijn eigen space)
Web Services
Met bovenstaande controls kun je heel veel doen, maar het is voornamelijk client side scripting dat de control goed doet werken. Naast de web controls biedt het Live platform ook web services aan. Deze web services kan men integreren in eigen applicaties. Er kan dan server side worden geprogrammeerd en voor de grafische afhandeling van de response kan een eigen keus worden gemaakt.
Het Live platform biedt de volgende web service API’s aan:
- Silverlight Application managebility API
- Spaces Photo API
- Contacts API
- Virtual Earth API
- Live Search API
- Windows Live ID API
Zoals men ziet is er voor elke web control ook een web service API. Deze web service API’s hebben de zelfde functionaliteit als de controls, maar er kan op een dieper niveau en uitgebreider tegen worden geprogrammeerd.
Voorbeeldapplicatie Live Search Web Service API
In de volgende voorbeeldapplicatie wordt getoond hoe men de Live Search web service integreert in een eigen applicatie. De applicatie is een simpele console applicatie waar een zoekterm ingevoerd moet worden, waarna de resultaten worden getoond.
De Live Search web service API heeft wel een addertje onder het gras: voordat men de service kan gebruiken, moet men beschikken over een zogenoemd application ID. Zonder dit application ID kan niet worden gezocht met de service. Dit is waarschijnlijk zo gedaan zodat de Live Search service niet overbelast wordt. Om te kunnen ontwikkelen kan men een zogenoemd developer application ID aanvragen (binnen een aantal minuten is dit geregeld) zodat men de applicatie kan testen. Het application ID kan worden aangevraagd bij dev.live.com.
In onderstaande code het voorbeeld van de console applicatie:
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Services.Protocols;
using System.Net;
using LiveSearchApplication.LiveSearch;
namespace LiveSearchApplication
{
class Program
{
static void Main(string[] args)
{
try
{
MSNSearchService s = new MSNSearchService();
SearchRequest searchRequest = new SearchRequest();
int arraySize = 2;
SourceRequest[] sr = new SourceRequest[arraySize];
sr[0] = new SourceRequest();
sr[0].Source = SourceType.Web;
string searchText = Console.ReadLine();
searchRequest.Query = searchText;
searchRequest.Requests = sr;
searchRequest.AppID = "YOUR APPLICATION ID HERE";
searchRequest.CultureInfo = "en-US";
SearchResponse searchResponse;
searchResponse = s.Search(searchRequest);
foreach (SourceResponse sourceResponse _
in searchResponse.Responses)
{
Result[] sourceResults = sourceResponse.Results;
if (sourceResponse.Total > 0)
{
Console.WriteLine( _
sourceResponse.Source.ToString() +_
" - Total Results: " + _
sourceResponse.Total.ToString());
Console.WriteLine();
}
foreach (Result sourceResult in sourceResults)
{
if ((sourceResult.Title != null) &&
(sourceResult.Title != String.Empty))
Console.WriteLine("Title: " + _
sourceResult.Title);
if ((sourceResult.Description != null) &&
(sourceResult.Description != String.Empty))
Console.WriteLine("Description: " + _
sourceResult.Description);
if ((sourceResult.Url != null) &&
(sourceResult.Url != String.Empty))
Console.WriteLine("URL: "+sourceResult.Url);
Console.WriteLine _
("***************************************");
}
}
Console.WriteLine("Press any key to exit.");
Console.ReadLine();
}
catch (SoapException fault)
{
Console.WriteLine( _
fault.Detail.InnerText.ToString());
Console.WriteLine("Press any key to exit.");
Console.ReadLine();
}
catch (WebException webx)
{
Console.WriteLine(webx.ToString());
}
}
}
}
Na het draaien van de applicatie en het invoeren van de zoekterm “Windows Live” wordt het volgende resultaat getoond:

Fig. 2: Het resultaat van Live Search via console applicatie
Windows Live Quick Applications
Om het ontwikkelen te vereenvoudigen en om de ontwikkelaar op weg te helpen met Windows Live, biedt Microsoft Windows Live Quick Applications. Quick Applications zijn out-of-the-box web oplossingen gemaakt met het Windows Live platform. Deze oplossingen zijn eenvoudig te downloaden en de source code kan worden hergebruikt naar eigen wens.
Een voorbeeld hiervan is Adventure Works Resort, een reis website waarbij diverse diensten worden samengevoegd om de klant nog meer van dienst te zijn (zie figuur 3).
Figure 3: Adventure Works Resort
Binnen deze website worden bijna alle Live diensten gebruikt. Members kunnen ervaringen door middel van media uploaden en koppelen aan bestemmingen.
Naast deze voorbeeldoplossing biedt Microsoft Windows Live Quick Applications voorbeelden voor specifieke Live diensten, zoals Virtual Earth.
Data diensten binnen het Live platform
Het Live platform biedt diverse diensten waarbij veel data verkeer van toepassing is. Microsoft Live zorgt ervoor data deze diensten een goede afhandeling krijgen.
Per dienst komt dit neer op het volgende:
- Silverlight Applications: Microsoft biedt een globaal netwerk bandwidth van 1 terabit per seconde. Door media te laten streamen door Silverlight streaming media worden dynamische applicaties met veel media nog toegankelijker voor gebruikers.
- Live Spaces: Op dit moment zijn er ca. 120 miljoen gebruikers van spaces, wat neerkomt op 60 miljoen foto’s die per dag worden geupload. Microsoft zorgt ervoor dat de Live spaces diensten snel en toegankelijk blijven.
- Live Contacts: Op dit moment zijn er 500 miljoen adreslijsten opgeslagen met ongeveer 26 miljard contacten (denk hierbij aan messenger contacten).
- Virtual Earth: 17 PetaBytes aan kaartopslag van de volgende regionen: US, UK, CA, AU, IT, FR en JP en groeiende.
- Live Search: Huidige index van 5 miljard documenten en 400 miljoen plaatjes.
- Live ID: 450 miljoen identiteiten met op dit moment 1 miljard authenticaties per dag.
Overige Live diensten
Naast bovengenoemde diensten die doormiddel van web controls en web services worden aangeboden, zijn er nog andere diensten die worden aangeboden:
- Windows Live Alerts: Een dienst die de mogelijkheid biedt notificaties in applicaties te beheren, b.v. om een klant automatisch een notificatie te sturen wanneer een order afgerond is.
- Windows Live Admin Center: Een dienst die de mogelijkheid biedt virtuele domeinen te beheren
- Live Expo: Een dienst die de mogelijkheid biedt advertenties (denk aan marktplaats) te beheren en te gebruiken, b.v. voor een makelaarsapplicatie om gebruikers direct te kunnen laten zien waar huizen te koop staan in combinatie met Virtual Earth.
- Messenger: Waarschijnlijk de meest bekende Live dienst tot nu toe. Deze dienst kan naast de bestaande Windows applicatie Windows Live Messenger ook worden geïntegreerd in een eigen applicatie.
Conclusie
Het Windows Live Platform laat zien dat Microsoft naast software-bouwer nu ook een software-dienstenaanbieder is geworden. Om ontwikkelaars nog sneller op weg te helpen heeft Microsoft Quick Applications neergezet, out-of-the-box oplossingen waar ontwikkelaars uit kunnen putten.
Het Windows Live platform is niet alleen ontwikkeld als reactie op de zogenoemde Google apps, maar biedt ontwikkelaars vele (meer dan Google) herbruikbare blokken functionaliteit. Ontwikkelaars die aan de slag gaan met het Live platform zullen merken dat het makkelijker wordt een oplossing te bouwen met deze diensten. Microsoft geeft met het Live platform aan niet opnieuw het wiel uit gevonden te hebben, maar heeft een platform neergezet dat anderen een wiel aanbiedt. Go Live!
Links en verwijzingen