2012-06-18 18 views
9

Tôi đang xây dựng một dịch vụ WCF sẽ trưng ra một số hoạt động, nó sẽ chạy trong IIS vì nó cần các điểm cuối HTTPS. Hầu hết các hoạt động sẽ thực hiện trong vòng vài giây hoặc ít hơn; tuy nhiên, một hoặc hai hoạt động này sẽ mất từ ​​5 đến 90 phút.Cách chính xác để xử lý các hoạt động dịch vụ chạy dài với WCF được lưu trữ trong IIS là gì?

Người tiêu dùng chính của dịch vụ này sẽ là ứng dụng ASP.NET MVC; cách chính xác để xử lý điều này là gì?

Tôi có nên tăng thời gian chờ và thực hiện một số cuộc gọi ajax không? Tôi có nên thêm một bảng vào cơ sở dữ liệu của tôi, và có các hoạt động chạy dài cập nhật cơ sở dữ liệu này, và có giao diện web thăm dò ý kiến ​​bảng này mỗi phút? Tôi không chắc chắn những gì (nếu có) thực hành tốt nhất được chấp nhận chung cho việc này.

+0

Nếu các hoạt động chạy dài không chuyển dữ liệu, thì có thể bạn nên chia nhỏ dữ liệu này thành bộ xử lý không đồng bộ. Vì vậy, khách hàng sẽ yêu cầu công việc được bắt đầu, sau đó kiểm tra lại trong khoảng thời gian thường xuyên để có được một trong hai phản ứng hoặc một tin nhắn nói rằng kiểm tra lại sau. – Noah

+1

@Noah, các hoạt động chạy dài không trả lại nhiều dữ liệu, cho đến khi chúng hoàn tất, nơi chúng trở về một thông báo 50kb. – Nate

+0

Bạn chắc chắn không nên giữ một kết nối http mở trong thời gian dài nếu bạn không chuyển dữ liệu, vì vậy tốt nhất nên chia nhỏ nó. @Jim cung cấp một ví dụ tốt. – Noah

Trả lời

1

tôi đã viết một cái gì đó tương tự như đối với dự án cấp cao của tôi, về cơ bản một khuôn khổ lịch trình công việc.

  1. Tôi chọn đi xuống đường dẫn lưu trữ "trạng thái" của "công việc" trong cơ sở dữ liệu.
  2. Tôi đã viết dịch vụ cửa sổ trình quản lý đã triển khai ứng dụng khách WCF (proxy)
  3. Tôi đã viết một Dịch vụ WCF đã triển khai "máy chủ công nhân" của tôi.

Dịch vụ quản lý sẽ đọc hàng đợi từ cơ sở dữ liệu và giao công việc cho tất cả "công nhân của tôi". Lý do tôi có cửa sổ dịch vụ thực hiện nhiệm vụ này như trái ngược với chỉ có giao diện người dùng nói chuyện trực tiếp với máy chủ công nhân, là bởi vì nó cung cấp thêm một mức kiểm soát đối với toàn bộ quá trình.

Tôi không thích ý tưởng "rút cáp mạng" khỏi máy chủ công nhân và không bao giờ nhận lại cập nhật trạng thái từ công việc cụ thể này. Vì vậy, các dịch vụ cửa sổ mang lại cho tôi khả năng liên tục theo dõi sự tiến bộ của máy chủ công nhân WCF, và nếu một lỗi kết nối bao giờ xảy ra (hoặc cái gì khác không mong muốn), tôi có thể cập nhật tình trạng thất bại. Vì vậy, không có công việc mồ côi.

+0

Có lý do nào bạn đã tự quản lý người quản lý thay vì sử dụng MSMQ? – Nate

+0

Không đặc biệt. Tôi chưa bao giờ sử dụng MSMQ, và như tôi đã nói đây chỉ là một dự án cho trường/COOP. Tôi chắc chắn có rất nhiều cách để cải thiện thiết kế, nhưng nó đủ đơn giản cho những gì tôi cần. Mục đích chính của ứng dụng là để có được một xử lý trên WCF, và mặc dù MSMQ sẽ có ích nhưng nó không phải là trọng tâm. – Jim

+0

Trong thiết kế của bạn, mỗi người trong số các "công nhân của bạn" truy vấn người quản lý tìm kiếm công việc? Hay người quản lý gọi mỗi công việc khi cần? – Nate

0

Hãy xem này

WCF Long Running Operations Có thể có lựa chọn khác, nhưng họ là gần như nhau. Bạn cũng có thể đưa ra một số thông báo đẩy (tôi giả sử không có dữ liệu được trả về) là một int liên kết sau

WCF Push

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