2009-03-06 35 views
6

Tôi có một vấn đề thiết kế thú vị và tôi đã hy vọng tất cả các bạn có thể đưa ra một số gợi ý. Tôi đang sử dụng C# và .NET 3.0Thiết kế giao tiếp trong quá trình với WCF (.NET)

Tôi có một khung công tác rất đẹp, có thể mở rộng được xây dựng trên WCF tự động hóa thiết lập điểm cuối và tạo hợp đồng. Hệ thống tôi đang làm việc có thể được chạy theo nhiều cách khác nhau - các điểm cuối có thể ở một nơi khác trên internet, chạy trong các hội đồng khác nhau trên cùng một hộp, hoặc thậm chí chạy trong cùng một quy trình. WCF là tuyệt vời để làm cho tất cả điều này minh bạch, nhưng trong trường hợp cuối cùng, tôi muốn cải thiện hiệu quả:

Tôi muốn tránh chi phí của việc sắp xếp các đối tượng không thực sự đi đâu cả. Có thực sự không có điểm trong việc đó để giao tiếp giữa hai chủ đề trong cùng một hội đồng. Đồng thời, tôi muốn sử dụng khung công tác dựa trên WCF đã có sẵn, vì nó sẽ dễ dàng hơn nhiều để duy trì nếu chúng ta không có hai đường truyền thông riêng biệt tùy thuộc vào thiết lập của hệ thống.

Suy nghĩ đầu tiên của tôi là sử dụng con trỏ đối tượng trong ngữ cảnh không an toàn - để không chống lại việc tuần tự hóa, mà chỉ để tuần tự hóa số tiền tối thiểu. Mối quan tâm của tôi với điều này là trên các thông điệp không đồng bộ trong môi trường mà GC đang tích cực, thông báo có thể và có thể sẽ biến mất trước khi chúng ta có cơ hội để dereference con trỏ chứa trong nó, mà sẽ dẫn đến rất nhiều vấn đề. Ý tưởng tiếp theo của tôi là sử dụng GCHandles, nhưng tôi không chắc chắn về hành vi của họ - nếu GCHandle không được tham chiếu nữa, nhưng có chứa tham chiếu đến một đối tượng được quản lý, cả hai đều được dọn dẹp bởi GC hay không? Không phải vậy. Tôi lo lắng về việc giới thiệu một rò rỉ bộ nhớ lớn bằng cách sử dụng chúng, bởi vì cơ hội mà một thông báo sẽ bị mất là rất lớn, và chúng tôi sẽ không thể gọi Free(), và tài liệu tôi có thể tìm thấy là ... thiếu .

Một ý nghĩ khác là sử dụng sự phản chiếu để xem xét tất cả các đối tượng được quản lý, nhưng có vẻ như chi phí cho điều này sẽ rất lớn và hệ thống này phải hiệu quả nhất có thể. Vì vậy, tóm lại, tôi đang cố gắng gửi một đối tượng qua một quá trình với WCF mà không cần tuần tự hóa nó, theo như tôi có thể nói có nghĩa là giữ cho nó tồn tại ngay cả khi nó tạm thời không có tham chiếu. Có vẻ như nó sẽ là có thể, nhưng tôi tự hỏi nếu tôi đang cố gắng để có bánh của tôi và ăn nó quá.

Cảm ơn bạn rất nhiều về đầu vào của bạn!

Trả lời

6

Tôi sẽ điều tra giao thức truyền tải "NetNamedPipes" trong WCF được thiết kế đặc biệt cho cùng một máy, liên lạc giữa các quá trình và có ít chi phí nhất có thể (bao gồm tuần tự nhị phân nhanh).

Marc

9

Kiểm tra ràng buộc vận chuyển không trong bài viết này.

http://www.codeproject.com/KB/WCF/NullTransportForWCF.aspx

+0

Ý tưởng tốt đẹp, thực hiện điều này không làm việc cho tôi mặc dù, và tôi nhận được một 'System.NotImplementedException' trong 'NullChannelFactory \' 1.OnBeginOpen (TimeSpan timeout, AsyncCallback callback, tiểu bang Object) '. Vì dự án này không phải là nguồn mở nên không đơn giản để mở rộng và đóng góp lại. –

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