2012-05-15 29 views
7

Tôi đang làm việc trên ứng dụng C# có chứa nhiều dịch vụ windows cần giao tiếp với nhau để truyền dữ liệu. Các dịch vụ này có thể trên cùng một máy nhưng chúng có thể ở xa. Tôi nhìn vào sử dụng WCF cho mục đích này nhưng có vẻ như WCF quá nặng và có nhiều cấu hình phụ, với tôi, có vẻ không cần thiết (.NET 3.5 là một yêu cầu ở đây, tôi biết rằng .NET 4 đơn giản hóa điều này)Thay thế WCF cho quy trình qua/máy liên lạc

Vì vậy, câu hỏi của tôi là, những gì sẽ là sự thay thế tốt nhất cho WCF, bên cạnh việc không chấp nhận .NET Remoting cung cấp chức năng này?

+0

phàn nàn về cấu hình có vẻ nhỏ mọn chút. Đối với hiệu suất, NetTCP ràng buộc có sẵn trong 3,5, do đó, không chắc chắn những gì bạn quan tâm là có một trong hai. –

+0

Tôi tò mò hơn nếu có lựa chọn thay thế và chúng có thể là gì nếu có. Tìm kiếm Google luôn hướng tôi trở lại WCF. Điều này đến từ một người thường lập trình Java, vì vậy tôi đã quen với RMI, EJB, v.v. –

+4

Tôi đã đạt được nhiều hơn hoặc ít hơn cùng một kết luận. Tôi thấy rằng cấu hình WCF là khó khăn và không được tài liệu hóa, và theo một Tôi đã tìm thấy nó đau đớn chậm và phần nào miễn cưỡng để phát hành bộ nhớ.May tôi đặt nó sai, nhưng nó không phải là biểu diễn như tôi hy vọng, và sửa chữa không rõ ràng trong vô số các tùy chọn cấu hình. Tôi đã kết thúc viết khuôn khổ từ xa * trọng lượng nhẹ * của riêng tôi mà tôi hy vọng một ngày nào đó sẽ nhận được sự chấp thuận cho nguồn mở. Nó không có nghĩa là tầm thường để thực hiện. Trừ khi bạn đang can thiệp vào các loại vấn đề này, tôi sẽ gắn bó với WCF cho đến khi nó * chứng minh * là vấn đề. – spender

Trả lời

14

Tôi đã sử dụng PInvoke để truy cập thời gian chạy Windows RPC trong gần 8 năm. Nó rất nhanh và rất đáng tin cậy. Khi kết hợp với serializer nhanh như protobuf-csharp-port, các liên lạc thu được là đá rắn và very fast.

Vì vậy, để xây dựng này từ mặt đất lên điều này đòi hỏi ba phần:

  1. Nghị định thư Buffers của Google (protobuf-csharp-port) cho serialization.
  2. My own CSharpTest.Net.RpcLibrary để vận chuyển.
  3. Một chút mã keo để ghép chúng lại với nhau từ protobuf-csharp-rpc.

Đây là tất cả có sẵn trên NuGet trong các gói sau: Google.ProtocolBuffers, CSharpTest.Net.RpcLibrary, và Google.ProtocolBuffers.Rpc.

Sau đây là một hoạt động xuống nhanh về việc bắt đầu:

  1. định nghĩa một tập hợp các thông điệp và một dịch vụ bằng cách sử dụng Google Protocol Buffer Language.

  2. Khi bạn đã xác định rằng bạn sẽ chạy ProtoGen.exe để tạo ra các dịch vụ sơ khai và thư trong C#. Hãy chắc chắn thêm "-service_generator_type = IRPCDISPATCH" để tạo mã dịch vụ chính xác.

  3. Bây giờ bạn có tệp nguồn được tạo, hãy thêm chúng vào một dự án và tham chiếu ba cụm từ các gói được liệt kê ở trên.

  4. Cuối cùng hãy xem mã máy khách/máy chủ mẫu trên trang dự án protobuf-csharp-rpc. Thay thế "SearchService" bằng tên dịch vụ của bạn và bạn sẽ sẵn sàng chạy.

  5. Tùy chọn thay đổi cấu hình của máy khách/máy chủ RPC. Ví dụ cho thấy việc sử dụng LRPC là máy chủ lưu trữ cục bộ; tuy nhiên, tệp nguồn DemoRpcLibrary.cs hiển thị TCP/IP và Tên được đặt tên là tốt.

Bạn luôn có thể gửi email cho tôi (roger @ tên người dùng của tôi) để biết thêm thông tin hoặc ví dụ.

Cập nhật

Tôi đã viết một hướng dẫn khởi động nhanh: WCF replacement for cross process/machine communication.

+0

Điều này trông giống như thay thế tôi đang tìm kiếm, Cảm ơn bạn đã thông tin! –

+1

@Andrew Landsverk, xem thêm: http://csharptest.net/1177/wcf-replacement-for-cross-processmachine-communication/ –

+0

Wow, cảm ơn vì đã dành thời gian chuẩn bị điều đó! –

2

Bạn có thể muốn xem xét ZeroMQ, nó rất nhẹ và hiệu quả và đi kèm với các ràng buộc C# tốt. (Nhập này trên điện thoại di động của tôi vì vậy bạn sẽ phải google cho nó cho mình bây giờ, xin lỗi).

+0

Tôi sẽ không gọi chính xác ZeroMQ nhẹ. –

+0

ZeroMQ rất tốt miễn là bạn không quan tâm đến phản hồi và không lo lắng về các thông báo bị rơi xuống sàn. Giống như tất cả các hàng đợi, chỉ có thể lưu trữ rất nhiều việc tồn đọng. Hiệu suất của ZeroMQ trong phân phối được bảo đảm và cấu hình yêu cầu/phản hồi đặc biệt xấu. –

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