publicar uma aplicação asp.net core com base de dados...
TRANSCRIPT
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