我有一个使用TCP / IP托管的WCF服务(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();
我想用Objective C或C ++编写Mac客户端。是否有任何现有的类可以促进与我的WCF服务的连接?如果没有,我的步骤是什么?实现这一目标的选择?
答案 0 :(得分:7)
以net
开头的每个绑定都被视为不可互操作。即使是没有WCF的纯.NET客户端也无法通过重新实现整个二进制协议和编码而无需大量工作就能与服务进行通信。你可能应该从:
Mac的选项是使用Mono,它应该支持netTcpBinding。
Mac上Objective-C / C ++的真正选择是创建可通过HTTP公开数据的可互操作WCF服务。如果您不是该服务的所有者,则可以创建路由WCF服务,该服务在可互操作的HTTP和netTCP之间为bridge。
编辑:
还有一件事 - 如果服务使用netTcpBinding
默认配置,则使用Windows安全保护。我希望它可以成为Mac上的另一个显示器。
答案 1 :(得分:0)
在评论的背景下:
netTcpBinding
被认为是更快的选择之一 - 当然比尝试的vanilla BasicHttpBinding / WS绑定快得多。这是唯一的真正需求,因为netTcpBinding使用二进制文件和直接文本更快。
首先,我已经多次看了很多次 - 而且奇怪的是, 每次 时间我测试它,NetTcpBinding
完全没有更快比基本的xml产品。但是,由于性能是你的目标,我有选择......
我有点偏颇(因为我写了),但我强烈推荐“protobuf-net”;因为它的设计与大多数.NET序列化程序一样,所以它很容易交换,但是在我为此做的每个测试中它都更快(CPU)和更小(bandwitdh) - 或测试other people make 。因为protobuf格式是一个开放的规范,所以你不必担心“Net”绑定是不可互操作的。
对于MS .NET,我有直接的WCF钩子,可以used purely from config使它变得轻而易举。老实说,我不知道与Mono相当的效果如何 - 我还没试过。 可能工作,但如果没有,另一种选择就是简单地在网络上抛出byte[]
或Stream
并担心(反)序列化。
我首选的布局是启用了MTOM的basic-http绑定,它为您提供了最简单的xml绑定的简单性和可移植性,而没有二进制数据的base-64开销。