Tôi đang sử dụng WCF trong .NET 3.5 để triển khai ứng dụng mạng ngang hàng. Để giải quyết các nút ngang hàng tôi đang sử dụng PNRP.WCF ngang hàng với nhau, có nút ngoài kia không?
IGlobalStoreServiceContract là hợp đồng của tôi như hình dưới đây,
[ServiceContract(Namespace = "http://GlobalStoreEventDriven.API", CallbackContract = typeof(IGlobalStoreServiceContract))]
internal interface IGlobalStoreServiceContract
{
[OperationContract(IsOneWay = true)]
void NotifyGlobalStoreDataInserted(string globalGroup, DateTime maxDateTime);
[OperationContract(IsOneWay = true)]
void RegisterNode();
[OperationContract(IsOneWay = true)]
void SynchronizeMemberList(Guid clientId);
}
Tôi đang sử dụng một số mã như thế này để tham gia mỗi nút với mạng lưới qua.
DuplexChannelFactory<IGlobalStoreChannel> channelFactory = new DuplexChannelFactory<IGlobalStoreChannel>(instance, "GlobalStoreAPIEndPoint");
IGlobalStoreChannel globalStoreChannel = channelFactory.CreateChannel();
globalStoreChannel.Open();
Câu hỏi của tôi là ngay sau khi tôi đã mở kênh làm cách nào để tôi có thể biết rõ nhất liệu các mạng ngang hàng khác có trên mạng không?
Ví dụ tôi có thể gọi một trong các phương thức trong RegisterNode hợp đồng của tôi và mỗi nút trong mạng có thể sử dụng gọi lại để gọi SynchronizeMemberList. Sau đó tôi sẽ biết liệu các nút khác có ở đó không.
Sự cố với điều đó là tất cả đều không đồng bộ. Nếu tôi gọi RegisterNode và không có ai trả lời, nó không thực sự có nghĩa là không có ai ở đó, nó chỉ có nghĩa là tôi đã không chờ đợi đủ lâu.
Bạn nghĩ gì? Bất kỳ đề xuất?