Publicar uma aplicação ASP.NET Core com base de dados SqlServer no Azure usando Visual Studio e um perfil para publicação (publish profile) 1. Instalar no Visual Studio 2017 o workload Azure Development Visual Studio Installer > Mais > Modificar > Selecionar Desenvolvimento para Azure > Modificar 2. Criar uma aplicação Web Api Asp.Net (muito simples, sem autenticação) Visual Studio 2017 > File > New Project >
Executar a aplicação
Adicionar a classe Medicamento na pasta Models TesteWebApiAspNet > Add > New Folder : Models > Add > Class Models Medicamento.cs Gravar. Desaparece o asterisco em Medicamento.cs.
Scaffolding para criar Controlador para a entidade Medicamento Controllers > Add > Controller Selecionar API Controller with actions, using Entity Framework Selecionar a classe do modelo Medicamento e no nome do Controlador retirar e ao plural de Medicamento -> MedicamentosController Premir o botão + e adicionar a classe de contexto TesteWebApiAspNetContext Add Add
Verificar a criação do objeto DbSet para acesso à base de dados (na classe TesteWebApiAspNetContext, subclasse de DbContext) O nome, por omissão, da connectionstring existente no ficheiro appsettings.json é o nome desta classe, TesteWebApiAspNetContext.
Inicializar automaticamente a base de dados no arranque da aplicação. Data > Add > Class DbInitializer.cs public class DbInitializer public static void Initialize(TesteWebApiAspNetContext context) context.database.ensurecreated(); // Look for any medicamentos. if (context.medicamento.any()) return; // DB has been seeded var medicamentos = new Medicamento[] new MedicamentoNome="Brufen", new MedicamentoNome="Ben-u-ron" ; foreach (Medicamento m in medicamentos) context.medicamento.add(m); context.savechanges();
Alterar a classe Program.cs using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Microsoft.Extensions.DependencyInjection; using TesteWebApiAspNet.Data; using TesteWebApiAspNet.Models; namespace TesteWebApiAspNet public class Program //public static void Main(string[] args) // // BuildWebHost(args).Run(); // public static void Main(string[] args) var host = BuildWebHost(args); using (var scope = host.services.createscope()) var services = scope.serviceprovider; try var context = services.getrequiredservice<testewebapiaspnetcontext>(); DbInitializer.Initialize(context); catch (Exception ex) var logger = services.getrequiredservice<ilogger<program>>(); logger.logerror(ex, "An error occurred while seeding the database."); host.run(); public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args).UseStartup<Startup>().Build(); Executar a aplicação
Inspecionar a base de dados View > SQL Server Object Explorer, expandir (localdb)\mssqllocaldb, Databases, TesteWebApiAspNetContext, Tables. Dbo.Medicamento > View Data
3. Criar o Website no Azure Browser > https://portal.azure.com/ + Novo (+ New) > Web + Móvel (Web + Mobile) > Aplicação Web (Web App) Nome da aplicação: Subscrição: Grupo de Recursos:. Criar novo Plano de Serviço de Aplicações: Afixar ao dashboard Criar (Create) TesteWebApiAspNet Microsoft Imagine TesteWebApiAspNet planoservicoapp (West Europe)
4. Obter o perfil para publicação (Get publish profile) Menu superior > Get publish profile
Guardar Ficheiro TesteWebApiAspNet.PublishSettings: <publishdata> <publishprofile profilename="testewebapiaspnet - Web Deploy" publishmethod="msdeploy" publishurl="testewebapiaspnet.scm.azurewebsites.net:443" msdeploysite="testewebapiaspnet" username="$testewebapiaspnet" userpwd="kjknn1xwtshalk89wfwezrhgtea18gx7qvx9chtmknviknmpxwotfe3r0vbt" destinationappurl="http://testewebapiaspnet.azurewebsites.net" SQLServerDBConnectionString="" mysqldbconnectionstring="" hostingproviderforumlink="" controlpanellink="http://windows.azure.com" websystem="websites"> <databases /> </publishprofile> <publishprofile profilename="testewebapiaspnet - FTP" publishmethod="ftp" publishurl="ftp://waws-prod-am2-161.ftp.azurewebsites.windows.net/site/wwwroot" ftppassivemode="true" username="testewebapiaspnet\$testewebapiaspnet" userpwd="kjknn1xwtshalk89wfwezrhgtea18gx7qvx9chtmknviknmpxwotfe3r0vbt" estinationappurl="http://testewebapiaspnet.azurewebsites.net" SQLServerDBConnectionString="" mysqldbconnectionstring="" hostingproviderforumlink="" controlpanellink="http://windows.azure.com" websystem="websites"> databases /> </publishprofile> </publishdata>
5. Publicar a aplicação no Azure Visual Studio 2017 > Bt. dir. do rato em cima do nome do projeto (TesteWebApiAspNet) > Publish Na janela Publish clicar na seta para selecionar o modo de publicação Import profile Publish. Surge a janela Import Publish Settings File através da qual selecionamos o ficheiro TesteWebApiAspNet.PublishSettings gravado anteriormente.
6. Criar base de dados no portal Azure No menu do lado esquerdo selecionar SQL databases (Bases de dados SQL) Clicar no botão + Adicionar do menu superior, para criar uma base de dados
Copiar a connection string e colocá-la na secção ConnectionStrings do ficheiro appsettings.json do projeto VS 2017
Substituindo your_username e your_password nesta ConnectionString pelas credenciais criadas anteriormente para o servidor de base de dados. Gravar o ficheiro appsettings.json. Publicar novamente