2012-08-13 76 views
0

我正在使用由第三方开发的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并得到了相同的结果...空数组返回。

有没有人有任何建议如何处理这种情况?我是否需要手动反序列化此消息还是有更好的方法?

+1

当然,正确的做法是让第三方修复他们的错误。 HTTP标准已经存在了一段时间:他们不遵循这样一个基本标准的借口是什么?而且,问问自己 - 如果他们甚至无法正确执行HTTP,他们会搞砸哪些_else_? – 2012-08-14 02:31:06

+0

他们软件的最新版本以text/xml格式回复; utf-8编码和一切都很好。我认为有人最终决定升级,更改编码等等。不幸的是,我必须连接到这个服务,并让它在他们的新系统上再次运行。现在我想我正面临着静静地等待他们释放这个错误的修复方法,或者为了获得我所需要的信息而绕过它。 – yelowsnw2 2012-08-14 14:55:09

+0

text/xml听起来像SOAP 1.1,BTW。另外,你真的必须是_quiet_吗?他们的开发人员可能会想知道他们有一个bug。 – 2012-08-14 17:08:32

回答

0

最后,这些错误的标题阻止了Visual Studio正确读取数组。
我最终需要在内存中的XMl文档中捕获整个响应,然后打开它并使用xmlNodeList手动读取数组中的数据。

+0

你可能已经[删除了有问题的标题](http://stackoverflow.com/questions/11455273/remove-server-from-http-response-in-wcf),但那么你应该假设哪一个正确吗? – CodeCaster 2013-07-03 13:21:48