0

http://www.genivia.com/Products/gsoap/demos/index.htmlにある gSOAP Calculator Service の例を作成しました。

Solaris ボックスで Web サービスをデーモンとして実行しています。

今、php ページを使用して、この新しい Web サービスにアクセスしようとしています。http://www.php.net/manual/en/class.soapclient.phpを見て、例を作成しようとしましたが、うまくいきませんでした。誰かがこれを行う例を教えてもらえますか? またはそれを行うためのコードを教えてください。

2 日間かけて Web サイトを調べたり、さまざまなことを試したりしましたが、プロジェクトの時間がなくなりました。手伝ってくれてどうもありがとう。

fyi: 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();
?>

Web ページはエラーを返しません。

マイケル

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 に答える