Tôi có nên sử dụng Named Pipes hoặc .NET Remoting để giao tiếp với quá trình đang chạy trên máy của mình không?
Tôi có nên sử dụng Named Pipes hoặc .NET Remoting để giao tiếp với quá trình đang chạy trên máy của mình không?
Câu trả lời:
WCF là sự lựa chọn tốt nhất. Nó hỗ trợ một số cơ chế vận chuyển khác nhau ( bao gồm cả các đường ống được đặt tên ) và có thể hoàn toàn được điều khiển theo cấu hình. Tôi thực sự khuyên bạn nên xem WCF.
Đây là một blog so sánh hiệu suất WCF và Remoting .
Trích dẫn từ blog:
WCF và .NET Remoting thực sự có hiệu suất tương đương nhau. Sự khác biệt rất nhỏ (đo độ trễ của máy khách) nên không quan trọng cái nào nhanh hơn một chút. WCF mặc dù có thông lượng máy chủ tốt hơn nhiều so với .NET Remoting. Nếu tôi bắt đầu dự án hoàn toàn mới, tôi sẽ chọn WCF. Dù sao WCF còn làm được nhiều thứ hơn là Remoting và đối với tất cả những tính năng đó, tôi yêu thích nó.
Nếu đó là trên một máy duy nhất, Ống được đặt tên mang lại cho bạn hiệu suất tốt hơn và có thể được triển khai với cơ sở hạ tầng loại bỏ cũng như WCF. Hoặc bạn có thể trực tiếp sử dụng System.IO.Pipes .
Nếu bạn muốn nói đến giao tiếp giữa các quá trình, tôi đã sử dụng .NET Remoting mà không gặp bất kỳ sự cố nào cho đến nay. Nếu hai tiến trình trên cùng một máy, việc liên lạc diễn ra khá nhanh.
Các đường ống được đặt tên chắc chắn hiệu quả hơn, nhưng chúng yêu cầu thiết kế ít nhất một giao thức ứng dụng cơ bản, điều này có thể không khả thi. Điều khiển từ xa cho phép bạn gọi các phương thức từ xa một cách dễ dàng.
Nếu bạn đang sử dụng .NET Framework 3.0 trở lên, tôi sẽ sử dụng WCF. Sử dụng WCF, bạn có thể sử dụng các ràng buộc khác nhau tùy thuộc vào sự cân bằng giữa hiệu suất / interop / v.v. đó là điều bạn cần.
Nếu hiệu suất không quan trọng và bạn cần tương tác với các công nghệ Dịch vụ Web khác, bạn sẽ muốn sử dụng liên kết WS-HTTP. Đối với trường hợp của bạn, bạn có thể sử dụng WCF với liên kết net-tcp hoặc liên kết đường ống có tên. Hoặc nên làm việc.
Quan điểm cá nhân của tôi là cách tiếp cận WCF rõ ràng hơn vì bạn có thể thực hiện các dịch vụ theo hướng hợp đồng và tập trung vào các thông báo chứ không phải đối tượng (tôi đang tổng quát hóa ở đây dựa trên các mô hình lập trình mặc định của WCF / .NET Remoting). Tôi không thích gửi các đối tượng qua dây vì nhiều thông tin ngữ nghĩa bị mất hoặc không rõ ràng. Khi tất cả những gì bạn đang làm là gửi một tin nhắn giống như bạn đang làm với WCF, thì việc phân tách mối quan tâm của bạn giữa giao tiếp và các lớp / cơ sở hạ tầng mà một nút duy nhất bao gồm sẽ trở nên dễ dàng hơn.
WCF cũng cung cấp tính linh hoạt. Chỉ cần thay đổi một số cấu hình (ràng buộc), bạn có thể có cùng một dịch vụ trên một số máy khác thay vì IPC trên cùng một máy. Do đó mã của bạn vẫn linh hoạt.
.Net Remting không phải là một giao thức của chính nó. Nó cho phép bạn chọn giao thức nào để sử dụng: SOAP, đường ống có tên, v.v.
.net Remoting được tích hợp vào .net để thực hiện giao tiếp quy trình nội bộ. Nếu bạn sử dụng nó, họ sẽ tiếp tục hỗ trợ và có thể nâng cao nó trong các phiên bản sau. Đường ống được đặt tên không mang lại cho bạn lời hứa về những cải tiến trong các phiên bản .net trong tương lai