First impact with Microsoft's Cloud.
I must admit it: I've been slow and late in adopting Azure and cloud technologies in general. Recently, I had to face my lacks of competences while a couple of customers already caught the wave and kindly convinced me to do the same.
Not that it wasn't on my schedule, on the contrary: having developed my latest projects on top of Asp.Net Core and worshipping the Microservices doctrine, I definitely needed a modern platform where I could potentially grow ...undefinitely!
It took me nothing more that couple of days (let's say a week?) to feel confident with the system and to migrate my business.
I'm now fairly happy with it. With "my business" I mean my new Asp.Net Core multi-tenancy website, my IdentityServer fork host, two of my databases and all my email accounts (moved to Office365).
It's been a pleasant experience: Azure Portal is friendly enough and it just works, the possibilities in terms of configuration look endless, so are the tools exposed by the platform that I could take advantage of.
Everything comes with a price. No, I'm not talking about the monetary costs: as part of the MPN, my monthly bill should not roar at all (even if the cost forecasts differ quite a bit from those yielded by the seductive pricing calculator). What I'm talking about are some constraints I had to deal with.
Aka: goodbye System IO.
It is good practice to move all the static files outside the costly App Service storage. Onto Azure Files, for instance. That done, you cannot lean on good old
System.IO libraries anymore.
In order to access the storage you're now forced to use the new SMB 3.0 protocol.
Solution: I abstracted the basic IO functionalities and wrapped them around the provided Storage SDK.
Aka: goodbye System.Drawing.
I know I'm a bit old-fashioned, but I enjoyed manipulating bitmaps that way (I mean, via
GDI+) since Asp.Net v1, getting nostalgic here. Server-side image processing might not be the most convenient way to whip the precious VM CPU, but it grants to have the task done fairly quickly, anyway, again,
GDI+ is not allowed on Azure, even if the app targets the Full-Framework.
Cache. Consider moving to a distributed cache system (e.g. Redis).
Mail sending. Abandon
System.Net.Mail.SmtpClient for a cloud service like SendGrid.