2014-11-17 13 views
12

Ich habe ein azur webjob bekam, die einige appsettings für api Tasten usw.Azure webjobs nicht auf die Website zu lesen appSettings

Ich habe auch eine Reihe von PRODUCTION azur App-Einstellungen bekam (im Portal angegeben), dass sollte überschreiben meine webjob config appsettings .. Aber sie nicht.

Für meine Website funktionieren sie wie erwartet, und alles ist in Ordnung. Bei den Webjobs werden sie jedoch komplett ignoriert, stattdessen werden meine App-Einstellungen aus der Config verwendet.

Ist das ein Fehler in Azur? Alle Dokumente deuten darauf hin, dass dies funktionieren sollte.

EDIT

Ich fand this blog alle über die Verwendung von CloudConfigurationManager.GetSetting so habe ich realisiert, dass es immer noch nicht funktionieren - immer noch mit den Einstellungen, die in Web-Job App-Einstellungen definiert sind Datei :(

Dank

Antwort

6

So sieht es aus wie ich einen Bug gefunden habe!

es ist, weil mein AppSettings aus einer anderen Datei referenziert wurden, lik e this (in app.config):

<AppSettings file="appsettings.config"/> 

Dies bricht grundsätzlich Azure Config Management.

+0

Sie sollten diese Marke als answ ähm dann. –

+0

Also, was ist die Lösung hier? –

+0

Aus welchem ​​Grund haben Sie sie in einer separaten Datei gespeichert? Wenn Sie dies nur in Dev/Debug benötigen, könnten Sie eine Web-Konfigurations-Transformation für Debug erstellen, um diese separate Datei zu verwenden und diese dann aus den Transformationen herauszulassen oder nicht, für die anderen Umgebungen –

1

Verwenden

"D: \ home \ site \ wwwroot \" einen absoluten Pfad zu Dateien innerhalb Ihrer Website zu erstellen.

in Ihrem WebJob, um auf eine beliebige Datei in Ihrem wwwwroot-Verzeichnis zu zeigen. Die Verwendung des absoluten Pfads mit D: \ home \ site \ wwwroot \ appsettings.config sollte Ihre Website reparieren.

+1

Auf diese Weise sorgen Sie sich nur um eine Konfigurationsdatei. Ich mag das. –

1

Haben Sie Ihre Einstellungen nur in der Datei "Web.config" vorgenommen oder haben Sie sie im Portal oder mithilfe der VS-Websiteeinstellungen festgelegt? Sie müssen die WebJobs-Einstellungen auf dieser Ebene festlegen, nicht nur in der Web.config. Sobald Sie das getan haben, starten Sie Ihre Website neu, und die Einstellungen sollten dort sein.

0

Eine Problemumgehung für dieses Problem besteht darin, die Einstellungen wie folgt in das AppSettings-Tag der Web.config zu platzieren.

0

Ich hatte ein ähnliches Problem, aber für mich war es, dass wir den "is_in_place" settings.job Wert auf True setzen. Ich denke, wenn es vorhanden ist, wird die Konfigurationsdatei mit den Einstellungen nicht aktualisiert. Wir hatten keine strikte Anforderung, dass es an Ort und Stelle lief, also beseitigte diese Einstellung das Problem für uns.

0

Ich habe ein ähnliches Problem mit mehreren Web-Aufträgen, die eine gemeinsame Einstellungsdatei teilen. Es wäre unbequem, die Einstellungen in jedem Job zu duplizieren.

Jemand erwähnte configSource= anstelle file= in der app.config, um die externe Konfigurationsdatei zu referenzieren. Ich habe das versucht, und es scheint, dass es jetzt wie erwartet funktioniert. Die Einstellungen werden jetzt aus den Portal-App-Einstellungen anstelle der Datei übernommen.

Glücklicherweise stammen die Einstellungen für die Web-Jobs alle aus der externen Datei. Die Verwendung von file= ermöglichte es mir, zusätzliche Einstellungen pro App als nur in der Datei zu verwenden, aber zum Glück muss ich das nicht tun.

0

Azure App Service-Anwendungseinstellungen werden in den Umgebungsvariablen beibehalten. Wechseln Sie zum Azure-Portal, um Ihre Anwendungseinstellungen oder Verbindungszeichenfolgenwerte hinzuzufügen. Dann können Sie die Umgebungsvariablen der App-Service Check-out um https://sitename.scm.azurewebsites.net

Wenn Sie Ihre webjobs möchten, diese Einstellungen zu teilen, in Ihrem webjob Projekt, erstellen Sie eine appsettings.json:

{ 
    "APPSETTING_AzureWebJobsDashboard": "", 
    "APPSETTING_AzureWebJobsStorage": "", 
    "SQLAZURECONNSTR_xxx": "" 
} 

In Ihrem Haupt() -Methode

private static void Main(string[] args) 
{ 
      var builder = new ConfigurationBuilder() 
       .SetBasePath(Directory.GetCurrentDirectory()) 
       .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
       .AddEnvironmentVariables(); 

      var configurations = builder.Build(); 

      var services = new ServiceCollection() 
       .AddDbContext<ApplicationDbContext>(options => 
         options.UseSqlServer(configurations["SQLAZURECONNSTR_xxx"]), 
        ServiceLifetime.Transient) 
       .BuildServiceProvider(); 

      var host = new JobHost(new JobHostConfiguration 
      { 
       DashboardConnectionString = configurations["APPSETTING_AzureWebJobsDashboard"], 
       StorageConnectionString = configurations["APPSETTING_AzureWebJobsStorage"] 
      }); 

      host.RunAndBlock(); 
     } 

das ist einfacher als zu versuchen, den Pfad zu der Website Config auf dem App-Dienst, um herauszufinden,

Verwandte Themen