如何使用php访问我使用gSoap和C+创建的web服务+;?

如何使用php访问我使用gSoap和C+创建的web服务+;?,php,soap,gsoap,Php,Soap,Gsoap,我创建了gSOAP计算器服务示例,位于: 我的web服务在Solaris机器上作为deamon运行 现在我正试图使用一个php页面来访问这个新的web服务。我一直在看,并试图做出一个例子,但没有运气。有人能给我举个例子吗?或者给我看做这件事的代码 我花了两天时间浏览网站,尝试不同的东西,但我的项目时间不多了。非常感谢你的帮助 仅供参考:我已将apache服务器设置为端口7000 <?php function customError($errno, $errstr) { echo "&

我创建了gSOAP计算器服务示例,位于:

我的web服务在Solaris机器上作为deamon运行

现在我正试图使用一个php页面来访问这个新的web服务。我一直在看,并试图做出一个例子,但没有运气。有人能给我举个例子吗?或者给我看做这件事的代码

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

仅供参考:我已将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();
?>

该网页不返回任何错误


Michael

在您提到的教程中编写了CalcWeb服务生成的。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块中捕获它。

在脚本顶部:

error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
一些需要检查的事项:

  • “包含Unicode签名(BOM)”在编辑器中处于禁用状态
  • ?>
    之后没有空格(您应该删除它)
  • 在cli
    php/path/myscript.php

发布您尝试过的代码。以及运行时遇到的任何错误。请将其放在脚本顶部:
error\u reporting(-1)
并在此处删除
@
$client=@new SoapClient(null,$options)
并重试该页面,以查看是否有任何错误。还有什么回音吗?是我做的。没有区别。页面返回空白。即使在我查看源代码的时候。创建一个新的php页面并将其放入
中,也不应该这样做,因为我的大多数网站都是用php编写的,而且一切正常。好吧,我试过了,但仍然得到一个空白页面。我可以在一个终端上看到我的计算应用程序,显示“套接字连接…”信息。如果我像cgi脚本一样从命令行运行calc,它工作正常。如果在try-and-catch之前或之后添加了一些
echo
,该页面上还有其他输出吗?如果不是,那似乎是PHP的问题。SOAP扩展需要使用libxml和curl扩展进行编译,并且必须启用它们。如果使用HTTPS连接,也需要OpenSSL。请检查phpinfo()以了解这个libs和SOAP扩展(如果启用了它,您应该看到SOAP部分)。当我运行phpinfo时,我看到的唯一内容是在一个名为“Configure Command”的部分中,在该命令的末尾,我看到了“enable SOAP shared”。是这样吗?如果不是,我该如何修复它?我还看到一个名为“libxml版本”的部分,它被设置为“2.6.23”@TheBigOnion:不,那不对。我认为您的SOAP扩展已被禁用。检查php.ini(和conf.d目录)中的
extension=soap.so
。确保此行开头没有“;”符号。如果没有这样的线路,你应该买一条。取消对此行的注释后,必须重新启动web服务器。