CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 499

499

Chương 12: Dịch vụ Web XML và Remoting

return null;

}

}

[Serializable()]

public class TaskCompleteEventArgs : EventArgs {

public string Result;

public TaskCompleteEventArgs(string result) {

this.Result = result;

}

}

Bước kế tiếp là định nghĩa một lớp khả-truy-xuất-từ-xa chạy trên client và có thể nhận sự kiện
này. Theo đó, lớp này có thể tiếp xúc với client. Lớp

EventListener

dưới đây trình bày một ví

dụ như thế—nó chỉ đơn giản dựng lên sự kiện thứ hai, mà client có thể trực tiếp xử lý. Cũng
như tất cả các đối tượng khả-truy-xuất-từ-xa, nó sẽ chỉ được truy xuất trong 5 phút, trừ khi
bạn thay đổi chính sách “lease” (sẽ được mô tả trong mục 12.11). Có một cách là chép đè
phương thức

InitializeLifetimeService

để cho phép đối tượng được sống vĩnh viễn:

public class EventListener : MarshalByRefObject {

public event RemoteObject.TaskCompleted TaskComplete;

// Thụ lý sự kiện ở xa.

public void OnTaskComplete(object sender,

RemoteObject.TaskCompleteEventArgs e) {

TaskComplete(sender, e);

}

public override object InitializeLifetimeService() {

return null;

}

}

Listener phải được định nghĩa trong một assembly riêng để nó có thể được tham chiếu bởi ứng
dụng client và lớp khả-truy-xuất-từ-xa (cả hai đều cần tương tác với nó).
Bây giờ ứng dụng client có thể khởi chạy tác vụ bất đồng bộ thông qua lớp

RemoteObject

thụ lý sự kiện thông qua lớp

EventListener

. Đoạn mã dưới đây trình bày một client chỉ đơn

giản hiển thị thông báo khi nhận được sự kiện:

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.