对php不是很了解 写了个简单的例子
现用c#调用php写的 webservice(soap WSDL)iis6.0+php5.2.8webservice如下
<?php
class WebService
{
    public function Logout()
    {
//header('Content-type: text/xml;');
return array("LogoutResult"=>array("1"));
    }
}
$server = new SoapServer("WebService.wsdl");
$server->setClass("WebService");
$server->handle();
?>
c#如下            WebService ws = new WebService();
            return dws.Logout();错误
客户端发现响应内容类型为“text/html”,但应为“text/xml”。
请求失败,错误信息为:
--
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://sunity.org/"><SOAP-ENV:Body><ns1:LogoutResponse><ns1:LogoutResult><ns1:anyType>1</ns1:anyType></ns1:LogoutResult></ns1:LogoutResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
这种情况有见过的吗?
改写成这样
    public function Logout()
    {
header('Content-type: text/xml;');
return array("LogoutResult"=>array("1"));
    }
也没用
不是该如何修改响应头
iis中自定义HTTP头也不对
错误:客户端发现响应内容类型为“text/xml,text/html”,但应为“text/xml”。

解决方案 »

  1.   

    修改php.ini 中default_mimetype = "text/html"
    为default_mimetype = "text/xml"
    原因不知道,感觉和服务器设置有关,有能解释的再解释一下吧!
      

  2.   

    访问某个php程序,php.ini设置default_mimetype = "text/html" 的话,将为返回头自动加上
    Content-Type:text/html,不设置的话就置空,如果设置成default_mimetype = "text/xml",C#访问php web service可以成功,但是你单独浏览某个php文件估计又不行了。
      

  3.   

    lz这个webservice用php的soapclient应该是可以成功的吧?
      

  4.   

    那我要是只对webservice设置
    header('Content-type: text/xml;'); 
    这句话不知要加在哪里,我不知道soap是在哪里响应输出的!
    iis的自定义HTTP头 php也不会主动替换,只是在前面加了一下
      

  5.   

    我也用PHP做了个客户端测试了
    在我机器上一点问题没有 C#的也没问题
    上服务器就不行了
    我在本地向服务器发请求 用wireshark抓包 发现 webservice不论是返给c# 还是php Content-type都是text/html
    但我把webservice部署到局域网的另个机器上就没有问题,我再发请求就没有问题了