Send til redaktion@dotnyt.dk hvis du har feedback, gode idéer, konstruktiv kritik eller svinere. Alt har interesse!
Nyheder til dig som udvikler softwareprodukter til skyen med Microsoft-teknologi
12. juli 2022, du lytter til Dotnyt – I dag skal vi snakke om hvad det vil sige at køre med “dot net isolated”. Hvis du bruger Visual Studio 2022 og vil oprette en ny Azure Function, så vil den spørge dig om du ønsker at bruge dot net eller dot net isolated.
Det viser sig at være en ret afgørende beslutning på nogle punkter og ret ligegyldigt på andre punkter.
Ved første øjekast ser det helt almindeligt ud men der er små forskelle. Normalt kan man returnere et OkObjectResult fra en Azure Function men med isolated skal man returnere en HttpResponse.
Der er flere små forskelle. Når man modtager et json objekt i et http endpoint skal man normalt læse strengen fra request objektet og deserializere til en klasse. Men med isolated kan man bare inkludere de enkelte parametre direkte i metodens signatur. Det er ikke rigtig dokumenteret så vidt jeg kan se men det virker bare. Smart.
Med isolated får man ikke en logger forærende, den skal man selv lave.
Og pointen her er nok at det er to forskellige SDK’er. Altså det SDK som gør det muligt at køre noget C# kode i en Azure Function er vidt forskellige afhængigt af om man kører .NET eller .NET Isolated.
Men hvad handler det egentligt om? Hvad er det her “isolated” for noget? Hvad er det isoleret fra?
Jo, det er isoleret fra den proces der faktisk kører på den web server hvor Azure function afvikles. Det hedder en Function App – og faktisk er det en App Service. På serveren kører en proces og spørgsmålet er om din Azure Function skal køre i den proces på webserveren – eller om den skal være ISOLERET fra den proces. Når den er isoleret så er den teknisk set bare et class library.
Når du kører isolated har du i princippet større kontrol over din kode. Du kan køre Dependency Injection som normalt i stedet for de benspænd der er i Azure Functions. Der vil være færre konflikter fordi kontaktfladen med Functions er mindre. Du kan selv læse mere om detaljerne i det link jeg har tilføjet i kommentarerne til podcastet her på Dotnyt.
Men hovedpointen er nok at det er to forskellige metoder til at afvikle Azure Functions og de ligner hinanden til forveksling men hvis man oplever problemer kan det nemt være at løsningen til isolated ikke fungerer til functions som ikke kører isolated og omvendt. For mig gælder det altså om at vælge det mest populære for så er jeg bedst dækket ind hvis der er problemer.
Jeg havde et problem med et projekt hvor jeg kørte isolated i Azure og Microsoft supporteren havde ikke selv hørt om isolated. Man kan ikke bruge isolated med durable functions. Det virker ikke uden videre på Mac med Visual Studio 2022. Der er mange problemer rapporteret med dot net isolated.
Min dom er helt sikkert at jeg vil lige nu anbefale at man ikke bruger isolated medmindre man har en god grund til det. Men jeg synes det ser ud til at feinschmekkere foretrækker isolated sådan principielt set og det kan antyde at det bliver mere og mere fremtrædende og måske skal man allerede genoverveje det når .NET 7 udkommer sidst på året. Temaet i .NET 7 er netop “containers and cloud” og det er jo netop her isolated har relevans – men mere om det en anden god gang.