Slå opp innhold i Sharepoint basert på taxonomy-tagger

by Israr Khan 14. februar 2012 07:36

Tags: , , ,

Sharepoint

Error 5000 når du skal poste en app til Phone 7 Marketplace?

by Israr Khan 11. februar 2012 19:20

Da har du sikkert satt språket til f.eks. "Norwegian", og ikke "Norwegian, Bokmål" :)

 

Les også http://stackoverflow.com/questions/8788900/windows-phone-apphub-submission-static-validation-completed-with-errors-unknow 

Tags: , ,

Windows Phone 7

Deploye filer - Visual Studio og Sharepoint 2010

by Israr Khan 10. januar 2012 10:04

Ja - Sharepoint har noe med å ta opp alt av tiden tilgjengelig i døgnet, så det har vært lite blogging.

Et lite tips:

En fil som deployes via Visual Studio må ha taggen "GhostableInLibrary" for å kunne få annonym tilgang.

Typisk oppføring i Element.xml-fil:

<File Path="Style Library\layoutPage.css" Url="layoutPage.css" Type="GhostableInLibrary"/>

Tags: , , , ,

Rest-tjenester med WCF Web API, ACS og SWT - uten WIF - Del 1: intro, oppsett av ACS og klient

by Israr Khan 16. august 2011 19:57
Da jeg fortalte en kompis at det var ganske knotete å arbeide med "det å lage REST-baserte tjenester med WCF WebAPI Preview 4 og sikre disse ved hjelp av ACS og SWT, alternativt SAML uten å bruke WIF" - var svaret hans: "Ja, tror jeg ser hva som er saken her; det er for mange forkortelser" ;) Så for at du skal slippe å måtte gå igjennom samme research som meg - gir jeg ut en serie med poster som vil vise deg nettopp hvordan du kan gjøre dette :)

Så for å ta en kort oppsummering med lenker og info du bør se på før vi begynner (med god hjelp fra Wikipedia og andre nettsider)

REST-tjenester: 

A RESTful web service (also called a RESTful web API) is a simple web service implemented using HTTP and the principles of REST. It is a collection of resources, with three defined aspects:
- the base URI for the web service, such as http://example.com/resources/
- the Internet media type of the data supported by the web service. This is often JSON, XML or YAML but can be any other valid Internet media type.
- the set of operations supported by the web service using HTTP methods (e.g., POST, GET, PUT or DELETE). 

Windows Identity Foundation WIF:
http://www.microsoftpdc.com/2009/P09-21
 
Sånn - da får alle newbiesene noe å lese på - men hvis du kom hit for å få svar på hvordan du faktisk bruker ACS med WCF Web API uten WIF med SWT, så starter vi nå!
Scenarioet i dette tilfellet er som følger:
 


1: Sluttbruker autentiserer seg mot din web-applikasjon, klient e.l. Hvordan din sluttbruker autentiserer seg er ikke relevant i dette tilfellet.
2: Din klient(altså - ikke sluttbruker, men din web-applikasjon e.l) kommuniserer mot en WCF tjeneste som er basert på WCF Web Api og REST.
3: Klienten ber om å få token fra ACS - hvor den bruker enten et passord, en nøkkel eller et sertifikat for å autentisere seg mot ACS.
4: Klienten sender dette tokenet til WCF Rest-tjeneste som deretter validerer dette.
5: Basert på om det tokenet er valid eller ikke, vil din web-applikasjon få tilgang/ikke tilgang.


Før du kan begynne trenger du en Azure-konto samt WCF Web API. 
Deretter vil stegene være noe ala følgende: 
1: Sette opp ACS med korrekt innstillinger.
2: Opprette en klient som tar i bruk ACS og henter ut en gyldig token og bruker denne i kallet til REST-tjenesten. 
3: Opprette en REST-tjeneste som godtar SWT-er fra ACS-en
Grunnen til at jeg vil opprette klienten først - er rett og slett at jeg synes det er enklere å forstå hvordan alt henger sammen ved å opprette klienten først kontra en tjeneste som validerer noe du ikke vet hvordan du får tak i :)
 
Oppsett av ACS

Strengt talt vil du finne bøttevis av tutorials som går igjennom hvordan du gjør dette - men hvor ofte kommer du ikke til tutorials på nettet som er halv-ferdige hvor det som er en selvfølge for forfatteren ikke nødvendigvis er det for deg? 
Så da tar jeg en rask gjennomgang av hvordan du sette opp ACS - uten nødvendigvis å fortelle deg i detaljer hvorfor.
 
Opprett namespace i ACS: 
Logg inn på Azure -> velg Service Bus, Access Control & Caching -> New.
Skriv inn et valgfritt namespace - noe som bør reflektere din organisasjon, applikasjon e.l.
 

2: Vent til namespacet går over fra å være i status "Activating" til "Active".

3: Klikk på knappen "Access Control Service" på topp-menyen for å gå inn på kontrollpanelet til selve namespacet.
 

Gratulerer! Da har du fått opp ditt første ACS namespace! :)
 
Service identity
http://msdn.microsoft.com/en-us/library/gg185945.aspx

Det neste vi er nødt til å gjøre er å opprette en identitet for din klient, altså webapplikasjon som skal hente ut tokens fra ACS.
Klikk deg inn på "Service Identities" og velg "Add".

Service identity settings:
Name:
Dette blir brukernavnet til din klientapplikasjon, i mitt tilfellet "KodeverkClient"
Description: Ja.. Du har ikke kommet så langt i denne tutorialen uten å vite at description er description, og at den i tillegg er optional ;)
Credential setting
Type: Password
Passord: Her har jeg valgt å bruke "kodeverkPass" (et passord jeg aldri har brukt i noe reellt sted - i tilfelle du lot deg friste til å prøve det ut på siden her)

Resten kan du la være, og trykk "Save".
 
Da har vi satt opp vår kommende klient som en gyldig Service Identity i ACS. Neste steg er å sette opp vår Relying Party Application
 
Relying Party Application
http://msdn.microsoft.com/en-us/library/gg185906.aspx

Kort fortalt vil en relying party application være en webtjeneste, webapplikasjon eller en applikasjon som skal godta at ACS autentiserer brukere på vegne av seg.
Klikk på "Relying party applications" og "Add".
Name: KodeverkService" - Kan være hva du vil.
Mode: Manually
Realm: http://www.kodeverk.net/RestAPI. Et realm, eller scope, eller domenet er det området hvor applikasjonen befinner seg. For tjenester kan dette være en fiktiv adresse, for webapplikasjoner må applikasjonen faktisk befinne seg på, eller under området som er spesifisert som realm.
Resten kan være som det er - frem til du kommer til Token Format.

Token Format: SWT
Identity providers: En av styrkene til ACS er å tillate dine applikasjoner å kun måtte forholde seg til en type token, f.eks. SAML eller SWT, men likevel å tillate dine _brukere_ å benytte seg av flere forskjellige innloggingsmekanimer, inkludert Facebook, Windows Live, Google, Active Directory o.s.v.(Identity provider = IDP). For vårt tilfelle ønsker vi ikke å tillate noen andre enn vår godkjent klient som vi satte opp som service identity å kunne benytte seg av ACS for å autentisere opp mot vår relying party application - derfor huker vi bort Windows Live som Identity Provider.
Generer en ny signeringsnøkkel - og trykk Save.  
 
Rule groups spiller en større rolle når vi skal transformere informasjon vi får fra forskjellige IDP-er, som f.eks Facebook, Live, Google o.s.v. til et felles format. I vårt tilfelle ønsker vi kun å sikre vår innlogging basert på at det er en gyldig service identity.


Vi går derfor inn på "Rule Groups" fra menyen på høyre side, og velger "Default Rule Group For KodeverkService" (eller noe annet hvis din Relying party application heter noe annet). Velg deretter "Add", og sett opp ACS som issuer - i stedetfor et IDP.

Resten kan du la være som det er - og trykk "Save".
 
Sånn! Da har vi satt opp det nødvendige for å kunne bentte oss av ACS i vårt scenario.
Av viktig informasjon som vi vil trenge fremover er følgende:

Namespace: kodeverk
Service identity:
Brukernavn til service identity (KodverkClient)
Passord til service identity (kodeverkPass)

Relying party application
Realm/Scope: (http://www.kodeverk.net/RestAPI)
SigningKey: (Zl1vqy0h45UImmzPzK7EuSUXo6yGpw1nAYazZGdal6A=)
 
Klienten

For å simulere vår web-applikasjon oppretter vi en konsoll-applikasjon som kommer til å utføre følgende:
1: Benytte seg av service identity brukernavn, passord og realm for å få ut token fra ACS
2: Benytte token fra ACS for å kalle underliggende REST-tjeneste.
Koden til en slik klient kan f.eks. se slik ut:

http://msdn.microsoft.com/en-us/library/ee706727.aspx
static void Main(string[] args)
        {
            var token = GetTokenFromACS();
        }

        private static string GetTokenFromACS()
        {
            // request a token from ACS
            WebClient client = new WebClient();
            client.BaseAddress = "https://kodeverk.accesscontrol.windows.net";

            NameValueCollection values = new NameValueCollection();
            values.Add("wrap_name", "KodeverkClient");
            values.Add("wrap_password", "kodeverkPass");
            values.Add("wrap_scope", "http://www.kodeverk.net/RestAPI");

            byte[] responseBytes = client.UploadValues("WRAPv0.9/", "POST", values);

            string response = Encoding.UTF8.GetString(responseBytes);

            Console.WriteLine("\nreceived token from ACS: {0}\n", response);

            return HttpUtility.UrlDecode(
                response
                .Split('&')
                .Single(value => value.StartsWith("wrap_access_token=", StringComparison.OrdinalIgnoreCase))
                .Split('=')[1]);
        }


OBS
: Hvis du velger å opprette en konsoll-applikasjon, er du nødt til å endre Target framework fra  .Net Framework 4 Client Profile til .Net Framework 4 - og deretter legge til en referanse til System.Web (grunnet HttpUtility).


Nå er det natta for meg! I neste tutorial kommer de virkelige godsakene hvor vi legger inn en egen MessageChannel i WCF Web API for å validere den innkommende SWT-en i REST-tjenesten samt utvider klienten vår til å kalle på vår nye tjeneste. :)
 

Tags: , , , , , , ,

OpenRasta for Rest-baserte tjenester

by Israr Khan 14. juli 2011 11:45

Rastafari man!

Har tidigere sett en del på å lage REST-baserte tjenester med WCF, blant annet med webHttpBinding og også med Rest Template-en1.

I mellomtiden har det skjedd en del, blant annet har WCF Web API2 blitt gitt ut i Preview 4, samt at jeg har sett litt mer på OpenRasta3.

WCF Web API virker som et veldig spennende initativ fra Microsoft for å gjøre utvikling av REST-baserte tjenester enklere, men er per nå kun i preview 4.
OpenRasta på sin side har vært i utviklingen side 2008, og for meg så virker det som et mer modent og stabilt rammeverk.

Tags: , , , , , , ,

Asp.Net | Koding

Hyper-V server 2008 R2

by Israr Khan 19. april 2011 23:26

Har lenge ønsket å kjøre opp Hyper-V server standalone på min laptop for å kunne switche mellom alle mine utvikler-images på en lett måte samtidig som jeg har minimalt med overhead med tanke på host os. En clean instans av Hyper-V server kjører opp med 400MB ram(sammenlign dette med Wimp-klienten f.eks som i seg selv tar 200 mb :P)

En av de tingene jeg liker med Hyper-V er ingen gui ;) Eller - GUI er der, men et veldig simpelt ett... Etter install som gikk ganske greit satt jeg der da, men uten nettverk... "No active network adapters found" -  Fikk meg til å tenke tilbake til de dagene jeg satt og kosa meg med Linux, da Slackware 8 var hott :P

Kjent fenomen, men etter årvis med GUI-basert install, plug and play og default install av Windows med et hav av drivere satt jeg og lurte på hvordan jeg egentlig installerer drivere command line based... Jo, slik:

1: Last ned drivere, for mitt tilfelle var det Intel drivere for en Lenovo T410 (Trenger jeg virkelig nevne at du må da laste ned dette på en maskin som faktisk har nettilgang?)
2: Pakk ut, overfør til minnepinne
3: Finn .inf-filen og kjør pnputil med -i (install) og -a(add), f.eks: pnputil -i -a e1k62x64.inf. 

Så er det bare å gjenta det hele for alle driverene du ønsker, i mitt tilfelle ble det da et par drivere for nettverkskort(kablet) og skjermkortet.

Holder fortsatt på - etter dette får vi se om OS-et håndterer å laste ned evt. andre drivere via Windows Update :)

Snakkes!

Update:

Etter å ha prøvd drivere fra Lenovo uten hell endte jeg opp med å laste ned drivere for Intel PRO/1000 direkte fra Intel. Korrekt drivere for min del var fortsatt e1k62x64.inf , men da de som var lastet ned fra Intel:) I tillegg - driveroppdatering via Windows Update var bare å glemme, her er det god gammeldags håndverk og commandline som gjelder!


Forresten: Devcon -utility er kjekk å ha for å få oversikt over HW som er gjenkjent av OSet :) F.eks.:  devcon findall =net <- Lister opp alle nettverkskort :)
I tillegg: msinfo -utility er kjekk å ha ;)

Neste blir å kjøre config av serveren... Sjekk ut

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7d2f6ad7-656b-4313-a005-4e344e43997d 

OBS: Husk å aktivere funksjonene etter å ha installert RSAT! :
http://forevergeeks.com/windows-7-remote-server-administration-tools

Andre kilder:
http://www.elmajdal.net/win2k8/Configuring_Microsoft_Hyper_V_Server_2008.aspx
http://www.element84.com/loading-nic-drivers-in-hyper-v-core.html
http://support.microsoft.com/kb/311272
http://www.davidorlo.com/articles/virtual-machine/installing-drivers-in-hyper-v-server

Tags: , , ,

Rest-baserte tjenester med Azure Access Control Services

by Israr Khan 19. april 2011 16:03

Ok - etter litt jobbytte, nye impulser fra MIX og ansvar for en ny løsning går jeg i gang med enda et nytt prosjekt!
De neste innleggene mine kommer nok til å handle mye om følgende tema:

Rest, Json, API, ACS, Azure, Odata og t.o.m Sharepoint!

Men bare det å starte med testinga, lese seg opp på gode tutorial o.s.v kan ta tid, så rett før jeg var på vei til å gi meg fant jeg en som kan være verdt å dele:

http://msdn.microsoft.com/en-us/magazine/gg490345.aspx 

Tags: , , , , ,

Asp.Net | Koding

Trafikanten for Windows Phone 7

by Israr Khan 19. mars 2011 19:51

Nå nærmer vi oss virkelig publisering her folkens! 

 

Tags: , ,

Desimaler og C#

by Israr Khan 9. mars 2011 13:29

Aldri har en datatype gitt meg mer hodebry enn "Decimal" i C#... Formatering, tusentall-skille, desimalskille, kulturforskjeller o.s.v....Alt fra enkle operasjoner til mer komplekse operasjoner møter _alltid_ et eller annet hinder.

For å gjøre ting litt lettere for andre : Skal du bestemme antall desimaler som skal returneres er den enkleste måten følgende:

var value = 15m;
var numerOfDecimals = 6;
var valueInString = value .ToString("N"+ numerOfDecimals );

Noe som vil gi deg 15.000000 :)

Enjoy!

Tags: , , , ,

Koding

XML til XSD til C#-klasse

by Israr Khan 17. februar 2011 23:12

NB: Posten ble ikke helt slik jeg forventet da YR sin XML var en smule kjip - det må finnes en enklere måte å gjøre dette på enn beskrevet nedenfor... Legg gjerne igjen en kommentar her eller på Twitter (@IsrarKhan) hvis du vet om noe bedre... (Ta utgangspunkt i YR sin XML..) 

Ok - la oss si du har lyst til å konsumere tjenestene til YR. Eksempel kan være å hente ned information om værdata for Oslo.

API-kallet til YR vil i dette tilfellet se omtrent slik ut:
http://api.met.no/weatherapi/locationforecast/1.8/?lat=59.57;lon=10.42



Resultatet fra dette kallet er et xml-dokument, og du ønsker å få dette omgjort til et CLR-objekt  - så hva gjør du?
Mer...

Tags: , , , , , , , ,

Om meg

Kodeverk.net er drevet av .Net-utvikler Israr Khan.

Han jobber som gruppeleder og  seniorkonsulent for Capgemini Norge.

Hans fokusområder er alt innenfor .Net-verden, og har foreløpig tilgode å finne noe som han ikke finner av interesse innenfor teknologien. Han er drevet av genuin interesse for teknologi og lever for faget.


 

View Israr Khan's profile on LinkedIn

Month List