Guessaguid.net

Det hele startede for en del år siden, da jeg var konsulent for et en virksomhed i København. Lead udvikleren på det pågældende projekt og mig selv faldt i snak om nogle af de mest latterlige og sjove idéer vi havde hørt eller stødt på i vores tid som udviklere. Jeg synes hans idé om, at skulle gætte et global unik id var fantastik morsomt og et eller andet sted dybt latterlig.

Årene gik og jeg hverken så eller hørte noget om denne skøre idé jeg havde fået fortalt. Men så da Twins ringede for nogle uger siden og bad mig om, at komme forbi med en MVC præsentation, tænkte jeg: det er sgu da det jeg skal lave som mit første MVC projekt.

Jeg kunne ikke lade være med at grine lidt over opgaven, fordi jeg faktisk aldrig har lavet noget i samme stil og fordi det føltes som noget overkommeligt og ufattelig simpelt.

Den største udfordring på projektet var, at finde ud af hvordan jeg skulle få genereret de GUIDs der skulle bruges til konkurrencernes deltagere. Jeg ville tilbyde en måde, hvorpå en deltager kunne få fat i et guid bare ved at trykke på et ikon, men de pågældende GUIDs skulle ikke komme fra samme maskine som agere host for selve sitet. Første løsning var en screenscraping af get-a-guid.com og det virkede udover alt forventing, men det var selvfølgelig lidt en oldnordisk løsning, så jeg besluttede mig istedet for at lave en WCF service. Men der skulle ske noget mere end det, så jeg tænkte jeg ville bruge Windows Azure til formålet. Det skulle dog vise sig mere besværligt end godt var, i og med, at Azure ikke fuldt understøtter WCF services pga. en dynamisk WSDL adresse.

Der var en midlertidig løsning på det problem. Tilføj referencen til servicen mens den køre i ens lokale dev’ fabric og sidenhen udskifte de den lokale URI med den fra Azure.

 [Obsolete( "this method is obsolete and should not be used", true )]
public static String ScrapeGuid() {
  WebRequest request = WebRequest.Create( new Uri( "https://www.get-a-guid.com/" ) );
  try {
    WebResponse response = request.GetResponse();
    using ( Stream dataStream = response.GetResponseStream() ) {
      using ( StreamReader streamReader = new StreamReader( dataStream ) ) {
        //TODO: Regular Expression
        String html = streamReader.ReadToEnd();
        String searchFor = "value=\"";
        int valueIndex = html.IndexOf( searchFor );
        string guid = html.Substring( valueIndex + searchFor.Length, 36 );
        return guid;
      }
    }
  } catch ( WebException ex ) {
    //log this bitch
  }
  return new Guid().ToString();
}

Som du kan se skal jeg have pudset mine regular expression skills lidt af ;)

 public static String RequestForGuid() {
  String guid = String.Empty;
  using (GuidGeno.GenoClient client = new GuessAGuid.GuidGeno.GenoClient()) {
     guid = client.GetGuid();
  }
  return guid;
}

Selve kaldet til Azure ligner det samme som vi er vant til, så intet nyt der.

azureGuidGeno

Alle der måtte have brug for en byggekolds-service der kan generere GUIDs har nu mulighed for at referere https://guidgen.cloudapp.net/geno.svc i deres eget projekt.

Næste stop er at få lavet Unit test og code-coverage på projekt, men indtil da kan du downloade koden her.