2014-06-30 43 views
10

Câu hỏi này có liên quan đến cái này: Running Azure WebJob without queueScheduled Azure WebJob nhưng NoAutomaticTrigger-Phương pháp không gọi

kịch bản của tôi: Tôi chỉ muốn viết một tập tin mỗi giờ vào việc lưu trữ blob và không cần bất kỳ hệ thống hàng đợi. Từ câu hỏi cũ tôi đã mã này - mà làm việc tốt lần đầu tiên nó được kích hoạt:

[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(); 
    } 

Trang web đang chạy với "AlwaysOn = true" và webjob là "Chạy" tất cả các thời gian nhưng bây giờ scheduler ném lỗi sau đây - và không có gì xảy ra: "Không thể bắt đầu chạy mới vì công việc đã chạy."

Kết quả hiện tại là tệp chỉ được viết một lần. Nếu tôi chuyển "AlwaysOn" thành false thì "works", nhưng nó có vẻ bẩn vì không có kết quả Always on job là "Aborted".

Trả lời

16

Công việc được đánh dấu là "theo yêu cầu" phải hoàn tất. Trong trường hợp của bạn, sự cố là cuộc gọi RunAndBlock ở cuối. Nếu bạn gọi phương thức đó, ứng dụng bảng điều khiển sẽ không bao giờ dừng lại (đó là lý do tại sao công việc "đang chạy") bởi vì RunAndBlock về cơ bản là vòng lặp while(true).

RunAndBlock chỉ nên được sử dụng cho các công việc liên tục.

+0

Cảm ơn - hoạt động như một sự quyến rũ. Tôi lấy "RunAndBlock" từ ví dụ mã này - có lẽ nó cũng nên được gỡ bỏ ở đó: http://aspnet.codeplex.com/SourceControl/latest#Samples/AzureWebJobs/BasicSamples/TableOperations/Program.cs –

+1

Hm .. Tôi phải đồng ý rằng mẫu có thể gây nhầm lẫn. Ý tưởng là triển khai công việc đó liên tục, không theo yêu cầu. Tôi sẽ xem nếu tôi có thể viết lại nó. Cảm ơn bạn đã cho tôi biết –

+8

Tôi có nên sử dụng phương thức host.Start() để kích hoạt webjob theo cách thủ công không? – ManirajSS

Các vấn đề liên quan