Welcome to MSDN Blogs Sign in | Join | Help

ScottGu kommer til Danmark 3. december!

ScottGu svinger forbi Danmark den 3. december. Så du kan godt sætte kryds i kalenderen. Vi vil naturligvis finde en passende scene i københavnsområdet, hvor vi kan få Scott til at optræde. Vi regner med en hel dag, med PDC-highlights, hvor Scott selvfølgelig er på, med de nyheder som han annoncerer på PDC 17. til 19. november, suppleret med lokale talere.

Derudover planlægger vi med nogle fokuserede roundtables med Scott, herunder et for ISVer.

Sæt kryds ved dagen. Kender din chef ikke ScottGu, så meld dig syg allerede nu;-)

Posted by henrikwh | 2 Comments

Slut med PIA problemer i .NET 4.0

Med .NET 4.0 har du mulighed for at embedde PIA i din VSTO applikation. Det vil sige at du slipper for at skulle installere PIA sammen med din VSTO applikation. Før .NET 4.0 så en dis-assembly sådan ud:

image

Der bliver altså under References refereret til Microsoft.Office.Interop.Outlook (PIA). Med .NET 4.0 bliver interop-typerne embedded:

image

Microsoft.Office.Interop.Outlook (PIA) er ikke længere refereret til under references. Men alle de typer jeg bruger i applikationen er nu med som et namespace i OutlookAddin2.dll.

For at muliggøre dette skal man vælge “Embed Interop Types” på en reference.

image

Du kan se en præsentation om samme emne på Channel 9.

Get Microsoft Silverlight
Posted by henrikwh | 0 Comments
Filed under: ,

Parallel Task og nye debugging tools i VS2010

Daniel Moth har lavet en rigtig god præsentation af de nye Parallel Task debugging tools i Visual Studio 2010. Det er 21 minutter godt brugt!

Get Microsoft Silverlight

Desuden kan jeg klart anbefale en af hans blogposts, hvor han fint kommer rundt om Studiet og Parallel.

Posted by henrikwh | 0 Comments

TechTalk med Juval Löwy om .NET Service Bus

Nu har du muligheden for at høre Juval Löwy snakke .NET Service Bus på en TechTalk i Vedbæk 5. november. Hvis ikke du har stiftet bekendtskab med .NET Service Bus, så er dette en helt unik mulighed. Juval plejer at være meget præcis og have klare meninger om hvor og hvordan teknologier skal/kan anvendes.

Her er teaseren:

The .NET services bus is part of the new Microsoft Cloud Computing Windows Azure initiative, and arguably, it is the most accessible, ready to use, powerful, and needed piece. The service bus allows clients to connects to services across any machine, network, firewall, NAT, routers, load balancers, virtualization, IP and DNS as if they were part of the same local network, and doing all that without compromising on the programming model or security. The service bus also supports callbacks, event publishing, authentication and authorization and doing all that in a WCF-friendly manner. This session will present the service bus programming model, how to configure and administer service bus solutions, working with the dedicated relay bindings including the available communication modes, relying on authentication in the cloud for local services and the various authentication options, and how to provide for end-to-end security through the relay service. You will also see some advanced WCF programming techniques, original helper classes, productivity-enhancing utilities and tools, as well as discussion of design best practices and pitfalls.

 

Du tilmelder dig her.

Posted by henrikwh | 0 Comments
Filed under: ,

Managed Extensibility Framework

Jeg har gennem noget tid snakket og blogget en del om Managed Extensibility framework som kommer med .NET 4.0. Læs mine blogposts om MEF for en gennemgang.

Hvis du er den mere visuelle type og gerne vil se hjemmevideoen, så kan jeg se at Jason Olson har lavet et 0-4 show på Channel 9.

Det er en god introduktion til MEF, samt hele argumentation for MEF.

Get Microsoft Silverlight
Posted by henrikwh | 1 Comments
Filed under: ,

Prøv Office online nu!

Jeg har netop fået adgang! At der er blevet åbnet op for at alle kan få adgang er gået forbi næsen på mig. Office online blev demoet på PDC 2008 i keynoten. Du kan se keynoten og demoen her (134 minutter inde i keynoten).


Du får adgang ved at gå ind på dit skydrive og upload en Excel eller Powerpoint fil – der er endnu ikke support for Word. Når du så er logget ind, så skal du skrifte sproget til Engelsk:

image

 

Derefter vil du blive spurgt om du vil deltage i tech preview. Efterfølgende har du mulighed for at redigere de uploadede dokumenter, direkte fra browseren.

image

 

Desuden kan der være flere der editere dokumentet på samme tid! Prøv at dele dokumenter i skydrive, og så lad andre redigere i dokumentet samtidig med dig.

Posted by henrikwh | 2 Comments

VSTS 2010 Historical debugger

Brian Keller giver en god introduktion til den nye Historical debugger i VSTS 2010. Kort sagt, så giver den mulighed for at “step-back” i programeksekveringen. For at gå lige til demoen skal du 4:30 ind i videoen.

Get Microsoft Silverlight

Posted by henrikwh | 0 Comments
Filed under:

PDC09 facebookgruppe

Skal du på PDC, eller vil du bare gerne følge med i hvad vi oplever på PDC 09? Så er muligheden for at følge med og netværke på facebookgruppen Danskere til PDC 2009.

Posted by henrikwh | 0 Comments

Har du meldt din ISV applikation klar til Windows 7/Windows Server 2008 R2?

Om godt en måned bliver der åbnet op for almindelig tilgængelighed for Windows 7 og Windows Server 2008 R2.

Et af de absolut vigtigste succeskritierer for jeres og vores kunder er applikationskompatabilitet. Kunder der vælger at opgradere, skal kunne afvikle de programmer der er indkøbt.

For at hjælpe vores og jeres kunder, introducerer vi en portal, som vi også havde til Vista, med oplysninger om hvilke applikationer der er kompatible med Windows 7.

For at få jeres applikation med på denne liste skal i give "grønt lys" for jeres applikation. Det gør i ved at registerer jeres applikation på AppCompat sitet. Du skal opgive produktnavn, versions nummer, operativsystem der er understøttet, samt hvilke sprog der er understøttet. Det tager 3—5 minutter at registerer sig.

Jeg opfordre til IKKE at være for sent ude, med at give et synligt grønt lys, så alle kan se, at jeres applikation kører på næste generation af Windows.

Posted by henrikwh | 0 Comments
Filed under:

ASP.NET MVC XSLT viewengine

Der er en masse forskellige viewengines, som man kan vælge at bruge, i stedet for standard webformviewengine’en. I MVCContrib ligger der bl.a. NVelocity, Brail, NHaml, XSLT. Jeg syntes XSLT lød semifornuftigt, så den har jeg kigget lidt på, men har ikke kunne finde noget dokumentation/eksempler. Så hvad gør man, man forsøger at skrive en selv. Det viser sig at være ret nemt, eftersom parseren allerede er skrevet for os.

Dsuden giver det ret god mening i min optik med en XSLTViewengine, eftersom man ofte har brug for at formattere og præsentere data, som modtages i XML.

Lad os gå lige til essensen, controlleren.  

public class XsltViewEngine : VirtualPathProviderViewEngine
{
    public XsltViewEngine(string xsltHome)
    {
        //sæt stierne, så controlleren ved hvor viewet kan findes
        ViewLocationFormats = new[] { 
            xsltHome + "{1}/{0}.xslt", 
            xsltHome + "Shared/{0}.xslt" };
        PartialViewLocationFormats = ViewLocationFormats;
    }
    //den helt overordnede metode til at "rendere" et view
    protected override IView CreateView(ControllerContext controllerContext, 
        string viewPath, string masterPath)
    {
        return new XsltTransformView() { ViewPath = viewPath };
    }
    protected override IView CreatePartialView(ControllerContext controllerContext, 
        string partialPath)
    {
        throw new NotImplementedException();
    }
    //lav tranformationen  
    public class XsltTransformView : IView
    {
        public string ViewPath { get; set; }
        public void Render(ViewContext viewContext, System.IO.TextWriter writer)
        {
            XsltArgumentList xslArg = new XsltArgumentList();
            //tilføj alt ViewData til XsltArgumentList, så de kan bruges fra XSLT.
            foreach (var item in viewContext.ViewData)
            {
                xslArg.AddParam(item.Key, "", item.Value);
            }
            //lav XSLT transformationen
            var doc = XDocument.Parse(viewContext.ViewData.Model.ToString());
            var path = viewContext.HttpContext.Server.MapPath(ViewPath);
            var xslt = XDocument.Load(path);
            var transformer = new XslCompiledTransform(true);
            transformer.Load(xslt.CreateReader());
            transformer.Transform(doc.CreateReader(), xslArg, writer);
        }
    }
}

For at kunne bruge min viewengine skal den registreres i Global.asax:

protected void Application_Start()
{
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new WebFormViewEngine());
    ViewEngines.Engines.Add(new XsltViewEngine("~/Views/"));
    RegisterRoutes(RouteTable.Routes);
}

Det er faktisk det. Så er jeg klar til at bruge min viewengine. Se følgende controller:

public class DemoController : Controller
{
    public ActionResult Index()
    {
        ViewData.Model = XDocument.Load(Server.MapPath("Web.sitemap"));
        ViewData["header"]= "XSLT viewengine";
        return View();
    }
}

Jeg kan nu i min View folder, lave en underfolder der hedder Demo, der matcher min DemoController, og i denne ligger jeg en Index.xslt.

image

Fordi det view der nu skal renderes, matcher det mønster jeg instantierede i constructoren på min controller ("..{1}/{0}.xslt"), så vil min viewengine blive valgt til renderingen.

Mit view (Index.xslt) ud som følgende:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output method="html" omit-xml-declaration="yes"  indent="yes" encoding="utf-8" />
  <xsl:param name="header"></xsl:param>
  
  <xsl:template name="renderSiteMapEntry">
    <xsl:variable name="depth" select="count(ancestor::node())-2"></xsl:variable>
    <xsl:variable name ="url" select="@url"/>
    <tr>
      <td style="text-indent: {$depth*10}px">
        <a href="{$url}">
          <xsl:value-of select="@title"/>
        </a>
      </td>
    </tr> 
  </xsl:template>

  <xsl:template match="/">
    <xsl:if test="$header !=''">
      <xsl:value-of select="$header"/>
    </xsl:if>
    <xsl:for-each  select="//siteMapNode">
      <table>
      <xsl:call-template  name="renderSiteMapEntry"  >
      </xsl:call-template>
      </table>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Bemærk at jeg bruger xsl:param, til at føre ViewData over med. I dette tilfælde bruger jeg parameteren header.

En anden pointe er, at du selvfølgelig kan bruge denne XSLT viewengine, fra andre views. Se nu f.eks. dette “webform” view

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
    <%= Html.ActionLink("SiteMap", "Index", "Demo") %>
    <% Html.RenderAction<DemoController>( a => a.Index()  ); %>
</asp:Content>

Med Html.RenderAction kan man kalde actions på andre controllere. Ovenstående resulterer i, at min sitemap bliver indsat inline. Html.RenderAction kommer med ASP.NET MVC Futures.

Posted by henrikwh | 0 Comments
Filed under:

ASP.NET MVC har også ramt mig

Det har holdt hårdt for mig at komme igang med at kigge på ASP.NET MVC. Hvorfor? Tjaaa. For 5 år siden startede jeg på .NET og dermed også ASP.NET. Jeg kom fra J2EE og Struts 1.1 (MVC).

Jeg blev meget hurtigt betaget af, hvad jeg kunne nå at udrette med ASP.NET programmeringsmodellen og at jeg hurtigt kunne få det til at se nogenlunde professionelt ud. Det var ren Nirvana. Og ja, jeg kunne leve med pagelife cycle, view state, control state, lidt drag & drop programmering, begrænset kontrol over HTML output mm.

Men nu kommer MVC altså tilbage og bider mig bag i. Og ja, jeg kan godt se at det er pænt, rent, testbart, SEO venligere, har bedre speration of concern, ingen viewstate eller tilstand, udvidbart etc.

Det første, måske det eneste, der slår mig er Viewet. Uden hjælp fra Javascript eller JQuery, så føler man sig tilbage til ASP eller JSP. Jeg savner den hurtige udvikling med ASP.NET, specielt UserControls. Prøv bare at sætte dig ned og lav et GridView, med paging, sortering, styling, samt CRUD features. Et optimistisk gæt fra min side ville være en uge – og ja, gå bare amok med JQuery/javascript. 

Jeg tror man skal være meget klar i spyttet når man vælger webprogrammeringsmodel. Der er for og imod begge valg. Nogle overvejelser kunne være:

Hvornår skal man vælge ASP.NET?

  • RAD – Man får hurtigt lavet prototyper
  • Datadrevne line of business applikationer er hurtige at lave
  • Maksimal genbrug af kompetencer fra rige applikationer
  • Rige kontroller

Hvornår skal man vælge ASP.NET MVC?

  • Hvis du kører TDD, så er MVC mere oplagt
  • Hvis du vil have fuld kontrol over HTML
  • Hvis du skal have søgemaskinevenlige URLs
  • Hvis du allerede er bekendt med MVC, og måske har erfaring med andre viewengines ((N)Velocity, NHaml, Brail, og sikkert mange flere)
  • Hvis du ikke har javascriptfobi/kompetence, som mig, så får du det, før projektet er omme
  • Jeg tror på nemmere og billigere vedligeholdelse i ASP.NET MVC projekter. Spørgsmålet er hvor lang levetid forventer du af webapplikationen?
  • I store projekter hvor man måske har UI folk med, som kan HTML, CSS,javascript og måske JQuery på fingerspidserne, er det rimelig oplagt

Måske kan jeg blive medicineret for min javascriptfobi?

Posted by henrikwh | 0 Comments
Filed under: ,

Så ligger Windows 7 på MSDN

God fornøjelse ;-)

Posted by henrikwh | 1 Comments

SQL Azure og Entity Framework 4.0

Endelig har jeg fået mit token så jeg kan komme igang med SQL Azure. På SQL Azure bloggen skriver de hvilke features der er tilstede. Umiddelbart skulle features tilsvare SQL Express.

Helt oplagt er det at køre Entity Frameworket 4.0 mod SQL Azure. Både Studiet og SQL Server Management Studio er ikke blevet opdateret så der er ordentlig undersøttlse for SQL Azure. Men det kan sagtens lade sig gøre. Her er hvad der skal til for at få hul igennem:

  1. Lav din entity model i VS2010. Vælg “Empty model”, istedet for “Generate from database”.
  2. Når du har lavet en model, så højreklikker du på designeren og vælger ”Generate Datebase Script from Model”.
  3. Det kommer der så noget DDL ud af, som ikke er helt klar til SQL Azure
    1. Udkommenter/slet følgende linier lige i starten af scriptet:
      SET ANSI_NULLS ON;
      GO
      USE [DitDatabaseNavn]
    2. Lave en søg og erstat på
      ON [PRIMARY]
      erstart med følgende linie for at udkommentere 
      --ON [PRIMARY]
    3. Dette kunne man automatisere med T4 templates eller MSBuild – formentlig en meget midlertidig løsning indtil det kommer fra produktgruppen.   
  4. Den DDL kan nu afvikles fra SQLCMD.exe mod SQL Azure eller fra SQL Server Management Studio (SMS). For at connecte til SQL Azure fra SMS skal du gøre følgende:
    1. Når du starter SMS, skal du ikke connecte til nogen database.
    2. Tryk på “New Query”
    3. Udfyld connection data, som får fra Azure Management portalen, hvor du allerede har oprettet/navngivet databasen.
      image
      Under “Options>>” skal du have databasenavnet med:
      image
    4. Når du så trykker “Connect” får du formentlig en fejl:
      image
      Den kan du se bort fra. Tryk ok.
  5. Du kan nu køre den DLL du har rettet til, i Query Editoren i SMS.
  6. Så skal du bare have din connectionstring ind i app.config/web.config: 
      <connectionStrings>
        <
    add name="Model1Container" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Server=tcp:a9avwfj86x.ctp.database.windows.net;Database=DINDATABASE;User ID=DITBRUGERNAVN;Password=DITPASSWORD;Trusted_Connection=False;&quot;" providerName="System.Data.EntityClient" />
  7. Så er du køreklar ;-)

Nu skal der testes lidt mere, men der er hul igennem med EF 4.0.

Posted by henrikwh | 3 Comments

WPF Wikipedia Explorer

Jeg faldt lige over denne WPF Wikipedia Explorer og reader. Super lækker! ClickOnce deployed på Azure, data ligger i Azure storage. Du installerer den her.

Wikipedia databasen, som man kan få et dump af, fylder rigtig meget og ville tage 4-6 måneder at konvertere til XML/XAML med “en maskine”. Her har man brugt Azure i et 50 instans setup til at konvertere, og gjorde det på godt 4 dage.

image

Posted by henrikwh | 0 Comments
Filed under: , ,

Azure prismodel

Så er prismodellen for Azure klar i US. Vi mangler dog stadig lokale priser. Prisen kan variere for forskellige datacentre grundet forskellige omkostningsstrukturer i forskellige regioner. Der kommer tre prismodeller:

  • Consumption: Denne model er designet til elasticitet – betal kun for det du bruger.
  • Subscription: Fast pris, uanset forbrug.
  • Volume licensing, har man allerede en EA, så kan man købe over denne.

Comsumption modellen er den der er blevet snakket mest om. Jeg har hørt, at man vil arbejde på subscription de næste måneder, frem mod PDC, fordi man antager at mange kunder gerne vil have "flatrate".

Men prismodellen for Consumption er annonceret og ser ud som følgende:

  • Windows Azure:
    • Compute = $0.12 / hour
    • Storage = $0.15 / GB stored
    • Storage Transactions = $0.01 / 10K
    • Bandwidth = $0.10 in / $0.15 out / GB
  • SQL Azure: Price for value, differentiated with scale, auto high availability, & self-provisioning.
    • Web Edition – Up to 1 GB relational database = $9.99
    • Business Edition – Up to 10 GB relational database = $99.99
    • Bandwidth = $0.10 in / $0.15 out / GB
  • .Net Services:
    • Messages = $0.15/100K message operations – this includes Access Control tokens and reliable queuing
    • Bandwidth = $0.10 in / $0.15 out / GB


Windows Azure Compute koster først når du har valgt at gå i produktion med din applikation. Du betaler altså ikke noget for applikationer der er i test (det er et indbygget stageing miljø i Azure, hvor du altså har adgang til et testmiljø og et produktionsmiljø).

Windows Azure storage er beregnet over et månedligt gennemsnit. Så hvis du uploader 30 GB og har data at ligge en dag, så vil det koste $0.15.

Båndbredde afregnes også over en 30 dages periode. Datatrafik internt i datacenteret er gratis.

På SQL Azure kan man vælge en Web eller en Business Edition. De detaljer jeg har kunne finde om disse er:

  • Web Edition DB: includes
    • Up to 1 GB of T-SQL based relational database
    • Self-managed DB, auto high availability and backup
    • Auto Scale with pay-as-you grow
    • Additional features in the future like auto-partition, CLR, fanouts etc..
    • Best suited for ISVs packaged LOB apps, Departmental custom apps
  • Business Edition DB includes
    • Up to 10 GB of T-SQL based relational database
    • Self-managed DB, auto high availability and backup
    • Auto Scale, Pay-as- you grow
    • Best suited for custom Web applications

Det vil blive lavet en TCO Cost calculator så man kan estimere hvad omkostningerne vil blive på Azure, med consumption. Men værktøjet er her ikke endnu, så du må finde kuglerammen frem;-)

Det er de oplysninger jeg har nu. Hvis jeg skulle blive klogere selvfølgelig nok få en update.

Update 19/07: Læs det samme og mere her.

Posted by henrikwh | 5 Comments
Filed under:
More Posts Next page »
 
Page view tracker