【发布时间】:2019-04-25 15:45:13
【问题描述】:
我在使用 SOAP 时遇到问题,我 100% 确定这是我的问题,而不是 Web 服务。
我可以成功连接到 wsdl。
$wsdl="http://webservices_qa.linksunlimited.com/LinksWebService.svc?wsdl";
$client = new SoapClient($wsdl, array('trace'=>1));
$functions = $client->__getFunctions();
var_dump($functions);
向我展示功能,以便我知道我可以使用它。
ini_set('default_socket_timeout', 2000000);
$wsdl="http://webservices_qa.linksunlimited.com/LinksWebService.svc?wsdl";
$client = new SoapClient($wsdl, array('trace'=>1));
$result = $client->GetProductCatalog((object)$links_credentials);
//$result = $client->GetProductCatalog($links_credentials);
//$client->__soapCall("GetProductCatalog", $links_credentials);
//$result = $client->__soapCall("GetProductCatalog", (object)$links_credentials); //when i try this i get null
我预计会有很大的响应,大约 1.6MB。
我得到: 由于内部错误,服务器无法处理请求。有关该错误的更多信息,请在服务器上打开 IncludeExceptionDetailInFaults(来自 ServiceBehaviorAttribute 或来自配置行为)以便将异常信息发送回客户端,或者根据 Microsoft .NET Framework SDK 文档打开跟踪并检查服务器跟踪日志。
编辑:当我尝试时
$result = $client->__soapCall("GetProductCatalog",$links_credentials);
我得到“格式化程序在尝试反序列化消息时抛出异常:反序列化操作'GetProductCatalog'的请求消息正文时出错。应从命名空间'http://schemas.xmlsoap.org/soap/envelope/'结束元素'Body'。找到元素'param1'来自命名空间 ''。第 2 行,位置 158。"
我觉得我很接近......
【问题讨论】:
-
听起来你也没有正确地请求方法
-
$links_credentials的内容是什么?它是如何构成的?是否识别tns:GetProductCatalog类型的定义? -
检查您在请求中发送的参数,即在您的情况下为 $link_credentials。所有参数都区分大小写,如果结构不正确,可能会导致内部服务器错误。使用 SoapUI 或 Boomerang 等 3rd 方 Soap API 工具来获取 wsdl 文件请求的正确语法
标签: php soap soap-client