string(120) "falseObject reference not -6ren">
gpt4 book ai didi

php - 为什么在我的网络服务中调用操作时会出现此错误 "falseObject reference not set to an instance of an object."

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:18 25 4
gpt4 key购买 nike

我有一个 Web 服务,我正在使用 PHP 中的 SOAP 客户端调用其操作之一,但我得到的只是这个 ["any"]=> string(120) "falseObject reference not set to an instance of一个对象。

我想知道我的代码是否有任何问题,因为我相信我与 Web 服务的连接 %100 正常工作。

我创建的 xml 字符串有什么问题吗?

操作是:

<wsdl:operation name="XmlIslet">
<wsdl:input message="tns:XmlIsletSoapIn"/>
<wsdl:output message="tns:XmlIsletSoapOut"/>
</wsdl:operation>

其参数在 WSDL 中的描述为:

<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
<s:element name="XmlIslet">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="xmlIslem">
<s:complexType>
<s:sequence>
<s:any/>
</s:sequence>
</s:complexType>
</s:element>
<s:element minOccurs="0" maxOccurs="1" name="xmlYetki">
<s:complexType>
<s:sequence>
<s:any/>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="XmlIsletResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="XmlIsletResult">
<s:complexType mixed="true">
<s:sequence>
<s:any/>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>

我的 soap 和 PHP 代码如下:

<?php
$username = "username";
$password = "password";
$xmlString = "<Firmalar></Firmalar>";

function strtoXmldocument($str)
{
$dom = new DOMDocument();
$str1 = $str;
return $dom->loadXML($str1);
}

function stringToDataset($xmlString, $username, $password)
{
$client = new SoapClient('http://1.1.1.1/WSTEST/Service.asmx?WSDL');

$response = $client->XmlIslet(strtoXmldocument($xmlString)->documentElement,
strtoXmldocument("<Kullanici><Adi>" .$username. "</Adi><Sifre>" .$password. "</Sifre></Kullanici>")->documentElement);

var_dump($response);
}

stringToDataset($xmlString, $username, $password);
?>

SOAP请求如下:

POST /WSTEST/Service.asmx HTTP/1.1
Host: 1.1.1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<XmlIslet xmlns="http://tempuri.org/">
<xmlIslem>xml</xmlIslem>
<xmlYetki>xml</xmlYetki>
</XmlIslet>
</soap12:Body>
</soap12:Envelope>

SOAP 响应:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<XmlIsletResponse xmlns="http://tempuri.org/">
<XmlIsletResult>xml</XmlIsletResult>
</XmlIsletResponse>
</soap12:Body>
</soap12:Envelope>

vardump 输出是:

usernamepasswordobject(stdClass)#2 (1) { ["XmlIsletResult"]=> object(stdClass)#3 (1) { ["any"]=> string(120) "falseObject reference not set to an instance of an object." } } 

编辑:我尝试使用 htmlentities($client->__getLastRequest()) 获取请求 xml,这显示我的请求是空的:

========= REQUEST ========== 
string(292)
"<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">
<SOAP-ENV:Body>
<ns1:XmlIslet>
<ns1:xmlIslem/>
<ns1:xmlYetki/>
</ns1:XmlIslet>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> "

最佳答案

您很可能正在与 .NET 服务进行通信。此错误消息基本上是“变量未定义”消息。

WSDL 文件说,您的请求必须包含两个实体:xmlIslem 和 xmlYetki。但是它们的内部结构没有正确定义,它可以是“任何”东西。然而,这并不意味着删除 Web 服务不期望您提供一些数据。看起来您需要传递一些数据,但实际上您不需要,因此会出现错误。

我会联系网络服务提供商并请求文档或特定请求示例。

关于php - 为什么在我的网络服务中调用操作时会出现此错误 "falseObject reference not set to an instance of an object.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43347348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com