我有一组IIS7托管的SOAP Web服务(MSSOAP 3.0),它们由.Net Web应用程序以及J2ME应用程序(当前通过模拟器运行)使用。 Web应用程序可以成功调用所有已定义的方法。 J2ME应用程序成功调用除POST数据大于2K的方法之外的所有方法。失败的方法返回以下错误:
The size of the request exceeds the limit allowed by the server
此次通话所发送的数据量并不大。它小于Web应用程序提交的内容,并且远低于注册表设置中定义的限制(目前为102400):
HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / MSSOAP / 30 / SOAPISAP / MaxPostSize
有没有人知道为什么J2ME应用程序会因此错误而失败。
更新
当从J2ME应用程序发布数据时,当消息大小大于~2K时,Http连接类将“Transfer-Encoding:chunked”插入到请求头中。这将替换可能已添加到标题中的任何“Content-Length”。 HttpConnection类不允许重写此行为。
如果我使用来自J2ME应用程序的相同数据使用telnet模拟方法调用,则调用将成功完成。
在分析从J2ME应用程序发送的数据包和telnet模拟后,我注意到telnet方法不包括分块头。来自J2ME应用程序的数据包不完整。由于IIS处理请求的方式,可能只发送了标头和最后一个数据包。 IIS7启用了分块。
我在互联网上找到了类似的这个问题报告,但没有解决方案。以下链接描述了与我类似的问题。