为什么我的WCF响应如此缓慢地传输1MB数据

时间:2012-05-10 22:04:22

标签: wcf protobuf-net

我一直在研究这个问题已经有好几个小时了,并且没有找到解决方案来解决我遇到的问题。

我使用basicHttpBinding通过protobuf序列化了3000个DTO列表。我可以看到WCF确实正在向节点发送编码数据。问题是,这个响应大小约为1 MB,一旦我完成调用中的最后一个方法,它需要30秒才能完成。如果我在列表上执行.take(100),响应大约需要1-2秒,而.take(1)是即时的。

我尝试使用protobuf手动将3000记录列表序列化为内存流,这几乎是瞬间的,这让我相信它与数据传输有关。

这可以在运行服务和站点的任何计算机上复制。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在将WCF与其他一些技术进行比较的原型设计中,我们遇到了类似的问题。我们认为我们已经将WCF配置为使用protobuf-net进行序列化,但它无法正常工作。对我来说最油炸的事情是没有错误,WCF只是默默地默认为DataContractSerializer。 DataContractSerializer将根据使用的WCF绑定以二进制或XML序列化。对于basicHTTPBinding,它将序列化为XML,这当然会导致响应很大而且响应很慢。

我建议你验证WCF是否真的使用protobuf-net进行序列化。您应该能够通过使用wireshark(或类似工具)窥视数据包内部来查看是否发生了这种情况。

希望这有助于< 333