Publicar uma aplicação ASP.NET Core com base de dados...
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