2011-06-23 40 views
7

Tôi đã có một dịch vụ WCF được lưu trữ sử dụng giao thức TCP/IP (netTcpBinding):Mac (hoặc C++) kết nối đến nhị phân WCF

var baseWcfAddress = getWcfBaseUri(); 
host = new ServiceHost(wcfSingleton, baseWcfAddress); 

var throttlingBehavior = new System.ServiceModel.Description.ServiceThrottlingBehavior(); 
throttlingBehavior.MaxConcurrentCalls = Int32.MaxValue; 
throttlingBehavior.MaxConcurrentInstances = Int32.MaxValue; 
throttlingBehavior.MaxConcurrentSessions = Int32.MaxValue; 
host.Description.Behaviors.Add(throttlingBehavior); 

host.Open(); 

Tôi muốn viết một khách hàng Mac trong Objective C hoặc C++ . Có bất kỳ lớp học hiện có nào có thể tạo thuận lợi cho việc kết nối với dịch vụ WCF của tôi không? Nếu không, các bước của tôi là gì & các tùy chọn để thực hiện điều đó?

+0

Lý do sử dụng netTcpBinding là gì? Tôi có thể có một số tùy chọn phù hợp ... –

+0

'netTcpBinding' đã được tìm thấy là một trong các tùy chọn nhanh hơn - chắc chắn nhanh hơn nhiều so với liên kết vani BasicHttpBinding/WS đã được thử. Đó là nhu cầu thực sự duy nhất kể từ khi netTcpBinding sử dụng nhị phân vs văn bản thẳng nó đã nhanh hơn. – bugfixr

+0

ngay; Tôi nghi ngờ nhiều. Đang thêm câu trả lời ... –

Trả lời

7

Mọi ràng buộc bắt đầu bằng net được coi là không tương thích được. Ngay cả khách hàng thuần túy .NET mà không có WCF không thể giao tiếp với dịch vụ mà không cần nỗ lực rất lớn bằng cách reimplementing toàn bộ giao thức nhị phân và mã hóa. Có lẽ bạn nên bắt đầu với:

lựa chọn của bạn cho Mac đang sử dụng Mono mà cần phải có sự hỗ trợ cho netTcpBinding.

Tùy chọn thực sự của bạn cho Mục tiêu-C/C++ trên máy Mac đang tạo dịch vụ WCF tương thích hiển thị dữ liệu qua HTTP. Nếu bạn không phải là chủ sở hữu của dịch vụ, bạn có thể tạo dịch vụ định tuyến WCF sẽ là bridge giữa HTTP tương thích và netTCP.

Edit:

hơn Một điều - nếu dịch vụ sử dụng netTcpBinding với cấu hình mặc định nó được bảo đảm bằng các cửa sổ an ninh. Tôi hy vọng rằng nó có thể là một stopper hiển thị trên Mac.

0

Trong bối cảnh của bình luận:

netTcpBinding được tìm thấy là một trong những lựa chọn nhanh hơn - chắc chắn nhanh hơn nhiều so với BasicHttpBinding vani/WS ràng buộc rằng đã cố gắng. Đó là nhu cầu thực sự duy nhất kể từ khi netTcpBinding sử dụng nhị phân vs văn bản thẳng nó đã nhanh hơn.

Đầu tiên, tôi đã xem xét này nhiều, nhiều lần - và kỳ lạ hơn, mỗi lần tôi kiểm tra nó, NetTcpBinding hoàn toàn không có bất kỳ nhanh hơn việc chào bán xml cơ bản. Tuy nhiên, vì hiệu suất là mục tiêu của bạn, tôi có các tùy chọn ...

Tôi hơi thiên vị (vì tôi đã viết nó), nhưng tôi khuyên bạn nên "protobuf-net" ở đây; vì nó được thiết kế cùng một thành ngữ giống như hầu hết các bộ nối tiếp .NET, nó khá dễ dàng để hoán đổi, nhưng nó nhanh hơn (CPU) và nhỏ hơn (bandwitdh) trong mọi thử nghiệm mà tôi thực hiện cho điều này - hoặc kiểm tra other people make. Và bởi vì định dạng protobuf là một đặc tả mở, bạn không phải lo lắng về các ràng buộc "Net" không tương thích được.

Đối với MS .NET, tôi có các móc WCF trực tiếp có thể là used purely from config giúp cho việc này trở nên dễ dàng. Tôi thành thật không biết làm thế nào tốt sẽ làm việc với tương đương Mono - Tôi đã không cố gắng. Nó có thể hoạt động, nhưng nếu không phải tùy chọn khác chỉ đơn giản là ném byte[] hoặc Stream qua mạng và lo lắng về (de) tuần tự theo cách thủ công.

Bố cục ưa thích của tôi ở đây là liên kết cơ bản-http với MTOM được bật, cung cấp cho bạn tính đơn giản và tính di động của ràng buộc xml đơn giản nhất, mà không có phí cơ sở 64 cho dữ liệu nhị phân.

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