A little more about this demo.

About this project

I have always wanted to create/design/build my own streaming media server. With this project, I proved that it can be done. The goal of this project were to learn about Big Data databases, Cloud computing and the differences between .NET and .NET Core.

This simple MP3 player has just two functions: Return a song list and play a selected song. The flow is simple, too:

  • Users go to the website with their PC or smartphone.
  • The browser automatically requests the song list from the API app.
  • The API queries the database and returns the songs' information (metadata), which the API then sends back to the web app.
  • The web app formats the information into a friendly table, then sends it to the browser or device.
  • The browser code (JavaScript), takes the song list and enables the button to play music when the users click on the "Play" button.
  • Finally, when the user clicks the button, it bypasses the web app and retrieves the song directly from the API. (In the future, it should get the song straight from the BLOB database.)

There are two apps and one database. The Web App (top layer) is the "pretty face" of the application. It lists the songs and then, using JavaScript in the browser, allows you to play the songs.

The middle layer is the REST Web API. Here's the cool part: This is the layer that controls access to the song database. It has no user interface. Instead, it contains a series of API methods that the web layer uses. In this way, the apps are loosely-coupled, which means that the API has no dependencies on the web app. Practically speaking, it means that API can be used in a completely different program (for example, a smartphone app or another server-side microservice).

Finally, there's the Azure BLOB database (the base layer), which is a departure from traditional relational databases. These "NoSQL" databases are focused on high performance with very large data sets. This capability makes Azure BLOB perfect for serving up MP3 files.

About Me

I have been a developer for over twenty years - starting with Excel Macros and progressing through Visual Basic 3-6 then into the .NET world. I've written entire Windows solutions from the form down to the database tables and worked as a team member on large enterprise applications.

For the last seven years, I have been a web developer on the Java/Tomcat stack. As one of the first people hired in a startup, I worked with the leadership teams to craft the front-end of a SaaS application. I helped create standards and libraries to be used by the team then documented it on the team's Wiki.

Meanwhile, Cloud computing took off and with it, brought a sea of change into the programming world. Since I've been laid off, I have been using this time to learn Cloud, microservice/REST and .NET Core technologies. This demo showcases the skills I learned and and demonstrates my ability to self-start and develop end-user solutions.

Thank you for visiting and be sure to check out my LinkedIn profile.

The Solution

Azure Setup

Azure Shell

Azure features used

  • Application Insights
  • Tags
  • Serverless Web App
  • Resource Groups
  • Subscriptions

Future considerations

  • Use of Key Vault for connection string.
  • Restricting the Microservices layer to calls from only the authorized applications.
  • User Azure BLOB database's generate resource link to allow one-use direct access to the media files (instead of passing them through the server).
  • Deeper use of JavaScript's Audio object. (Volume, loading events, etc.)

Miscellaneous notes/Points of interest

  • .NET Core's hook to the configuration settings is a no-frills, you-want-it-you-code-it approach.
  • Once the Azure applications are set up, the Visual Studio integration is a thing of beauty. You can deploy straight to the cloud and it will flip your settings to Release, perform a server restart and launch the browser window.