如何检查gsoap是否无法序列化/发送大量数据?

时间:2016-03-10 14:34:10

标签: c++ gsoap

我正在运行一个使用gsoap库开发的Web服务客户端,我们需要通过相互认证的连接发送3.5 GB的数据 - 这意味着我们在网络上获得了加密流量。 服务器 - 我无法访问 - 表示它正在接收“空”数据。 我已经进行了网络流量捕获,发现传输过程中暂停(几秒钟),然后是“加密警报(21)”和连接关闭。

检查我的代码似乎序列化或发送数据存在一些问题,但我无法确切地知道发生了什么。

我怀疑gsoap无法分配必要的内存来序列化/发送数据。

我应该如何分析这个?

EDIT1: 我放弃了序列化路径,现在我的怀疑在于附件功能。似乎定义附件回调可能会解决我的问题。仍然对人们的意见和建议感兴趣。

1 个答案:

答案 0 :(得分:0)

根据您的描述,XML序列化似乎不太可能是导致问题的原因。 gsoap中的标准基于HTTP的通信(即没有HTTP分块)在发送之前序列化C / C ++数据以确定HTTP内容长度。序列化失败会立即显示,而不是在传输过程中显示。

为了加速大型XML数据块的传输,您可以使用SOAP_XML_TREE上下文标志优化XML序列化以初始化struct soap上下文。这大大减少了SOAP编码开销。让我解释一下为什么会出现这种情况:SOAP 1.1 / 1.2编码协议会在gsoap引擎中产生开销,以便通过分析数据结构指针(例如图形,可能还有循环)来确定共同引用的元素。当使用大量指针时,这会影响XML序列化程序的性能。此外,调试模式(-DDEBUG)将大大减慢gsoap引擎的速度,以避免大量传输。

也许像ssldump这样的工具可以更好地解决您遇到的TLS / SSL通信问题。