Sự lựa chọn tốt nhất cho giao tiếp giữa các quá trình .NET là gì? [đóng cửa]


82

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?


1
Wow Tôi chỉ cơ bản hỏi exatly cùng một câu hỏi ... stackoverflow.com/questions/84860/...
Kris Erickson

Câu trả lời:


58

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ó.

Phần MSDN cho WCF


1
Thêm bằng chứng ủng hộ sự hối hận. Từ một người trong nhóm Microsoft remoting / WCF: "Có rất ít khoản đầu tư phát triển dành cho Remoting. WCF là sự kế thừa của Remoting." Từ đây stackoverflow.com/questions/1294494/…
MarkJ


5

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.


3
WCF trên các đường ống được đặt tên cũng cho phép điều này. Và bạn chỉ có thể sử dụng cùng một tập hợp hợp đồng trong cả hai quy trình.
Kent Boogaart 17-08

3

Điều khiển từ xa trong .NET Framework 2.0 cung cấp kênh IPC để giao tiếp giữa các quá trình trong cùng một máy.


3

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.


2

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.


Một danh sách các IPC API cho .NET: weblogs.asp.net/ricardoperes/...
Ricardo Peres

1

.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.


0

.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


2
Không có khả năng chúng sẽ tăng cường sự hối hận. Từ một người nào đó trong nhóm remoting / WCF: "Có rất ít khoản đầu tư phát triển vào Remoting. WCF là sự kế thừa của Remoting." Từ đây stackoverflow.com/questions/1294494/…
MarkJ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.