1

我已经为此工作了好几个小时,但没有找到任何解决我遇到的问题的方法。

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

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

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

4

1 回答 1

0

在制作原型以将 WCF 与其他一些技术进行比较时,我们遇到了类似的问题。我们认为我们已将 WCF 配置为使用 protobuf-net 进行序列化,但它无法正常工作。最让我头疼的是没有错误,WCF 只是默默默认了 DataContractSerializer。DataContractSerializer 将以二进制或 XML 序列化,具体取决于使用的 WCF 绑定。对于 basicHTTPBinding,它将序列化为 XML,这当然会导致响应大而慢。

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

希望这有帮助 <333

于 2012-06-15T14:57:01.157 回答