2008-12-30 32 views
25

Tôi có một dịch vụ WCF mà tôi gọi từ một dịch vụ cửa sổ.Làm thế nào để thực hiện cuộc gọi đến dịch vụ WCF của tôi không đồng bộ?

Dịch vụ WCF chạy gói SSIS và gói đó có thể mất một lúc để hoàn thành và tôi không muốn dịch vụ cửa sổ của tôi phải đợi cho đến khi hoàn thành.

Tôi làm cách nào để dịch vụ WCF gọi không đồng bộ? (Hoặc là nó không đồng bộ theo mặc định?)

Trả lời

27

Tất cả các nhu cầu của bạn sẽ được hài lòng trong các bài viết sau đây từ MSDN:

Implementing an Async Service Operation

Calling WCF Service Async

Designing Service Contracts

+0

nhờ cho tập lớn các liên kết – Blankman

+0

Nếu tôi viết xuống xuống [OperationContractAttribute (AsyncPattern = true)], sau đó công việc thực hiện như async nếu không được đề cập sau đó cùng một mã chạy như đồng bộ? Tôi có đúng không? –

2

các WCF Proxy bên trong máy khách của bạn (Windows Service?) cần phải được chỉ định khi tạo mà bạn muốn có các hoạt động Không đồng bộ có sẵn.

Bạn có thể sửa đổi một Proxy WCF hiện có bằng cách nhấp chuột phải vào nó và chọn 'Configure dịch vụ tham khảo' Từ đây bạn chỉ cần đánh dấu vào ô đánh dấu bên cạnh 'Tạo hoạt động không đồng bộ'

Ok như vậy đó là WCF Proxy bên của những thứ được chăm sóc. Bây giờ bạn cần sử dụng APM (Mô hình lập trình không đồng bộ) với Proxy bên trong ứng dụng khách của bạn.

12

Trên Visual Studio 2010, trên hộp kiểm Add Service Reference > click Advanced button > check the Generate Asynchronous Operations.

Sau khi làm như vậy, các hoạt động Async sẽ được thêm vào và khả dụng để bạn sử dụng.

+0

Tuyệt vời, đã giúp tôi rất nhiều ... Cảm ơn bạn đời! –

3

Dịch vụ phụ:

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    bool DoWork(int i); 
} 

Khách hàng bên:

[ServiceContract(Name = nameof(IMyService))] 
public interface IMyServiceClient : IMyService 
{ 
    [OperationContract] 
    Task<bool> DoWorkAsync(int i); 
} 
+0

Rất nhiều câu trả lời cho câu hỏi này là từ trước năm 2012. Đây là cách hiện đại để làm điều đó. – Greg

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