.net Core / Angular / konfiguracja

Publikacja .NET Core 2.2 w IIS 7.0 na serwerze Windows 2008 R2

Szkielet aplikacji mam zrobiony i czas ją opublikować w środowisku testowym. U mnie jest to Windows 2008 R2 (dość archaicznie, ale działa), na który postawiony jest IIS i MariaDB. Pula ciała w zarządzanym trybie potokowym na koncie LocalSytem.
Zrobiłem publisha aplikacji no i dostałem pierwszy błąd.

Po instalacji .NET Core Hosting Budle 2.2 i restarcie serwera Windows 2008 R2 komunikat się zmienił na:

Po zajrzeniu do EventLoga okazało się, że nie aplikacja nie może utworzyć pliku logu, co było efektem aktywacji logowania w web.configu.

<aspNetCore processPath="dotnet" arguments=".\App.Web.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout">

Wystarczyło utworzyć katalog logs w katalogu aplikacji i pojawił się plik logu. Mimo wykonania powyższej czynności aplikacja cały czas wyświetlała ten sam błąd w przeglądarce, ale w logu już można się było dowiedzieć, że nie został podany querystring do bazy dany. No to go uzupełniłem

"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=X;User Id=X;Password=X"
}

Kolejnym błędem okazało się brak jawnego typowania pól decymalnych w modelu danych:

warn: Microsoft.EntityFrameworkCore.Model.Validation[30000]
No type was specified for the decimal column ‚X’ on entity type ‚XModel’. This will cause values to be silently truncated if they do not fit in the default precision and scale. Explicitly specify the SQL server column type that can accommodate all the values using ‚HasColumnType()’.

Poprawiłem błąd poprzez dodanie atrybutów:
[Column(TypeName = „decimal(18,2)”)]
do wszystkich pól w klasach modelu danych.

Kolejnym problemem był niewłaściwy connectionstring. Ponieważ baza MariaDB działa na niestandardowym porcie (a standardowy to 3306) musiałem dodać odpowiedni wpis do connectionstringa:

„ConnectionStrings”: {
„DefaultConnection”: „Server=localhost;port=XXXX;Database=X;User Id=X;Password=X”
}

Ale to nie rozwiązało jeszcze wszystkich moich problemów, bo zapomniałem zmienić adresy issuer i audience dla JWT:

"Jwt": {
      "Issuer": "http://localhost:18093/",
      "Audience": "http://localhost:18093/",
      "Key": "123",
      "TokenExpirationInMinutes": 86400

Finalnie musiałem jeszcze tylko zmienić adres api aplikacji w Angularze.
I działa!!!!

Leave a Reply

Your email address will not be published. Required fields are marked *