【问题标题】:creating a object on soap Client php在soap客户端php上创建一个对象
【发布时间】:2014-02-24 18:32:21
【问题描述】:

我正在尝试使用 php 中的 soap 库来创建一个带有以下代码的新对象:

<?php
    try{
$wsdl="https://THE.IP.HERE:PORT/B1WS/WebReferences/LoginService.wsdl";
$client=new SoapClient($wsdl, array('location' => 'https://THE.IP.HERE:PORT/B1WS/Service.asmx', 'trace' => true));

var_dump($client);

echo "Types: -> ";
print_r($client->__getTypes());

echo "Functions: -> ";
var_dump($client->__getFunctions());

$res=$client->Login(array(
'DatabaseServer'   => 'THE.IP.HERE',
'DatabaseName'     => 'DATABASE_NAME',
'DatabaseType'     => 'dst_MSSQL2012',
'DatabaseUsername' => 'USERNAME',
'DatabasePassword' => 'DATABASE',
'CompanyUsername'  => 'USERNAME',
'CompanyPassword'  => '****',
'Language'         => 'ln_English',
'LicenseServer'    => 'THE.IP.HERE:30000'));
print_r($res);


echo htmlentities($client->__getLastRequest());

}
catch( SoapFault $e )
{

echo htmlentities($client->__getLastRequest());

print_r($e);
}
?>

我收到以下错误:

致命错误:在第 40 行调用 C:\wamp\www\mysite.local\teste.php 中非对象的成员函数 __getLastRequest()

哪一行是 echo htmlentities($client->__getLastRequest());关于崇高的文字。

我在我的 php.ini 上激活了 soap 扩展。我正在使用 php 5.4.12

有人可以帮忙吗?

谢谢

【问题讨论】:

  • 如果将这两行从try/catch块中取出,会出现什么错误? $wsdl="https://THE.IP.HERE:PORT/B1WS/WebReferences/LoginService.wsdl"; $client=new SoapClient($wsdl, array('location' =&gt; 'https://THE.IP.HERE:PORT/B1WS/Service.asmx', 'trace' =&gt; true));
  • 感谢丹尼的回复。评论这些行它给了我一个通知:未定义变量:client in ... 在这一行:var_dump($client) 同样,在行 print_r($client->__getTypes());还有一个 - 致命错误:在与最后一个 NOTICE 位于同一行的非对象 in(...) 上调用成员函数 __getTypes()。
  • 我怀疑实例化 SoapClient 对象时出现问题。尝试将您的错误级别设置为尽可能高 (error_reporting(E_ALL)),看看是否还有其他问题。

标签: php soap


【解决方案1】:

所以,我把这个页面移到了一个在线服务器上,我已经可以得到一些关于数组的信息。但我认为这不是我应该得到的。

object(SoapClient)#1 (4) {
  ["location"]=>
  string(42) "https://MY.IP:PORT/B1WS/Service.asmx"
  ["trace"]=>
  int(1)
  ["_soap_version"]=>
  int(1)
  ["sdl"]=>
  resource(2) of type (Unknown)
}


Types: ->
Array
(
    [0] => struct LoginResponse {
 string SessionID;
}
    [1] => struct LogoutResponse {
}
    [2] => struct MsgHeader {
 string SessionID;
}
    [3] => struct Login {
 string DatabaseServer;
 string DatabaseName;
 DatabaseType DatabaseType;
 string CompanyUsername;
 string CompanyPassword;
 Language Language;
 string LicenseServer;
}
    [4] => string DatabaseType
    [5] => string Language
    [6] => struct Logout {
}
)


Functions: -> array(4) { [0]=> string(38) "LoginResponse Login(Login $parameters)" [1]=> string(41) "LogoutResponse Logout(Logout $parameters)" [2]=> string(38) "LoginResponse Login(Login $parameters)" [3]=> string(41) "LogoutResponse Logout(Logout $parameters)" } 

<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="LoginService"><SOAP-ENV:Body><ns1:Login><ns1:DatabaseServer>MY.IP:PORT</ns1:DatabaseServer><ns1:DatabaseName>MYDATABASE</ns1:DatabaseName><ns1:DatabaseType>dst_MSSQL2012</ns1:DatabaseType><ns1:CompanyUsername>user</ns1:CompanyUsername><ns1:CompanyPassword>pass</ns1:CompanyPassword><ns1:Language>ln_English</ns1:Language><ns1:LicenseServer>MY.IP:30000</ns1:LicenseServer></ns1:Login></SOAP-ENV:Body></SOAP-ENV:Envelope> 

SoapFault Object
(
    [message:protected] => Invalid XML
    [string:Exception:private] => 
    [code:protected] => 0
    [file:protected] => /var/www/vhosts/domain.pt/httpdocs/teste.php
    [line:protected] => 45
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [file] => /var/www/vhosts/domain.pt/httpdocs/teste.php
                    [line] => 45
                    [function] => __call
                    [class] => SoapClient
                    [type] => ->
                    [args] => Array
                        (
                            [0] => Login
                            [1] => Array
                                (
                                    [0] => Array
                                        (
                                            [DatabaseServer] => MY.IP:PORT
                                            [DatabaseName] => MYDATABASE
                                            [DatabaseType] => dst_MSSQL2012
                                            [DatabaseUsername] => user
                                            [DatabasePassword] => pass
                                            [CompanyUsername] => companyuser
                                            [CompanyPassword] => companypass
                                            [Language] => ln_English
                                            [LicenseServer] => MY.IP:30000
                                        )

                                )

                        )

                )

            [1] => Array
                (
                    [file] => /var/www/vhosts/domain.pt/httpdocs/teste.php
                    [line] => 45
                    [function] => Login
                    [class] => SoapClient
                    [type] => ->
                    [args] => Array
                        (
                            [0] => Array
                                (
                                    [DatabaseServer] => MY.IP:PORT
                                    [DatabaseName] => MYDATABASE
                                    [DatabaseType] => dst_MSSQL2012
                                    [DatabaseUsername] => user
                                    [DatabasePassword] => pass
                                    [CompanyUsername] => companyuser
                                    [CompanyPassword] => companypass
                                    [Language] => companypass
                                    [LicenseServer] => MY.IP:30000
                                )

                        )

                )

        )

    [previous:Exception:private] => 
    [faultstring] => Invalid XML
    [faultcode] => env:Sender
    [detail] => stdClass Object
        (
            [ErrorList] => stdClass Object
                (
                    [Error] => System Id = 37574776, Line Number = 2, Column Number = 1, Description = Invalid document structure
                )

        )

)

【讨论】:

  • 第 45 行说:'LicenseServer' => 'MY.IP:30000'));
  • 好的,解决了。问题是我发送的参数比函数预期的要多。我的服务器正在使用 UTF-8 并且 XML 正在验证 UTF-16。谢谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多