Mac (или c ++) подключение к двоичному WCF - PullRequest
7 голосов
/ 23 июня 2011

У меня есть служба WCF, размещенная с использованием TCP / IP (netTcpBinding):

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();

Я бы хотел написать клиент Mac на Objective C или C ++. Существуют ли какие-либо классы, которые могут облегчить подключение к моей службе WCF? Если нет, каковы мои шаги и варианты, чтобы это произошло?

Ответы [ 2 ]

7 голосов
/ 23 июня 2011

Каждая привязка, начинающаяся с net, считается не совместимой. Даже чистый клиент .NET без WCF не может связываться со службой без огромных усилий, переопределяя весь двоичный протокол и кодировку. Вероятно, вам следует начать с:

Ваш вариант для Mac использует Mono , который должен иметь поддержку netTcpBinding.

Ваша реальная опция для Objective-C / C ++ на Mac - это создание совместимого сервиса WCF, предоставляющего данные через HTTP. Если вы не являетесь владельцем сервиса, вы можете создать сервис маршрутизации WCF, который будет мост между совместимым HTTP и netTCP.

Edit:

Еще одна вещь - если служба использует netTcpBinding с настройками по умолчанию, она защищена безопасностью Windows. Я ожидаю, что это может быть еще одним шоу-стопором на Mac.

0 голосов
/ 24 июня 2011

В контексте комментария:

netTcpBinding был признан одним из более быстрых вариантов - безусловно, намного быстрее, чем пробная привязка vanilla BasicHttpBinding / WS. Это единственная реальная необходимость, так как netTcpBinding использовал двоичный код по сравнению с прямым текстом, это было быстрее.

Во-первых, я смотрел на это много, много раз - и, как ни странно, каждый раз, когда я проверял это, NetTcpBinding совершенно не мог быть быстрее, чем базовый xml предложение. Однако, так как ваша цель - производительность, у меня есть варианты ...

Я немного пристрастен (так как я написал это), но я настоятельно рекомендую здесь "protobuf-net"; так как он разработан по тем же идиомам, что и большинство сериализаторов .NET, его легко заменить, но он быстрее (ЦП) и меньше (bandwitdh) в каждом тесте, который я для этого делаю - или проверяет, что другие люди сделать . А поскольку формат protobuf является открытой спецификацией, вам не нужно беспокоиться о том, что привязки «Net» не могут взаимодействовать.

Для MS .NET у меня есть прямые перехватчики WCF, которые можно использовать исключительно из конфигурации , что делает его быстрым. Честно говоря, я не знаю, насколько хорошо это будет работать с аналогом Mono - я не пробовал. Он может работать, но если нет, другой вариант - просто выбросить byte[] или Stream по сети и беспокоиться о (де) сериализации вручную.

Мой предпочтительный макет здесь - это привязка basic-http с включенным MTOM, что дает вам простоту и переносимость простейшей привязки xml без дополнительных затрат base-64 для двоичных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...