2010-02-19 22 views
5

Tôi không thể sử dụng Giao thức phân giải tên ngang hàng trên mạng của chúng tôi vì các bộ định tuyến trang trại máy chủ của chúng tôi sẽ không hỗ trợ IPv6.Cách triển khai WCF NetPeerTcpBinding PeerResolver

Vì vậy, tôi đang cố gắng triển khai PeerResolver của riêng mình bằng cơ sở dữ liệu.

  • Phương thức đăng ký chèn hàng với lướiId, endpointUri và danh sách địa chỉ IP trong cơ sở dữ liệu cùng với ngày tạo và trả về hàng mới tạo làm id đăng ký.
  • Phương thức hủy đăng ký sẽ xóa mọi thứ khỏi Hướng dẫn đó.
  • Phương thức cập nhật sẽ cập nhật thông tin nói trên.
  • Phương thức giải quyết của tôi hiện đang bỏ qua tham số maxAddresses và trả về tất cả thông tin trong cơ sở dữ liệu cho meshId đó.

Nó hoạt động khá tốt như một chứng minh khái niệm, nhưng vì tài liệu về cơ bản là không tồn tại, tôi đang gặp khó khăn trong việc quyết định cách quản lý mọi thứ. Ví dụ:

  • Phải làm gì với thông số maxAddresses. Trong thử nghiệm của tôi, nó thường có vẻ được gọi với giá trị là 3. Tại sao 3? Tôi nên trở về 3 cái nào? Điều gì sẽ xảy ra nếu 3 tôi trở về là tất cả không có sẵn nhưng có những địa chỉ khác được? Nó sẽ thử lại không? Và sau đó tôi có cần đảm bảo rằng 3 số khác nhau được trả về khi nó thử lại không? Và làm thế nào tôi nên làm điều đó một cách ngẫu nhiên? Hoặc tôi có cần phải có một số thông tin trong cơ sở dữ liệu về cách một nút được kết nối với các nút khác và sau đó trả về các nút có vị trí địa lý không?
  • Nếu một ứng dụng dừng lại một cách hòa bình, nó sẽ gọi Unregister, nhưng điều này rõ ràng không phải lúc nào cũng xảy ra. Làm thế nào để quản lý dọn dẹp?
  • Tài liệu cho tất cả các biến thời gian chờ dường như chỉ ra rằng tôi nên ném một TimeoutException nếu giới hạn đạt được mà không có lệnh làm những gì nó phải. Tôi có thể thấy điều này sẽ quan trọng như thế nào nếu bạn cố gắng kết nối qua mạng với dịch vụ phân giải ngang hàng (như PNRP) nhưng vì tôi đang sử dụng cơ sở dữ liệu cục bộ, tôi có nên bỏ qua các giá trị đó không?
  • Tài liệu cho thuộc tính CanShareReferrals và liệt kê PeerReferralPolicy đưa ra mô tả rất rõ ràng về các giá trị mà bạn có thể phỏng đoán từ tên của tài sản và thành viên liệt kê, nhưng hoàn toàn không có thông tin chi tiết về yếu tố nào sẽ chọn yếu tố này.

Tôi rất thích nếu có ai đó ở đó với rất nhiều kinh nghiệm WCF có thể làm sáng tỏ những vấn đề này.

+1

Tôi không nghĩ NetPeerTcpBinding là một trận đấu tốt cho một hệ thống máy chủ, tại sao bạn cố gắng sử dụng nó. –

+0

Tôi nghĩ rằng sẽ rất thú vị khi có các quy trình trên các máy chủ có thể giao tiếp trạng thái với nhau vì vô số lý do, tuy nhiên điều đó thực sự không liên quan. Câu hỏi đặt ra là làm thế nào để thực hiện một PeerResolver khi PNRP (vì lý do gì) không phải là một lựa chọn. –

Trả lời

1

Theo tài liệu trên MSDN Giao thức phân giải tên ngang hàng của Microsoft sử dụng đường hầm Teredo để giải quyết sự cố truy cập IP6/IP4.

Chỉ cần cho phép Teredo đường hầm cho các hệ thống máy chủ, nó chỉ hoạt động

+0

Câu hỏi là "Làm thế nào để thực hiện một WCF NetPeerTcpBinding PeerResolver", không phải "Làm thế nào để AVOID thực hiện một WCF NetPeerTcpBinding." –

+0

Dựa trên "Tôi rất thích nếu có ai đó ở đó với rất nhiều kinh nghiệm WCF có thể làm sáng tỏ những vấn đề này". Tôi đã trả lời! Chúng tôi đã dành lứa tuổi cố gắng để làm cho PR của chúng tôi (chống lại lời khuyên tốt) và cuối cùng chúng tôi chỉ sử dụng Teredo – TFD

+0

Thông tin đó là hữu ích - cảm ơn! Nó rất bực bội khi Microsoft cung cấp lớp cơ sở trừu tượng này thực tế hét lên "Thực hiện tôi!" về cơ bản là không có thông tin về các phương pháp hay nhất để triển khai. –

1

Bạn cũng có thể sử dụng khuôn khổ này mã nguồn mở làm giảm rất nhiều chi phí để thực hiện một bộ giải quyết. Sau đó, bạn có thể tập trung vào viết trình quản lý lưu trữ thay vì tất cả các hệ thống ống nước. Nó cũng khá tài liệu.

http://wcfpeerresolver.codeplex.com/

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