2014-09-30 8 views
13

Sono nuovo di Azure WebJobs, ho eseguito un esempio in cui un utente carica un'immagine per il blob storage e inserisce un record nella coda, quindi il lavoro recupera quello dalla coda come un segnale per fare qualcosa come ridimensionare il immagine caricata. Fondamentalmente nel codice il lavoro usa l'attributo QueueTrigger su un metodo statico pubblico per fare tutto questo.Web di Azure - Nessuna funzione trovata - Come posso creare un lavoro senza trigger?

Ora ho bisogno di un lavoro che faccia qualcosa come inserire un record in una tabella di database ogni ora, non ha alcun tipo di trigger, funziona solo da solo. Come faccio a fare questo?

ho cercato di avere un metodo statico e in essa io fare l'inserto al db, il lavoro è stato avviato ma ho avuto un messaggio che dice:

Nessun funzioni che si trovano. Prova a rendere pubbliche le classi di lavoro e pubblica i metodi statici.

Cosa mi manca?

Modifica Dopo la risposta di Victor ho provato la seguente,

static void Main() 
{ 
    JobHost host = new JobHost(); 
    host.Call(typeof(Program).GetMethod("ManualTrigger")); 
} 

[NoAutomaticTrigger] 
public static void ManualTrigger() 
{ 
    // insert records to db 
} 

ma questa volta ho avuto InvalidOperationException,

'ManualTrigger Void()' non può essere invocato da Azure WebJobs SDK. Mancano gli attributi di SDK WebJobs di Azure?

risposta

13

Se non si utilizza alcun attributo di ingresso/uscita dalla WebJobs SDK (QueueTrigger, Macchia, Tavolo, ecc), è necessario decorare il lavoro con la NoAutomaticTrigger attributo di essere riconosciuto dal SDK.

+0

Grazie Victor per la tua risposta, ho provato NoAutomaticTrigger e ho ottenuto un InvalidOperationException, ho aggiornato la mia domanda con il codice che ho, potresti aiutarmi a vedere cosa sto facendo male, per favore. Molte grazie! –

+3

Quale versione dell'SDK stai utilizzando? La classe è pubblica? –

+3

Ah hai ragione, ho appena dichiarato "pubblico" sul "programma di classe", viene eseguito tuttavia mostra il messaggio sotto per un paio di secondi e poi la finestra della console si blocca. Messaggio: "Trovato la seguente funzione: WebJob1.Program.ManualTrigger Esecuzione: 'Program.ManualTrigger' perché questa era la funzione waas chiamata in modo programmatico tramite le API host." –

2

È possibile utilizzare l'ultimo SDK di WebJobs, che supporta l'attivazione delle funzioni di lavoro in base alla pianificazione, in base allo stesso formato di espressione CRON. Si può usare per pianificare il vostro lavoro ogni ora:

[Disable("DisableMyTimerJob")] 
public static void TimerJob([TimerTrigger("00:01:00")] TimerInfo timerInfo, TextWriter log) 
{ 
    log.WriteLine("Scheduled job fired!"); 
} 

Inoltre, l'SDK WebJobs ha anche un DisableAttribute che può essere applicato a funzioni, che consente di attivare/disattivare le varie funzioni sulla base di impostazioni dell'applicazione. Se si modifica l'impostazione dell'app nel portale di gestione di Azure, il lavoro verrà riavviato (https://azure.microsoft.com/en-us/blog/extensible-triggers-and-binders-with-azure-webjobs-sdk-1-1-0-alpha1/).

Problemi correlati