2014-06-30 25 views
10

這個問題是與此相關的一個:Running Azure WebJob without queue計劃Azure的WebJob但NoAutomaticTrigger法不調用

我的情況:我只是想每個小時寫一個文件到Blob存儲,不需要任何排隊系統。從以前的問題,我得到這個代碼 - 這工作得很好第一次被觸發:

[NoAutomaticTrigger] 
    public static void DoWork([Blob("container/foobar.txt")] TextWriter writer) 
    { 
     writer.Write("Hello World " + DateTime.Now.ToShortTimeString())" 
    } 

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

     host.RunAndBlock(); 
    } 

該網站有「AlwaysOn雜誌=真正的」運行和webjob是「運行」所有的時間,但現在調度拋出以下錯誤 - 並且沒有任何反應: 「自工作已經運行後,無法開始新的運行。」

當前結果是該文件只寫入一次。如果我將「AlwaysOn」切換爲false,它「起作用」,但它看起來很髒,因爲如果沒有Always on the job,結果是「Aborted」。

回答

16

標記爲「按需」的作業必須完成。在你的情況下,最後的問題是RunAndBlock調用。如果您調用該方法,則控制檯應用程序將永不停止(這就是爲什麼該作業「已在運行」),因爲RunAndBlock基本上是一個while(true)循環。

RunAndBlock應該只用於連續工作。

+0

感謝 - 作品像魅力。我從這個代碼示例中選取了「RunAndBlock」 - 也許它應該在那裏被刪除: http://aspnet.codeplex.com/SourceControl/latest#Samples/AzureWebJobs/BasicSamples/TableOperations/Program.cs –

+1

嗯..我不得不同意樣本可能會令人困惑。這個想法是把這個工作部署成連續的,而不是按需的。我會看看我是否可以重寫它。感謝您讓我知道 –

+8

我應該使用host.Start()方法手動觸發webjob? – ManirajSS