我正在testing一个SOAP服务,它有一个单一的操作,返回一个包含XML文档的string。 我的服务器和客户端是用PHP实现的。
这是我的客户的来源:
<?php header('Content-Type: text/xml, charset=iso-8859-1'); header("Content-Disposition: inline"); try{ $sClient = new SoapClient('http://localhost/soap/test.wsdl'); $response = $sClient->getDocument(); echo($response); } catch(SoapFault $e){ var_dump($e); } ?>
这是由SOAP服务返回并由客户端回显的XML:
<?xml version="1.0" encoding="iso-8859-1" ?> <root> <form formname="test"> <post postid="2000" userid="bbh" postdate="2011-09-14" posttime="11:03:32"> <item name="Item1" value="123" /> <item name="Item2" value="456" /> </post> </form> </root>
当我在Firefox for Firefox,Firefox和Safari中testingSOAP客户端时,SOAP服务返回的XML在这些浏览器中正确显示。 但是,当我在IE7上testing它(在Windows 2003 Server上)时,即使我在页面上查看源代码时看到了XML,我也会看到一个空白屏幕。 当我在IE8(在Windows 7)上testing它时,出现一个popup框,提示“你想保存这个文件还是在网上find一个程序来加载它?”。
有没有人有任何想法,为什么XML在IE7和IE8中没有正确显示?
更新:
这里是我从Firefox的Live HTTP头获得的HTTP头文件:
http://localhost/soap/testclient.php GET /soap/testclient.php HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0.1) Gecko/20100101 Firefox/5.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Cookie: PHPSESSID=bo6dlobivah1iaeu6d53vt9s10 Cache-Control: max-age=0 HTTP/1.1 200 OK Connection: close Date: Wed, 14 Sep 2011 11:09:57 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET, PHP/5.2.1 Content-Type: text/xml, charset=iso-8859-1
我想这是XML MIME类型内置的默认操作。 您可以尝试评论内容类型标题,或将MIME类型更改为text / html。 不是很好,但可以做的伎俩。
不知道这是否有帮助,但标题声明似乎是不正确的
根据http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html你应该使用一个; 而不是一个单独的内容类型和字符集:
header('Content-Type:text / xml; charset = iso-8859-1');