Publicar uma aplicação ASP.NET Core com base de dados...

Post on 11-Jan-2020

1 views 0 download

Transcript of Publicar uma aplicação ASP.NET Core com base de dados...

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

Models > Add > Class… 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 Medicamento{Nome="Brufen"}, new Medicamento{Nome="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: TesteWebApiAspNet Subscrição: Microsoft Imagine Grupo de Recursos: . Criar novo TesteWebApiAspNet Plano de Serviço de Aplicações: planoServicoApp (West Europe) Afixar ao dashboard Criar (Create)

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