2011-06-23 16 views
7

Mam usług WCF jest obsługiwana przy użyciu protokołu TCP/IP (netTcpBinding):Mac (lub C++) do binarnego 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(); 

chciałbym napisać klienta Mac w Objective C lub C++ . Czy istnieją jakieś klasy, które mogą ułatwić połączenie z moją usługą WCF? Jeśli nie, jakie są moje kroki, aby je zrealizować?

+0

Jaki jest powód używania netTcpBinding? Mogę mieć jakieś odpowiednie opcje ... –

+0

"NetTcpBinding" okazało się być jedną z szybszych opcji - na pewno znacznie szybszą niż wiązanie waniliowe BasicHttpBinding/WS, które zostało wypróbowane. Jest to jedyna realna potrzeba, ponieważ netTcpBinding używał tekstu binarnego w stosunku do tekstu prostego, który był szybszy. – bugfixr

+0

w prawo; Podejrzewałem tak samo. Dodawanie odpowiedzi ... –

Odpowiedz

7

Każde powiązanie rozpoczynające się od net jest uważane za niezgodne. Nawet czysty klient .NET bez WCF nie jest w stanie komunikować się z usługą bez ogromnego wysiłku poprzez reimplementację całego protokołu binarnego i kodowania. powinieneś zacząć:

opcję dla Mac używa Mono które powinny mieć wsparcie dla netTcpBinding.

Twoja prawdziwa opcja dla Objective-C/C++ na Macu tworzy interoperacyjną usługę WCF eksponującą dane przez HTTP. Jeśli nie jesteś właścicielem usługi, możesz utworzyć routing usługi WCF, która będzie bridge między interoperacyjnym HTTP i netTCP.

Edit:

Jeszcze jedno - jeśli usługa korzysta netTcpBinding z domyślnej konfiguracji jest zabezpieczona zabezpieczeń systemu Windows. Spodziewam się, że może to być kolejny korek na Macu.

0

W kontekście komentarza:

netTcpBinding okazał się być jednym z szybszych opcji - na pewno znacznie szybciej niż BasicHttpBinding waniliowym/WS wiążący że został osądzony. Jest to jedyna realna potrzeba, ponieważ netTcpBinding używał tekstu binarnego w stosunku do tekstu prostego, który był szybszy.

Po pierwsze, mam spojrzał na tym wiele, wiele razy - i na tyle dziwnie, każdy czas przetestować go, NetTcpBinding całkowicie nie być dowolny szybciej niż podstawowej ofercie xml. Ponieważ jednak celem jest twój cel, mam opcje ...

Jestem trochę stronniczy (od kiedy to napisałem), ale zdecydowanie polecam tutaj "protobuf-net"; ponieważ jest zaprojektowany zgodnie z tymi samymi idiomami, co większość serializatorów .NET, jest dość łatwy do zamiany, ale w każdym teście, który dla niego zrobię, jest szybszy (CPU) i mniejszy (bandwitdh) - lub testuje go pod kątem other people make. A ponieważ format protobuf jest otwartą specyfikacją, nie musisz się martwić, że wiązania "Net" nie są interoperacyjne.

Dla MS .NET, mam bezpośrednie haczyki WCF, które mogą być used purely from config, dzięki czemu jest to proste. Szczerze mówiąc, nie wiem, jak dobrze to będzie działać z odpowiednikiem Mono - nie próbowałem. To może działać , ale jeśli nie, to po prostu wyrzuć byte[] lub Stream przez sieć i martw się serializacją (de) ręcznie.

Moim preferowanym układem jest tutaj powiązanie podstawowe-http z włączoną obsługą MTOM, które zapewnia prostotę i przenośność najprostszego powiązania xml, bez obciążania bazy danych-64 dla danych binarnych.

Powiązane problemy