【问题标题】:Accessing WCF Soap Service Via Php通过 PHP 访问 WCF Soap 服务
【发布时间】:2012-11-24 06:50:35
【问题描述】:

我目前正在尝试学习如何制作 WCF 肥皂服务。然后我试图通过 PHP 访问它,但我目前遇到错误。

下面是访问 WCF 肥皂服务的代码。

try
{
    $client = new SoapClient("http://localhost:8732/Design_Time_Addresses/SoapServer/Service1/?wsdl",
            array('soap_version'=>'SOAP_1_2', "trace" => 1, "exception" =>0));
    $result = $client->__soapCall("getData", array());

    echo "<pre>";
    print_r($result);
    echo "</pre>";
}
catch (Exception $e)
{
    echo $e->getMessage();
}

目前我收到以下错误:

Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'.

我已经用谷歌搜索了这个,但到目前为止对我来说没有任何意义。我确实在某处读到了'soap_version'=&gt;'SOAP_1_2',但没有任何区别。

soap 服务在使用 WcfTestClient 软件时运行良好,所以我在执行 PHP 的方式一定有问题。

更新 下面是 Soap 请求标头

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:PHPSESSID=o9iaupn13vq7p812t4bhos97p6; user=cboard
Host:localhost
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11

下面是响应头

Content-Length:142
Content-Type:text/plain
Date:Fri, 23 Nov 2012 21:35:55 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:PHP/5.3.13
X-Powered-By:ASP.NET

【问题讨论】:

  • 你能检查一下这个stackoverflow.com/a/5409465/630316
  • 谢谢,我确实看到了这一点,但对如何修复它并没有多大意义,尤其是因为它不是一个被接受的答案
  • $clientSOAP object上方添加header('Content-Type: text/plain');
  • @Rafee,我确实尝试过,但得到了同样的结果,我也尝试过,添加 header(Content-type: application/soap+xml) 但它反而下载了文件
  • 你在使用XAMPP,环境如何?

标签: php wcf


【解决方案1】:

这里的问题是返回的响应是错误页面(文本/纯文本)而不是 Web 服务响应(应用程序/xml)

要尝试修复它首先找出错误是什么。使用 Wire Shark(或类似的东西)查看发回的内容。

如果错误中的信息不足以发现问题。再次使用 Wire Shark 并从您的 php 客户端和 WCF 测试客户端捕获请求,然后比较两者。

【讨论】:

  • 问题是我无法使用 Wireshark 进行 LAN 跟踪,因为它是在我的本地计算机上开发的,并且 Wireshark 无法捕获 Windows 上的本地主机流量
  • 试试 RawCap,它应该能够嗅探 localhost 流量
【解决方案2】:

感谢大家的帮助和建议,我奇迹般地找到了问题所在。

我需要将绑定从wsHttpBinding 更改为basicHttpBinding,现在可以通过PHP 访问它。

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2017-05-10
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多