Posts Tagged ‘ .NET

5 tips til hurtigere udvikling af Dynamicweb moduler

Dynamicweb eCommeerce Logo

Udvikler du moduler til Dynamicweb, men syntes det går lidt sløvt? Kan du ikke få lov til at debugge dine moduler ordentligt? Du sidder måske enda og flytter dine assemblies manuelt? Så kan nedenstående tips være noget for dig.

#1 Sæt flere Dynamicweb løsninger op på samme IIS

Det er super let at sætte flere forskellige løsninger op på din egen Windows maskine, og med flere løsninger følger muligheden for at udvikle de samme typer moduler/extenders uden at skulle skifte rundt på IIS’en eller andet.

Du ved med garanti hvor du kan hente Dynamicweb applikationen, så det springer jeg over.

Start i stedet med at sætte en løsning op et sted på din maskine. jeg bruger normalt denne struktur til mine løsninger:

c:\developer\dynamicweb\solution1\Application
c:\developer\dynamicweb\solution1\Files

c:\developer\dynamicweb\solution2\Application
c:\developer\dynamicweb\solution2\Files

Når du har filerne på plads skal du starte IIS’en op og herefter skal du sættes et ny website op:

Læg mærke til at jeg har angiver ad.local i Værtsnavn feltet, værstsnavnet er det domæne som bliver knyttet på websitet, og det er ad.local jeg vil kunne skrive i min browser for at kalde løsningen frem. Her efter sætter der en virtuel mappe op til Files mappen, og så er IISen klar.

Når IIS’en er sat op, skal vi fortælle windows at når jeg skriver ad.local i min browser, så skal den kigge på min egen IIS, i stedet for ude på internettet. Til dette formål har windows en fil, som ligger gemt i Windows mappen “C:\Windows\System32\drivers\etc”. Filen hedder hosts og kan åbnes i notepad eller lignende.
Ved at indsætte følgende linie mapper du http://ad.local til din egen IIS

127.0.0.1    ad.local

(lav en tabulering mellem IP’en og domænet.)

Gentag processen med de løsninger du har kørende på din maskine, og sørg blot for at dine lokale domæner er unikke.

Host filen kan også bruges til at teste om en host header er sat op på en ny webserver.

#2 Brug post-build event i Visual studio

Med post-build eventen i Visual studio, kan du bestemme hvad der skal ske når du har bygget dit projekt.

Benyt muligheden til at flytte dine Assemblies og Custom modules file over i din lokale løsning, eller jeres udviklings server. Så sparer du en masse tid og bøvl.

Du finder fanen “Build events” under properties på dit projekt.

Build Events fanen i Visual studio

På fanen har du mulighed for at indtaste hvilke kommandoer som skal kører før og/eller efter du bygger dit projekt. Det er dog Post-build eventen som for mig er mest interessant.

Klik på “Edit Post-build …” for at bringe en lille editor frem hvor i du kan se hvilke makroer du er til rådighed.

Post-build Event command line

Ved at benytte XCOPY kommandoen kan man kopiere de filer og mapper over i vores DW løsning som man har behov for.
Hver kommando skal stå på en linie for sig selv. men så er det også bare at gå i gang.

Med nedenstående kald, kopiere jeg f.eks. min byggede assembly, samt mine modul filer over i min lokale Dynamicweb løsning.

XCOPY $(TargetDir)Demo.* C:\Developer\Dynamicweb\Solution1\Application\bin
XCOPY $(ProjectDir)CustomModules\MyModule\*.* C:\Developer\Dynamicweb\Solution1\Application\CustomModules\MyModule

#3 Attach to process er din ven

Med Attach to process kan du hooke Visual Studio op mod et websitet som kører på din lokale IIS,  og på den måde kører debugging på en Dynamciweb løsning.

Du finder Attach to process under menuen “Tools -> Attach to process”, du kan også tryke “ctrl + alt + p”, i dialogen skal du attache til processen w3p.exe.

Attach to process

Så snart du attacher til processen, vil Visual studio gå i debug mode og du kan nu indsætte breakpoints og arbejde med din lokal løsning som var den i normal debug mode.

#4 Visual studio macros FTW

Lav dig en makro som bygger dit projekt og attacher til w3p.exe, du bliver glad for det i længden.
Der er jo alligevel lidt langt ind til “Attach to process” og man skal jo scrolle lidt for at finde w3p.exe, og det skal gøres hver gang du har lavet en rettelse i din kode.

Med en makro, kan du optage en sekvens af handlingen og afspille dem så tit du lyster. Du kan knytte din makro på en menu eller en genvejstast så du har den lige ved hånden.

#5 Brug Dynamicwebs Visual studio templates

Dynamicweb har lavet Visual studio templates til mage af deres Extenders. Hvis du ikke allerede brugere dem, så kig forbi http://engage.dynamicweb-cms.com/Custom-Modules-397.aspx og hent dem.

Hvis du har problemer med at få dem til at fungere i VS2010, så hop forbi Imar Spaanjaars blog indlæg som beskriver hvordan du får det til at fungere.

#Bonus:  Sæt dig ind i databasen

Nogle gange vil man komme til kort med API’et fordi det ikke helt gør som tror eller forventer, og så er det rart hvis man har godt styr på hvordan databasen er skruet sammen, da mange af  API funktionerne hedder det sammen som tabellerne i databasen.

Hvis man skal f.eks. arbejder med eCommerce så er det helt klart et must at vide hvilke tabellen der bliver brugt, for du kan være sikker på at myProduct.save() ikke sætter alle de relationer som skal til for at dit produkt bliver vist :-)

Afslutning

Hvis ikke du kendte til ovenstående tips, så håber jeg du har fået et par ideer til hvordan du kan klare rutine opgaverne lidt hurtigere, Og dermed får du mere tid til det der virkeligt er sjovt, at kode modulerne.

Hvis du kunne bruge mine tips, eller du har andre gode råd så skriv en kommentar.

Dynamicweb på Windows 7 64bit

Jeg har et par aftener i træk nu forsøgt at få en lokal Dynamicweb løsning til at kører på min maskine. Men jeg stødte igen og igen på den samme fejl når jeg forsøgte at kalde min løsning.

Fejlen jeg fik kan ses her:

Jeg kunne fint få præcis samme løsning/opsætning til at kører på min laptop, så det var naturligt at se på hvad forskellen egentlig var på de maskiner. det der sikkert var noget her som gav problemer.

Den væsentligste forskel var at den ene maskine kører Windows 7 32bit og den anden 64bit.

Efter lidt søgning på nettet faldt jeg over denne adresse http://crmaccelerators.codeplex.com/workitem/3191?ProjectName=crmaccelerators, hvor en gut har oplevet samme fejl som jeg med en 64bit windows, til sidst på siden er et link til hvor man kan hente en 64bit udgave af Microsoft Dynamics CRM SDK.

(Link til Microsoft Dynamics SDK: http://www.microsoft.com/downloads/details.aspx?FamilyID=82E632A7-FAF9-41E0-8EC1-A2662AAE9DFB&displaylang=en)

Jeg kiggede i BIN mappen til Dynamicweb løsningen, og jeg kunne her se at det lå 3 CRM filer “microsoft.crm.sdk.dll”, “microsoft.crm.sdktypeproxy.dll” og “microsoft.crm.sdktypeproxy.xmlserializers.dll”.

Jeg hentede SDKen fra ovenstående link og fandt efter udpakning af SDKen, de 3 filer i en 64bit udgave (sdk\bin\64bit). Efterfølgende overskrev jeg de 3 filer i Dynamicweb BIN mappen med de 3 fra SDKen. Dette løste mit problem og jeg kunne efterfølgende få løsningen til at kører som normalt.

Endnu engang blev man reddet af en gang fornuftig Google søgning :-)

Identitet af Application Pool på IIS7

Jeg sad her til aften og ville sætte en Dynamicweb løsning op på min egen maskine, og her stødte jeg ind i et irriterende problem som jeg ved jeg ikke er den eneste der har bøvlet med.
Efter at have sat et nyt website op på IIS’en og givet den et lokalt domæne, kaldte jeg URL’en men fik denne fejl:

System.Security.SecurityException: Anmodningen om tilladelsen af typen 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' mislykkedes.

Jeg tjekkede derfor om jeg havde givet de fornødne rettigheder til NETWORK SERVICEs, og der var ikke her problemet lå.
Efterfølgende tjekkede jeg om mit nye website kørte på den korrekte Application pool, og det viste sig her, at AppPool’en ikke kørte som NETWORK SERVICEs, og derfor blev de rettigheder jeg havde sat slet ikke brugt.

Jeg fandt løsningen på denne side: http://learn.iis.net/page.aspx/624/application-pool-identities/