For your scenario, you could create a background task to listen messages from your service bus queue, then retrieve the message and save it to your database. For example, you could define _maunalResetEvent under Global.asax.cs file:
private static ManualResetEvent _maunalResetEvent = new ManualResetEvent(false);
And add the following code under the Application_Start event of the Global.asax.cs.
ThreadPool.QueueUserWorkItem(_ =>
{
var connectionString = "";
var queueName = "samplequeue";
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
client.OnMessage(message =>
{
var messageBody = message.GetBody<String>();
System.Diagnostics.Trace.TraceInformation(String.Format("Message body: {0}", messageBody));
//TODO: save the message to the database
});
_maunalResetEvent.WaitOne();
});
Moreover, you could use Azure Functions as Joe Wilson answered, and use Azure Service Bus bindings for Azure Functions for event-based message handling instead of creating a timer or scheduler to manually retrieve the queue message(s). Also, you could leverage WebJobs to implement your scenario, details you could follow How to use Azure Service Bus with the WebJobs SDK.
Additionally, for hosting on Azure App service, you app would go idle after a few minutes (20 minutes by default) of inactivity. So you need to enable the Always On option. Note: You could enable Always On to keep your app loaded all the time in Basic or higher app service plan. Details you could follow here.