Atualizar uma página da Web como um processo é executado

Tenho uma página na qual ocorrem várias funções demoradas. O que eu gostaria de fazer é que, à medida que cada etapa do processo seja concluída, atualize a página da Web para que o usuário saiba qual etapa foi concluída. Essencialmente, o usuário envia uma consulta e, em seguida, o servidor consulta um banco de dados, processa os dados, desenha uma imagem e exibe os resultados na página. Quero que a página da web diga em que etapa está a função. Ele diria "Consultando" e depois "Processando" ... et

Pseudo

protected void Search(object sender, EventArgs e){

    //display that the process has begun
    List queryResults = Query()
    //display that the query is finished
    foreach(item in queryResults){
       ProcessItem(item)
       //display that item has been processed
       Render(item)
       //display item has been rendered
    }

} 

Procurei usar o Ajax para atualizar a página sem recarregá-la, mas, pelo meu entendimento simples (experiência zero com o Ajax), o cliente solicitava um arquivo do servidor. O Ajax é a ferramenta necessária para isso? E se sim, isso significa que, na área comentada, eu enviaria uma resposta ajax ao cliente?

questionAnswers(3)

yourAnswerToTheQuestion