2010-09-08 44 views
7

Có cách nào để sử dụng NServiceBus với Asp.Net MVC 2 không? Tôi muốn gửi một tin nhắn yêu cầu từ một ứng dụng Asp.Net MVC2 đến một dịch vụ, xử lý tin nhắn và trả lời với một thông báo phản hồi. có cách nào để làm điều này rõ ràng không?Sử dụng NServiceBus với Asp.Net MVC 2

+0

Trường hợp sử dụng cụ thể của bạn là gì? Bạn có thể cung cấp thêm chi tiết về những gì bạn đang cố gắng hoàn thành, vì vậy tôi không phải đoán? –

Trả lời

14

Nếu bạn thực sự muốn làm điều này, dưới đây là cách:

var sync = Bus.Send<SomeMessage>(/*data*/) 
    .Register((AsyncCallback)delegate(IAsyncResult ar) { 
     var result = ar.AsyncState as CompletionResult; 

     // do something with result.Messages 
    }, 
    null 
); 

sync.AsyncWaitHandle.WaitOne(/*timeout*/); 
+0

Cảm ơn, hoạt động rất tốt đẹp và làm tất cả những gì tôi muốn. –

18

Có một lý do khiến NServiceBus chỉ hỗ trợ đăng ký gọi lại cho mã trạng thái và int. Lý do đó là bạn không nên sử dụng NServiceBus cho yêu cầu đồng bộ/phản hồi kiểu giao tiếp, những kịch bản đó được giải quyết tốt nhất với các khung như Wcf, NNibernate, EF, Ado.net, v.v.

Bạn nên xem xét chỉ sử dụng NSB cho không đồng bộ các phần của ứng dụng của bạn muốn gửi "lệnh" tới các dịch vụ phụ trợ để xử lý.

An giải thích sâu có thể được tìm thấy ở đây:

http://andreasohlund.net/2010/04/22/messaging-shouldnt-be-used-for-queries

Nếu bạn vẫn muốn làm request/response với NSB bạn sẽ phải làm việc cho nó :) sử dụng một messagehandler trả lời của bạn đó cập nhật một số bộ nhớ cache trong ứng dụng MVC của bạn. Với điều đó tại chỗ bạn có thể thực hiện một số kiểu bỏ phiếu ajax để xác định thời điểm dữ liệu đến.

Hy vọng điều này sẽ hữu ích!

+0

+1 Tôi đã cố gắng hiểu tại sao tôi cần NServiceBus cho đồng bộ req/resp (như bạn nói nó không có nghĩa là một req/resp công nghệ đồng bộ) và tôi tìm thấy câu trả lời của bạn rất hữu ích –

0

Nếu đây là một dự án Greenfield, tôi rất muốn giới thiệu suy nghĩ về việc sử dụng mô hình Tách lệnh truy vấn mà sẽ giúp bạn lo ngại một cách logic riêng biệt liên quan thay đổi trạng thái trong miền kinh doanh (lệnh) và các truy vấn chỉ hoạt động như một cơ chế mô tả trạng thái. Sau đó, Lệnh có thể được thực hiện trong NServiceBus và Truy vấn bằng cách sử dụng WCF chẳng hạn.

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