Laden...

Azure AppService & Docker & Dependency Injection

Letzter Beitrag vor 3 Jahren 5 Posts 425 Views
Azure AppService & Docker & Dependency Injection

Hallöle,

sorry zunächst, für den Betreff. Mir ist nichts besseres eingefallen. So, ich bin hier etwas am verzweifeln. Ich habe folgendes Setup

  • .NET 5 Web API
  • nuxt SPA
  • nginx Proxy

Alle Komponenten werden als Docker Container gebaut und in eine Azure Registry gepumpt. Ziehe ich mir jetzt lokal alle Docker Container via docker-compose in eine lokale Umgebung und starte das Ganze, funktioniert es wie erwartet und alles ist gut. Ziehe ich die nahezu identische docker-compose Datei in ein Azure AppService, verhält sich das auf einmal etwas anders. Sprich, es geht nicht 🙂

Was genau ist das Problem?
Ich nutze MediatR für das CQRS Pattern und Lamar als DI Container. Lasse ich mir beim Start der WebAPI über einen HostedService ausgeben, was alles gescannt wurde von Lamar, sehe ich alle drei Assemblies meiner Solution. Nennen wie sie mal Project.Api, Project.Models und Project.Models.SubModel. Also die Assemblies sind da und geht auch nichts verloren (was aber auch ziemlich merkwürdig wäre, da der Docker Container lokal/AppService identisch ist). Lasse ich mir auch ausgeben, was Lamar alles registriert hat, sehe ich zig "IRequestHandler<DummyRequest, DummyResponse" Registrierungen. Alle meine RequestHandler halt. Das ist lokal.

Starte ich den AppService jetzt via docker-compose und lasse mir das Log ausgeben, sehe ich auch alle von Lamar gescannten Assemblies (die drei oben), ABER es fehlen nahezu alle Registrierungen. Es ist nur ein Bruchteil von dem, was eigentlich alles dabei ist. Einzig die Registrierungen für FluentValidation sind sichtbar. Alles andere verpufft also.

Tja, und da komme ich nicht weiter. Ich sehe den Unterschied nicht und weiß nicht, wo ich ansetzen soll. Wie gesagt, der Docker Container ist identisch. Es kann also ja an sich nicht an den Binärdaten liegen. Die Konfiguration zwischen lokal/AppService unterscheidet sich nur an der BaseURL für die nuxt Anwendung und dem ConnectionString zum Azure Sql Service. Alles andere ist ebenfalls identisch.

Woran kann das liegen, dass Lamar einfach nichts findet, obwohl er die gleichen Assemblies scannt?

Oder ist das noch ne Macke von den AppServices, da docker-compose noch experimentell ist?

Ich bräuchte einfach mal ein paar Ideen 🙂

Gruß
Khalid

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Ich kann mir beim besten Willen nicht vorstellen, wie daran die äußere Umgebung schuld sein soll oder kann.
Daher will ich einfach pauschal ausschließen, dass es an Azure bzw. der äußeren Umgebung des Containers liegt.

Viel wahrscheinlicher ist, dass was im Container nicht stimmt oder dass etwas an der Configuration nicht stimmt, sodass das Auswirkungen auf Dein Startup hat aka Auswirkungen auf Lamar hat.
Lamar klingt sich tief in die Hosting Config ein; würde mich nicht wundern, dass da was Murks wird, wenn etwas nicht stimmt.

Die Konfiguration zwischen lokal/AppService unterscheidet sich nur an der BaseURL für die nuxt Anwendung und dem ConnectionString zum Azure Sql Service. Alles andere ist ebenfalls identisch.

Das kann nicht sein, denn jeder Container im App Service bekommt von Haus aus eine riesen Liste an Standard Parametern der App Service Umgebung.

Danke für die Antwort

Ich kann mir beim besten Willen nicht vorstellen, wie daran die äußere Umgebung schuld sein soll oder kann.

Tja, frag mich mal 😁

Ok, dass Azure noch eine Liste weiterer Parameter dazu gibt, wusste ich jetzt so nicht. Dann bastel ich mal ein wenig weiter und lasse mir mal alles ausgeben, was da noch so reinkommt. Kann mir auch nur vorstellen, dass da irgendwas quer schießt.

Gruß
Khalid

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Im Kudu Log siehst Du alle Parameter

Oh mein Gott ist das peinlich 😁

Ja, der Fehler lag bei mir... Da flog ne Exception, die die Registrierung unterbrochen hat. Die Exception wurde - aufgrund der massiven Dummheit des Entwicklers (also ich) - gefangen und als Debug-Type ins Log gefeuert (Log war natürlich auf Information gestellt). Tja, und so weiter und so weiter.

Aber das schöne bei sowas ist natürlich, dass ich viele Dinge in der Zwischenzeit über Azure gelernt habe. Ich kann z.B. sagen, dass App Services über docker-compose an sich super funktionieren 🙂

Gruß
Khalid

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)