El propósito de este proyecto es demostrar un ejemplo de una aplicación ASP.NET Core que pueda ser usado por los alumnos de la clase de Gestión del Proceso de Desarrollo de Software en la carrera de Ingeniería en Tecnologías de la Información de la Universidad Tecnologóca de Nogales.
La solución cuenta con dos proyectos de tipo ASP.NET Core (MVC y RESTful API) con conexiones a bases de datos de SQL Server, MySQL (tanto locales como en Amazon Web Services RDS) así como SQLite de manera local usando Entity Framework Core y el patrón de diseño Respository para cualquier usar motor de base de datos.
El proyecto está hecho en .NET 7, por lo que es importante instalar tanto el SDK como el ASP.NET Core Runtime antes de ejecutarlo si no cuentas con ello. Puedes verificar si tienes el SDK instalado ejecutando el siguiente comando en la terminal o Powershell:
dotnet --info
En caso de estar instalado, el comando regresará algo parecido a esto:
En caso de no tener una respuesta similar a la anterior:
Opcional, también se recomienda instalar las siguientes herramientas/software para facilitar el desarrollo si no cuentas con ellas aún:
La solución se compone de distintos proyectos individuales:
Este directorio contiene archivos para configurar el control de versiones, así como el README del proyecto y archivos para la publicación en AWS.
.gitattributes
: Configuración de atributos para Git..gitignore
: Configuración sobre qué extensiones o directorios ignorar del control de versiones.Procfile
: Configuración de proyecto para desplegarse en una instancia Windows Server con IIS.aws-windows-deployment-manifest.json
: Configuración de publicación de sitios web en Windows Server con IIS para los proyectos CloudComputingUTN.WebApp y CloudComputingUTN.Servicebuildspec.yml
: Indicaciones para la compilación del proyecto en AWS CodeBuild. Para poder ejecutar un pipeline de manera satisfactoria hay que modificar este archivo para usar el bucket de S3 correcto donde se guardarán los artefactos y la política de permisos en el bucket cambiando el cifrado de AWS KMS a SSE AES256.README.md
: Archivo léeme (este documento).Este directorio contiene dos scripts de SQL para crear la base de datos y crear un usuario de SQL para la conexión con el proyecto.
Este directorio contiene los scripts SQL usados para crear la base de datos y configurar el usuario en la base de datos MySQL.
Este proyecto es una librería de clases para formar los DTO (Data Transfer Object) de las entidades.
Este proyecto contiene las entidades que representan las tablas de la base de datos.
Este proyecto contiene el contexto de EF Core, así como el repositorio y la implementación del repositorio de métodos y funciones de interacció con la base de datos.
Este proyecto contiene las pruebas unitarias del repositorio de métodos y funciones de interacción con la base de datos.
Este proyecto representa una RESTful API con Swagger usando los mismos métodos y funciones de acceso a la base de datos que CloudComputingUTN.WebApp.
Este proyecto contiene las pruebas unitarias de la RESTful API CloudComputingUTN.Service
Este proyecto es para la configuración de una base de datos en memoria de SQLite.
Este proyecto es el sitio web MVC con la base de datos.
Los proyectos CloudComputingUTN.WebApp
y CloudComputingUTN.Service
están configurados de la misma manera. Ambos se ejecutan con una base de datos SQLite en memoria por defecto.
Primero, debes ejecutar el script llamado MuseumDb.sql
localizado en el directorio CloudComputingUTN.SQLServer
en tu instancia de MSSQL. Una vez creada la base de datos de manera satisfactoria, el siguiente paso es ejecutar el script SQL_Login_Setup.sql
para crear el usuario de SQL Server que se usa en la cadena de conexión. Los cambios surtirán efectos al reiniciar el servicio de MSSQLSERVER.
En caso de ejecutarse en localhost (127.0.0.1) no debe realizarase cambio en la cadena de conexión.
En caso contrario debes modificar la propiedad Data Source
de la cadena de conexión MSSQL en los archivos appsettings.json
de los proyectos CloudComputingUTN.WebApp y CloudComputingUTN.Service de esta manera sin corchetes []:
"ConnectionStrings": {
"MSSQL": "Data Source=[TU ENDPOINT DE MSSQL EN AWS RDS AQUI];Initial Catalog=MuseumDb;User ID=museumDb_Developer;Pwd=$tr0ng_p4$$w0rd;TrustServerCertificate=True",
"MySQL": "server=localhost;database=MuseumDb;user=museumDb_Developer;pwd=$tr0ng_p4$$w0rd"
}
Primero, debes ejecutar el script llamado MuseumDB.sql
localizado el directorio CloudComputingUTN.MySQL
en tu instancia de MySQL. Una vez creada la base de datos de manera satisfactoria, el siguiente paso es ejecutar el script UserSetup.sql
para crear el usuario de SQL Server que se usa en la cadena de conexión.
En caso de ejecutarse en localhost (127.0.0.1) no debe realizarase cambio en la cadena de conexión.
En caso contrario debes modificar la propiedad server
de la cadena de conexión MySQL en los archivos appsettings.json
de los proyectos CloudComputingUTN.WebApp y CloudComputingUTN.Service de esta manera sin corchetes []:
"ConnectionStrings": {
"MSSQL": "Data Source=localhost;Initial Catalog=MuseumDb;User ID=museumDb_Developer;Pwd=$tr0ng_p4$$w0rd;TrustServerCertificate=True",
"MySQL": "server=[TU ENDPOINT DE MSSQL EN AWS RDS];database=MuseumDb;user=museumDb_Developer;pwd=$tr0ng_p4$$w0rd"
}
Los proyectos CloudComputingUTN.WebApp y CloudComputingUTN.Service están configurados de la misma manera. Ambos se ejecutan con una base de datos SQLite en memoria por defecto, pero pueden configurarse para ejecutarse con conexión a SQL Server o MySQL de manera local o en AWS RDS mediante símbolos condicionales de compilación.
Por defecto, ambos archivos CloudComputingUTN.WebApp.csproj
y CloudComputingUTN.Serivice.csproj
tienen esta configuración que usará SQLite como base de datos:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>$(DefineConstants);DATABASE_ENGINE_SQLITE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DefineConstants>$(DefineConstants);DATABASE_ENGINE_SQLITE</DefineConstants>
</PropertyGroup>
Para cambiar a Microsoft SQL Server debes remplazar ambos bloques PropertyGroup
por los siguientes:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>$(DefineConstants);DATABASE_ENGINE_MSSQL</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DefineConstants>$(DefineConstants);DATABASE_ENGINE_MSSQL</DefineConstants>
</PropertyGroup>
Para cambiar a MySQL debes remplazar ambos bloques PropertyGroup
por los siguientes:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>$(DefineConstants);DATABASE_ENGINE_MYSQL</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DefineConstants>$(DefineConstants);DATABASE_ENGINE_MYSQL</DefineConstants>
</PropertyGroup>
Por defecto, ambos proyectos CloudComputingUTN.WebApp.csproj
y CloudComputingUTN.Serivice.csproj
están configurados para usar SQLite como base de datos.
Puedes modificar los símbolos condicionales de compilación de ambos proyectos CloudComputingUTN.WebApp y CloudComputingUTN.Service haciendo clic derecho en el proyecto y luego en Propiedades > Build > Conditional Compilation Symbols. Deben de llamarse exactamente igual a los especificados anteriormente:
DATABASE_ENGINE_SQLITE
: Base de datos SQLite. Configuración por defecto.DATABASE_ENGINE_MYSQL
: Base de datos MySQL.DATABASE_ENGINE_MYSQL
: Base de datos SQL.Una vez modificada la condición de compilación puedes ejecutar de manera normal en Visual Studio o con F5.
Abre la solución CloudComputingUTN.sln y ejecuta normalmente. Puedes configurar para que se ejecuten los proyectos CloudComputingUTN.Service
y CloudComputingUTN.WebApp
al mismo tiempo.
Abre el directorio CloudComputingUTN en Visual Code, selecciona CloudComputingUTN.WebApp.csproj o CloudComputingUTN.Service.csproj y presiona F5 para ejecutar. También puedes hacerlo mediante Run > Start Debugging o Run > Start Without Debugging.
Abre una terminal en la misma ruta del proyecto y ejecuta los siguientes comandos
dotnet restore
dotnet build
dotnet test
dotnet run --project CloudComputingUTN.WebApp/CloudComputingUTN.WebApp.csproj
dotnet run --project CloudComputingUTN.WebApp/CloudComputingUTN.Service.csproj