读取具有错误HTTP标头的SOAP响应
我正在使用由第三方开发的SOAP接口,但正在返回无效HTTP标头,如下所示。读取具有错误HTTP标头的SOAP响应
HTTP/1.0 200 OK
Server: SMBDK_1/2.3.0
Date: Thu, 09 Aug 2012 18:59:14 GMT
Connection: close
Content-Length: 670
Content-Type: text/html; charset=ISO-8859-1
Content-Type: text/xml
Expires: Thu, 09 Aug 2012 18:59:14 GMT
Last-Modified: Thu, 09 Aug 2012 18:59:14 GMT
请注意,有2个内容类型标记。我为这个VB项目使用VS2008。我有这个连接的服务参考,并且可以发送请求并接收响应。我使用MSDN示例创建了一个CustomTextMessageEncoder来读取text/html; charset=ISO-8859-1
的响应。这对单个变量返回是有效的,但是数组永远不会正确读入。他们总是空着的。我正在使用Web调试代理,并可以看到SOAP响应中存在数组信息,但它实际上从未实际通过。我认为这是由于错误的标题(?)。我尝试解码消息为text/xml; charset=ISO-8859-1
并得到了相同的结果...空数组返回。
有没有人有任何建议如何处理这种情况?我是否需要手动反序列化此消息还是有更好的方法?
最后,这些错误的标题阻止了Visual Studio正确读取数组。
我最终需要在内存中的XMl文档中捕获整个响应,然后打开它并使用xmlNodeList手动读取数组中的数据。
你可能已经[删除了有问题的标题](http://stackoverflow.com/questions/11455273/remove-server-from-http-response-in-wcf),但那么你应该假设哪一个正确吗? – CodeCaster 2013-07-03 13:21:48
当然,正确的做法是让第三方修复他们的错误。 HTTP标准已经存在了一段时间:他们不遵循这样一个基本标准的借口是什么?而且,问问自己 - 如果他们甚至无法正确执行HTTP,他们会搞砸哪些_else_? – 2012-08-14 02:31:06
他们软件的最新版本以text/xml格式回复; utf-8编码和一切都很好。我认为有人最终决定升级,更改编码等等。不幸的是,我必须连接到这个服务,并让它在他们的新系统上再次运行。现在我想我正面临着静静地等待他们释放这个错误的修复方法,或者为了获得我所需要的信息而绕过它。 – yelowsnw2 2012-08-14 14:55:09
text/xml听起来像SOAP 1.1,BTW。另外,你真的必须是_quiet_吗?他们的开发人员可能会想知道他们有一个bug。 – 2012-08-14 17:08:32