C++ 到二进制WCF的Mac(或c+;+;)连接

C++ 到二进制WCF的Mac(或c+;+;)连接,c++,objective-c,wcf,c#-4.0,C++,Objective C,Wcf,C# 4.0,我使用TCP/IP(netTcpBinding)托管了一个WCF服务: 我想在Mac C或C++中编写一个Mac客户端。是否有任何现有类可以方便连接到我的WCF服务?如果没有,我的步骤和选项是什么?以net开始的每个绑定都被认为是不可互操作的。即使是没有WCF的纯.NET客户端也无法通过重新实现整个二进制协议和编码来与服务进行通信。您可能应该从以下内容开始: 您的Mac选项是使用应支持netTcpBinding的 你在Mac上Objul-C/C++的真正选择是创建可互操作的WCF服务,通

我使用TCP/IP(netTcpBinding)托管了一个WCF服务:


我想在Mac C或C++中编写一个Mac客户端。是否有任何现有类可以方便连接到我的WCF服务?如果没有,我的步骤和选项是什么?

net
开始的每个绑定都被认为是不可互操作的。即使是没有WCF的纯.NET客户端也无法通过重新实现整个二进制协议和编码来与服务进行通信。您可能应该从以下内容开始:

您的Mac选项是使用应支持netTcpBinding的

<>你在Mac上Objul-C/C++的真正选择是创建可互操作的WCF服务,通过HTTP公开数据。如果您不是该服务的所有者,则可以创建路由WCF服务,该服务将位于可互操作的HTTP和netTCP之间

编辑:


还有一件事-如果该服务使用默认配置的
netTcpBinding
,它将受到windows安全性的保护。我希望它能成为Mac上的另一个节目阻碍者。

在评论中:


netTcpBinding
被发现是一个更快的选项——当然比尝试的香草BasicHttpBinding/WS绑定快得多。这是唯一真正的需要,因为netTcpBinding使用了二进制和直接文本,所以速度更快

首先,我已经看了很多次了——奇怪的是,每次我测试它时,
NetTcpBinding
完全不能比基本的xml产品更快。然而,由于性能是你的目标,我有选择

我有点偏见(因为我写了它),但我强烈推荐这里的“protobuf net”;由于它是按照与大多数.NET序列化程序相同的习惯用法设计的,因此很容易插入,但在我为此进行的每个测试中,它都更快(CPU)和更小(bandwitdh)。由于protobuf格式是一个开放规范,您不必担心“Net”绑定不可互操作

对于MS.NET,我有直接的WCF挂钩,可以轻松实现它。老实说,我不知道这将如何与单声道等效工作-我没有尝试过。它可能会起作用,但如果不起作用,另一种选择是通过网络简单地抛出
字节[]
,并手动担心(反)序列化


我这里首选的布局是启用MTOM的基本http绑定,它提供了最简单的xml绑定的简单性和可移植性,而不需要二进制数据的base-64开销。

使用netTcpBinding的原因是什么?我可能有一些合适的选项…
netTcpBinding
被发现是一个更快的选项——当然比尝试的香草BasichtpBinding/WS绑定快得多。这是唯一真正的需求,因为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();