我们需要为低带宽网络创建 WCF 服务。因此,我们的目标是创建每次调用产生最少字节数的绑定(bind)配置。这是 app.config 的摘录
<customBinding>
<binding name="binaryBinding">
<binaryMessageEncoding/>
<tcpTransport />
</binding>
</customBinding>
我认为建立连接也会带来开销,因此我们会将其保持在最低限度。一个典型的场景是
Client.Connect();
while (!userTerminates())
{
var Response = Client.DoSomething(parameters);
<user input>
var anotherResponse = Client.DoSomethingElse(otherParameters);
}
Client.Close();
发送/接收的数据从大约 20 个字节到几百个字节不等。
到目前为止,我设法将 WCF 设置为使用 netTcpBinding 和二进制编码,但仍然有 400% 的开销。我发送了一个 600 个字符的字符串,收到了 2200 个字符。我通过使用 MessageInspector 测量传入和传出消息的长度来测量这一点。我假设开销来自 SOAP 消息。 编辑:也许我的测量是错误的。
我还了解到我可以压缩通信,如 WCF 示例库中所示。 GoogleProtocol 似乎也是一个选择。
但我想从头开始:如何修改配置(或最终创建我自己的协议(protocol))以最小化发送的总字节数。此时安全性不是问题,性能也不是问题,我感兴趣的只是发送/接收的字节数。
感谢您的任何提示。
最佳答案
你说得对netTcp uses SOAP ,这确实可能导致您的 20 字节有效负载膨胀到更多。
CodeProject: CompactMessageEncoder 中解释了如何应用自定义绑定(bind)。 。如果有效负载是类似对象的并且您不调用许多不同的方法,Google's Protocol Buffers和一个custom framing protocol over sockets .
关于c# - 就传输的总字节数而言,最紧凑的 wcf 绑定(bind)是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29429302/