2011-05-19 36 views
6

Tôi tự hỏi liệu có cách nào để sử dụng các tác vụ đã lên lịch với SQL Azure không? Mọi trợ giúp đều được đánh giá cao.Tác vụ theo lịch trình với Sql Azure?

Vấn đề là, tôi muốn chạy một tuyên bố đơn giản, đơn dòng mỗi ngày và muốn ngăn việc thiết lập vai trò của nhân viên.

+0

Tôi muốn truy cập http://www.mygreatwindowsazureidea.com/ và bỏ phiếu cho tính năng này! – ryancrawcour

Trả lời

6

Không có đại lý SQL tương đương với SQL Azure hôm nay. Bạn sẽ phải gọi câu lệnh một dòng của bạn từ một tác vụ nền. Tuy nhiên, nếu bạn đã có một Vai trò Web, bạn có thể dễ dàng sinh ra một chuỗi để xử lý điều này trong vai trò web của bạn mà không cần phải tạo một Vai trò Công nhân. Tôi viết blog về khái niệm here. Để sinh ra một luồng, bạn có thể làm điều đó trong trình xử lý sự kiện OnStart() (trong đó cá thể Role chưa được thêm vào bộ cân bằng tải), hoặc trong phương thức Run() (trong đó cá thể Role đã được thêm vào tải cân bằng). Thông thường, bạn nên thiết lập trong OnStart(). Một cảnh báo có thể không rõ ràng, cho dù bạn thực hiện cuộc gọi này trong vai trò nhân viên của chính nó hay trong một chuỗi nền của Vai trò Web hiện tại: Nếu bạn quy mô Vai trò của mình thành hai trường hợp, bạn cần đảm bảo rằng cuộc gọi hàng ngày chỉ xảy ra từ một trong các trường hợp (nếu không bạn có thể kết thúc với một trong hai bản sao, hoặc một hoạt động có thể tốn kém được thực hiện nhiều lần). Có một vài kỹ thuật bạn có thể sử dụng để tránh điều này, chẳng hạn như một bảng hàng khóa hoặc thuê Azure lưu trữ blob. Với trước đây, bạn có thể sử dụng hàng đó để lưu dấu thời gian của lần cuối cùng hoạt động được thực hiện. Nếu bạn có được khóa, bạn có thể kiểm tra xem liệu các hoạt động xảy ra trong một thời gian thiết lập cửa sổ (có thể là một giờ?) Để quyết định xem một trong những trường hợp khác đã thực hiện nó. Nếu bạn không có được khóa, bạn có thể giả định một cá thể khác có khóa và đang thực hiện lệnh. Có những kỹ thuật khác - đây chỉ là một ý tưởng.

+0

Điều đó nghe có vẻ phức tạp. – BitKFu

+0

hmmm. nhưng tôi chỉ có một vai trò dịch vụ WCF tại chỗ. Vai trò dịch vụ WCF có quá tải không? – BitKFu

+1

Thuật ngữ 'Vai trò' đồng nghĩa với 'Mẫu máy ảo'. Tất cả Windows Azure Roles tương đương với Windows Server 2008 SP2 hoặc Windows Server 2008 R2. Và, giống như vai trò Web và vai trò công nhân, vai trò web WCF có OnStart() và Run(). Bạn có thể chạy các tác vụ nền của bạn trong bất kỳ công việc nào trong số đó. –

3

Ngoài câu trả lời của David, nếu bạn có rất nhiều nhiệm vụ lên kế hoạch để làm sau đó nó có thể là giá trị xem xét:

(Bạn có thể sử dụng quartz.net trong chuỗi mà David đề cập, nhưng lokad.cloud sẽ yêu cầu thay đổi kiến ​​trúc lớn hơn một chút)

+0

+1 cho các khung lập lịch biểu dựng sẵn. Tùy chọn Lokad là một phần của giải pháp lớn hơn được thiết lập để xây dựng các ứng dụng Windows Azure và nếu tất cả những gì bạn cần là lên lịch, giải pháp quartz.net sẽ có vẻ phù hợp hơn. –

2

Tôi hy vọng có thể nói về công ty của bạn. Chúng tôi có một dịch vụ dựa trên web cho phép bạn thực hiện việc này. Bạn có thể nhấp vào liên kết này để xem thêm chi tiết về cách schedule execution of SQL Azure queries.

+1

Tôi đã thử giải pháp này, rất tuyệt! – ryancrawcour

2

Khắc phục sự cố nhiều vai trò thực thi cùng một tác vụ, bạn có thể kiểm tra id vai trò vai trò và đảm bảo rằng chỉ phiên bản đầu tiên mới thực hiện tác vụ.

using Microsoft.WindowsAzure.ServiceRuntime; 

     String g = RoleEnvironment.CurrentRoleInstance.Id; 
     if (!g.EndsWith("0")) 
     { 
      return; 
     } 
Các vấn đề liên quan