数据包未重新组装-JSON被解释为文本

数据包未重新组装-JSON被解释为文本,json,networking,wireshark,packet-sniffers,Json,Networking,Wireshark,Packet Sniffers,组件A使用httpWebBinding公开WCF web服务 第三方组件B,用JAVA编写,向公开的web服务发送请求。用户代理是Jakarta Commons HttpClient/3.1 一些请求会导致错误400,因为JSON被解释为字符串而不是JSON对象。将其解释为字符串的原因(可能)是JSON的某些字符被截断,因此JSON无效 更有趣的是,请求本身包含整个JSON,包括“缺少的”字符。缺少的3个字符是(包括引号)-“}”(请参见下面wireshark中的图像-末尾未突出显示的字符) 来

组件A使用httpWebBinding公开WCF web服务

第三方组件B,用JAVA编写,向公开的web服务发送请求。用户代理是Jakarta Commons HttpClient/3.1

一些请求会导致错误400,因为JSON被解释为字符串而不是JSON对象。将其解释为字符串的原因(可能)是JSON的某些字符被截断,因此JSON无效

更有趣的是,请求本身包含整个JSON,包括“缺少的”字符。缺少的3个字符是(包括引号)-“}”(请参见下面wireshark中的图像-末尾未突出显示的字符)

来自wireshark的错误请求示例

但在Wireshark中突出显示JSON数据时,会排除最后几个字符(参见上图)

使用我们的模拟器时,如果数据被正确接收,那么Wireshark中的所有内容都会突出显示(如果选择了数据)。(下图)

当有正确的请求(我们的模拟器)时,数据被重新组装(见下图),如果请求错误,这部分将丢失。

任何帮助都将不胜感激,
Petr

这意味着在“坏情况”中,标题中包含的数据/内容/有效负载长度是错误的。你能检查一下吗?检查传入JSON文本的长度(实际长度,未指定),然后检查标题中的长度值,看看它们是否匹配。如果他们没有那么。。好。。我想说的是,第三方组件需要一个错误修复程序?如果你不能修复该组件,你还可以添加一些简单的几乎透明的服务来修复数据包并通过它路由流量。。或者可以在WCF端添加一个过滤器来实现这一点,但实际上可能会更难。顺便说一句,如果真的是这样,并且你将问题正确地缩小到了发送错误数据包的第三方组件,那么C#和WCF标记对我来说似乎不正确。这是第三方应用程序上的问题。我还没有具体的细节,他们方面已经解决了什么问题,但一旦他们通知我们,我会尽快更新我的评论。谢谢,这意味着在“坏情况”中,标题中包含的数据/内容/有效负载长度是错误的。你能检查一下吗?检查传入JSON文本的长度(实际长度,未指定),然后检查标题中的长度值,看看它们是否匹配。如果他们没有那么。。好。。我想说的是,第三方组件需要一个错误修复程序?如果你不能修复该组件,你还可以添加一些简单的几乎透明的服务来修复数据包并通过它路由流量。。或者可以在WCF端添加一个过滤器来实现这一点,但实际上可能会更难。顺便说一句,如果真的是这样,并且你将问题正确地缩小到了发送错误数据包的第三方组件,那么C#和WCF标记对我来说似乎不正确。这是第三方应用程序上的问题。我还没有具体的细节,他们方面已经解决了什么问题,但一旦他们通知我们,我会尽快更新我的评论。非常感谢。