2014-09-15 12 views
7

W przykładzie this question znajduje się przykład korzystania z webjobu, który może wykonywać pewne operacje w tle bez interakcji z pamięcią tabel.Udostępnianie funkcji webjobs na pulpicie nawigacyjnym bez przechowywania w kolorze niebieskim

Próbowałem replikacji kodu w odpowiedzi, ale rzuca się następujący błąd:

'' Void ScheduleNotifications() nie może być wywołana z Azure WebJobs SDK. Czy brakuje atrybutów SDK Azure WebJobs? "

Podobny błąd wystąpił w this link iw jednej z odpowiedzi stwierdza, że ​​zostało to naprawione w wersji 0.4.1-beta. Używam wersji 0.5.0-beta i wystąpił błąd.

Oto kopia mojego kodu:

class Program 
{ 
    static void Main() 
    { 
     var config = new JobHostConfiguration(AzureStorageAccount.ConnectionString); 
     var host = new JobHost(config); 

     host.Call(typeof(Program).GetMethod("ScheduleNotifications")); 

     host.RunAndBlock(); 
    } 

    [NoAutomaticTrigger] 
    public static void ScheduleNotifications() 
    { 
     //Do work 
    } 
} 

Chcę wiedzieć, czy ja czegoś brakuje lub jest to nadal błąd w Webjobs SDK.

Aktualizacja: Odpowiedź Per Victor, klasa Programu musi być publiczna.

kod robocza:

public class Program 
{ 
    static void Main() 
    { 
     var config = new JobHostConfiguration(AzureStorageAccount.ConnectionString); 
     var host = new JobHost(config); 

     host.Call(typeof(Program).GetMethod("ScheduleNotifications")); 

     host.RunAndBlock(); 
    } 

    [NoAutomaticTrigger] 
    public static void ScheduleNotifications() 
    { 
     //Do work 
    } 
} 

Odpowiedz

18

ile użyć niestandardowego typu lokalizator, funkcja musi spełniać wszystkie warunki poniżej:

  • musi być publiczne
  • musi być statyczna
  • musi być nie abstrakcyjny
  • musi być w nie abstrakcyjnej klasie
  • musi być w publicznej klasie

Twoja funkcja nie spełnia ostatniego warunku. Jeśli sprawisz, że klasa będzie publiczna, zadziała.

Ponadto, jeśli używasz webjobs sdk 0.5.0-beta i uruchamiasz program zawierający tylko kod w twoim przykładzie, zobaczysz komunikat informujący, że nie znaleziono żadnych funkcji.

+0

Dzięki za informacje. Wprowadzę odpowiednie zmiany i przeprojektuję. Dam ci znać, jak to działa. – lopezbertoni

+0

Dzięki za pomoc Victor. To rozwiązało problem. Zaktualizowałem także wersję beta do wersji 0.6.0 i otrzymałem błąd, o którym wspomniałeś. – lopezbertoni

+0

Victor u rock. Dziękuję ci za cystal jasną odpowiedź !!!!!!! –

0

Przyszedłem szukając odpowiedzi tutaj, ale nie znalazłem jej w powyższej odpowiedzi, chociaż wszystko, co powiedział, jest prawdą. Mój problem polegał na tym, że przypadkowo zmieniłem nazwy usług przychodzących witryny sieci Web Azure, tak aby NIE pasowały do ​​atrybutów obiektu, który funkcja miała przechwytywać. Duh!

Na konkretnym przykładzie:

moja praca web słuchał na kolejkę komunikatów w oparciu o tej klasie:

public class ProcessFileArgs 
{ 
    public ProcessFileArgs(); 

    public string DealId { get; set; } 
    public ProcessFileType DmsFileType { get; set; } 
    public string Email { get; set; } 
    public string Filename { get; set; } 
} 

ale mój public static klasy asynchronicznym w pliku Functions.cs zawartego to jako definicja funkcji, w których deklarowane parametry nie odpowiadają nazwom w klasie kolejki komunikatów, dla których została oczekujących:

public static async Task LogAndLoadFile(
     [QueueTrigger(Queues.SomeQueueName)] ProcessFileArgs processFileArgs, 
     string dealid, 
     string emailaddress, 
     string file,    
     [Blob("{fileFolder}/{Filename}", FileAccess.Read)] Stream input, 
     TextWriter log, 
     CancellationToken cancellationToke) 
    { 

Więc jeśli napotkasz t jego problem, sprawdź, czy parametry i nazwy atrybutów są zgodne.

+0

Po prostu z ciekawości, dlaczego masz argumenty w klasie, a także zadeklarowane osobno? – lopezbertoni

+0

Są w osobnych projektach. Klasa ProcessFileArgs, jedna z wielu, jest zadeklarowana w zwykłym projekcie dll, który jest odniesieniem dla zadań sieciowych, w taki sposób, że wiele zadań sieci Web może wysyłać sobie nawzajem komunikaty kolejki. Zwykle - abstrakcja. – Brian

Powiązane problemy