Laden...

Zwei gleiche Apps auf Azure mit untersch. DB-Verbindung: Wie lokal nicht mit 2 Kopien arbeiten?

Erstellt von micha0827 vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.254 Views
M
micha0827 Themenstarter:in
85 Beiträge seit 2015
vor 6 Jahren
Zwei gleiche Apps auf Azure mit untersch. DB-Verbindung: Wie lokal nicht mit 2 Kopien arbeiten?

verwendetes Datenbanksystem: <MS SQL Server 2016>

Hallo zusammen,

ich habe folgendes Problem:
Ich habe 2 identische Web Application in Azure gehostet. Der einzige "Unterschied" ist, dass beide Application auf unterschiedliche SQL Server zugreifen. Wie kann man das am besten lösen dass ich lokal nicht mit 2 Kopien arbeiten muss ?

Ich denke die beste Lösung ist den unterschiedlichen Connection String in Azure in die Anwendungseinstellungen/Verbindungszeichenfolgen/SQL-Server einzutragen. Habe dazu nur eine Anleitung gefunden: https://azure.microsoft.com/de-de/blog/windows-azure-web-sites-how-application-strings-and-connection-strings-work/

Habe ich das richtig verstanden dass dann der Connection String in der web.config überschrieben wird ? Wie muss dass denn dann in der web.config aussehen ?

Danke
Michael

16.807 Beiträge seit 2008
vor 6 Jahren

Ja, das ist der korrekte Weg.

Die Web.Config stellt den default dar.
Stellst Du nichts in den Azure Settings ein, dann gilt der Wert in der Web.Config.

Setzt Du einen Wert, dann wird der in den Umgebungsvariablen der Anwendung überschrieben.
Der Web.Config Eintrag ändert sich aber nicht.

Die Umgebungsvariablen der Anwendung, also die Settings, die tatsächlich gezogen werden, siehst Du im Azure Portal in der WebApp im Reiter "Kudu".
Die URL ist dann sowas wie https://<name>.scm.azurewebsites.com/env

M
micha0827 Themenstarter:in
85 Beiträge seit 2015
vor 6 Jahren

Danke.

Mein Connection String in der Web.config sieht folgendemaßen aus (sensible Daten hab ich durch * ersetzt):


<add name="***" connectionString="metadata=res://*/Models.***.csdl|res://*/Models.***.ssdl|res://*/Models.***.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=***.database.windows.net;initial catalog=***;persist security info=True;user id=***;password=***;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Was muss ich denn in Azure jetzt als "Name" und "Wert" eintragen ?

Danke
Michael

16.807 Beiträge seit 2008
vor 6 Jahren

Alles innerhalb des Attributs connectionString ist der Wert.
Das sieht bei Dir eben so viel aus, weil Du noch mit Entity Framework EDMX arbeitest.

PS: Dein EDMX-Feature ist für zukünftige Versionen des EF bereits abgekündigt (schon länger).
Das also als Info, dass Du Dir evtl. da irgendwas was Neues einplanen musst.

M
micha0827 Themenstarter:in
85 Beiträge seit 2015
vor 6 Jahren

Danke,

eventuell hast du noch einen Tipp was hier falsch läuft ? Ich bekomme die Fehlermeldung:

System.ArgumentException: Keyword not supported: 'metadata'.

Michael

16.807 Beiträge seit 2008
vor 6 Jahren

Der Fehler taucht eigentlich auch nur im Zusammenhang mit EDMX auf.
Und zwar wenn man im ProviderName statt System.Data.EntityClient einfach System.Data.SqlClient stehen hat.

Letzteres kann mit einem EF ConnectionString für EDMX nichts fangen und es kommt zu dieser Fehlermeldung.

Sicher, dass Du den ConnectionString korrekt im Azure Portal hinterlegt hast?

M
micha0827 Themenstarter:in
85 Beiträge seit 2015
vor 6 Jahren

Also exakt drinstehen habe ich unter

Name: Entities
Wert: metadata=res://
/
.csdl|res:///.ssdl|res:///.msl;provider=System.Data.EntityClient;provider connection string=&quot;data source=.database.windows.net;initial catalog=;persist security info=True;user id=;password=*;MultipleActiveResultSets=True;App=EntityFramework

Bei Provider stand vorher System.Data.SqlClient, das hab ich nach deinem Post geändert. Ändert aber nichts an der Fehlermeldung.

Michael

16.807 Beiträge seit 2008
vor 6 Jahren

Nein, im ConnectionString selbst muss natürlich SqlClient steht, weil EF hier natürlich mit SQL arbeitet.
So wie es auch in Deiner <add-Teile zu sehen ist. Bei EDMX hast Du immer quasi ein "ConnectionString im ConnectionString".

Aber in der Config muss trotzdem als ProviderName wie gesagt EntityClient stehen, wie es weiter oben in Deiner <add..>-Zeile auch zu sehen ist.
Und das löst _eigentlich _diesen Fehler aus.

Deinem ConnectionString, wenn ich das so vergleiche, fehlt aber das abschließende &quot;

M
micha0827 Themenstarter:in
85 Beiträge seit 2015
vor 6 Jahren

Ok, bei Wert steht jetzt drin:

metadata=res:///.csdl|res:///.ssdl|res:///.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.database.windows.net;initial catalog=;persist security info=True;user id=;password=**;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"

Fehler bleibt der gleiche

Wenn ich nur das nehme was in connectionstring drinsteht:

metadata=res:///.csdl|res:///.ssdl|res:///.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.database.windows.net;initial catalog=;persist security info=True;user id=;password=**;MultipleActiveResultSets=True;App=EntityFramework&quot;

Fehler bleibt der gleiche

Vielleicht hilft die Info wie es in Kudu drinsteht:

SQLAZURECONNSTR_Entities = metadata=res:///.csdl|res:///.ssdl|res:///.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.database.windows.net;initial catalog=;persist security info=True;user id=;password=*;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"

Michael

16.807 Beiträge seit 2008
vor 6 Jahren

Auch nein.

Du darfst nur rein schreiben, was das Attribut connectionstring vorsieht und nicht irgendwas erfinden, also wie oben:

metadata=res://*/Models.***.csdl|res://*/Models.***.ssdl|res://*/Models.***.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=***.database.windows.net;initial catalog=***;persist security info=True;user id=***;password=***;multipleactiveresultsets=True;application name=EntityFramework&quot;

providername=EntityClient ist nicht teil des ConnectionStrings.Ist es ja oben auch nicht.

Zudem sind wir hier ja nicht im XML und müssen daher auch nichts escapen; daher wird vermutlich kein quot gebraucht.

metadata=res://*/Models.***.csdl|res://*/Models.***.ssdl|res://*/Models.***.msl;provider=System.Data.SqlClient;provider connection string="data source=***.database.windows.net;initial catalog=***;persist security info=True;user id=***;password=***;multipleactiveresultsets=True;application name=EntityFramework"

Als Typ sollte evtl. mal Custom probiert werden statt SQL Server/SQL Database.
Ist ja ein ConnectionString der nur valide für das EF ist und nicht für SQL Standalone.

Warum Du einmal App=EntityFramework und einmal application name=EntityFramework hast, ist mir jetzt nicht ersichtlich.

Ansonsten gehen zumindest jetzt auch mir die Ideen hier aus.

M
micha0827 Themenstarter:in
85 Beiträge seit 2015
vor 6 Jahren

Das Custom war die entscheidende Änderung. Schade aber auch dass Google da gar kein Ergebnis bringt. EF ist ja nun nichts seltenes.

Danke
Michael