0

我创建了 gSOAP 计算器服务示例,位于:http ://www.genivia.com/Products/gsoap/demos/index.html

我的 Web 服务在我的 Solaris 机器上作为守护进程运行。

现在我正在尝试使用 php 页面来访问这个新的 Web 服务。我一直在看http://www.php.net/manual/en/class.soapclient.php,并试图做一个例子,但没有运气。有人可以指点我这样做的一个例子吗?或者告诉我这样做的代码?

我花了两天时间浏览网站并尝试不同的东西,但我的项目已经没有时间了。非常感谢你的帮助。

仅供参考:我将我的 apache 服务器设置为端口 7000。

<?php

function customError($errno, $errstr)
{
  echo "<b>Error: </b> [$errno] $errstr";
}

set_error_handler("customError");

define("SOAP_ENCODED", 1);
define("SOAP_RPC", 1);

$options = array(
 'compression'=>true,
 'exceptions'=>false,
 'trace'=>true,
 'use' => SOAP_ENCODED,
 'style'=> SOAP_RPC,
 'location'=> "http://localhost:7000",
 'uri' => "urn:calc"
);

echo "1";

$client = @new SoapClient(null, $options);

echo "2";

$args = array(2, 3);

$ret = $client->__soapCall("add", $args);

echo "3";

if (is_soap_fault($ret))
{
  echo 'fault : ';
  var_dump($client->__getLastRequest());
  var_dump($client->__getLastRequestHeaders());

}
else
{
echo 'success : ';
  print '__'.$ret.'__';
}

$client->ns__allAllowed();
?>

该网页不返回任何错误。

迈克尔

4

2 回答 2

1

在脚本的顶部:

error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);

需要检查的一些事项:

  • 包含 Unicode 签名 (BOM)在您的编辑器中已关闭
  • 之后没有空格?>(你应该删除它)
  • 在 cli 中运行脚本php /path/myscript.php
于 2011-07-07T19:16:29.703 回答
0

在您提到的教程中,Calc Web 服务生成WSDL。WSDL 是描述 Web 服务的所有方法和类型的文件。记住这一点,您可以在 PHP 中创建 SOAP 客户端:

$client = new SoapClient('http://www.mysite.com/calc.wsdl',
                          array('trace' => true, 'exceptions' => true));

然后可以调用 Web 服务提供的任何方法:

try {
    $client = new SoapClient('http://www.mysite.com/calc.wsdl',
                          array('trace' => true, 'exceptions' => true));

    $result = $client->methodName($param1, $param2);
} catch (SoapFault $e) {
    var_dump($e);
}

var_dump($result);

如果会发生一些错误,您将在 try/catch 块中捕获它。

于 2011-07-07T18:25:33.370 回答