$soap->register('hello'); //最後のステップは、クライアントによって送信されたデータを post メソッドを通じてサービス オブジェクトのサービス メソッドに渡すことです。
//サービス メソッドは入力データを処理し、対応する関数またはメソッドを呼び出し、正しいフィードバックを生成してクライアントに送り返します。
$soap->service($HTTP_RAW_POST_DATA);
?>
この時点で、クライアント プログラム コード ファイル「/nusoap/nusoap_client1.php」が作成されます。 WEBサービスを呼び出す:
コードをコピー
コードは次のとおりです:
//NuSOAP ソース ファイルを現在のコード ファイルにインクルードします
require_once(“lib/nusoap.php”);
// クラス soapclient のインスタンスであるクライアント オブジェクトを初期化します
/ /サービスプログラムのURLアドレスをsoapclientクラスのコンストラクタに渡します。
$client = newsoapclient('http://127.0.0.1/nusoap/nusoap_server1.php'); //クライアントオブジェクトのcallメソッドを利用してWEBサービスを呼び出すプログラム
$str=$client-> ;call(' hello'); //クライアント オブジェクトの getError() メソッドを使用して、呼び出しプロセスにエラーがあるかどうかを確認できます。
//エラーがない場合、getError() メソッドは false を返します。エラーがある場合、getError() メソッドはエラー情報を返します。
if (!$err=$client->getError()) {
echo ” プログラムが返します:”,htmlentities($str,ENT_QUOTES);
} else {
echo ” エラー:”,htmlentities($err,ENT_QUOTES) ) );
}
?>
この時点で、ブラウザを開いてクライアント プログラムにアクセスし、結果を確認します。この例では、ブラウザーに次の文字列が表示されます: 「プログラムは次を返します: Hello World!」
2.2 パラメーターを渡してエラー情報を返す方法
次に、例を使用してパラメーターを渡し、エラー情報を返す方法を説明します。この例では、2 つの文字列の接続を実装しています。パラメータは 2 つの文字列であり、戻り値は 2 つのパラメータを連結して形成された文字列です。まず、サービス プログラム コード ファイル "/nusoap/nusoap_server2.php" を作成します。 完全なコードは次のとおりです。
コードをコピーします。 コードは次のとおりです。
require_once(" lib/nusoap.php") ;
function concatenate($str1,$str2) {
if (is_string($str1) && is_string($str2))
return $str1 . $str2;
else
return newsoap_fault(' client',",' concatenate 関数のパラメータは 2 つの文字列である必要があります');
}
$soap = newsoap_server;
$soap->register('concatenate');
$soap->service($ HTTP_RAW_POST_DATA);
?> ;
セクション 2.1 の WEB サービス プログラムのコードと比較すると、以下の 2 つの点に注意してください。 NuSOAP サービス プログラムを登録するプロセスはすべて同じであり、渡された 2 つのパラメーターのいずれかが文字列でない場合、プログラムはサービス オブジェクトの register メソッドを呼び出します。このクラスを通じてクライアントにエラー メッセージを返します。コンストラクターには 4 つのパラメーターがあります:
fault $parameters=array('String1','String2');
$str=$client->call('concatenate',$parameters); $err=$client->getError ()) {
echo ” プログラム return:”,$str;
} else {
echo ” エラー:”,$err;
;
NuSOAP クライアントがパラメータを指定して WEB サービスを呼び出すとき、配列を使用してパラメータを渡します。 $parameters は、各パラメータの値を順番に含む配列です。クライアントがリモート サービス プログラムを呼び出すときは、2 つのパラメーターを指定した call メソッドを使用します。最初のパラメーターはサービス プログラムの名前で、2 番目のパラメーターはサービス プログラムのパラメーター配列 (ここでは $parameters) です。ブラウザ経由で上記のクライアント プログラムにアクセスすると、ブラウザには「Program returns: String 1 String 2」という文字列が表示されます。
次に、WEB サービス プログラムにエラー パラメーターを渡して、上記のクライアント プログラムを変更してみます。 $parameters=array("String",12) のパラメータ配列を生成し、ブラウザを通じてクライアント プログラムにアクセスすると、ブラウザには文字列「エラー: クライアント: 連結関数のパラメータは 2 つの文字列である必要があります。」が表示されます。 WEB サービス プログラムは、渡されたパラメータの 1 つが文字列ではないと判断し、soap_fault を通じてクライアントにエラー メッセージを返します。
2.3 デバッグ方法
NuSOAP では一般的に使用される 3 つのデバッグ方法があります:
2.3.1 soapclient クラスのリクエストおよびレスポンスのメンバー変数
最も直接的なデバッグ方法は、プロセス中にクライアントによって発行されたリクエスト情報とサービスを確認することです。 WEBサービスへのアクセス時にクライアントから返される応答情報。 soapclient クラスのリクエストおよびレスポンスのメンバー変数には、この情報が含まれています。プログラム内でこれら 2 つの変数の内容を表示すると、プログラムの実行ステータスを分析するのに役立ちます。以下のコードを見てください:
コードをコピーします コードは次のとおりです:
require_once("lib/nusoap.php");
$client = newsoapclient('http: //127.0.0.1 /nusoap/nusoap_server2.php');
$parameters=array(' string1',' string2');
$str=$client->call('concatenate',$parameters); ( !$err=$client->getError()) {
echo ” プログラムの戻り値:”,$str;
} else {
echo ” エラー:”,$err;
//リクエスト変数とレスポンス変数コンテンツ
echo '
';
echo 'Request:';
echo '
',htmlspecialchars($client->request,ENT_QUOTES),'
' ;
echo 'Response:';
echo '
',htmlspecialchars($client->response,ENT_QUOTES),'
'
2.3.2 の debug_str メンバーsoapclient クラス 変数
soapclient クラスの debug_str メンバー変数は、より詳細なデバッグ情報を提供します。この変数の内容を表示すると、プログラムのデバッグに役立ちます。
2.3.3 WEBサービスプログラムが提供するデバッグメソッド
WEBサービスプログラムのコードでは、soap_serverクラスのインスタンスを作成する前に、変数$debug=1を定義します。デバッグ情報はメモとして使用され、SOAP メッセージの最後に配置されてクライアントに返されます。クライアントは、WEB サービスの応答情報を参照することでデバッグ情報を確認できます。
コードをコピーします
コードは次のとおりです: require_once("lib/nusoap.php")
function concatenate($str1,$str2) {
if (is_string($) str1) && is_string($str2))
return $str1 . $str2;
else
return newsoap_fault('client',",'連結関数のパラメータは 2 つの文字列である必要があります');
}
$debug= 1; //デバッグを定義します
$soap = new saw_server;
$soap->service($HTTP_RAW_POST_DATA);
2.4 のサポートNuSOAP の WSDL サポートは、「WSDL」クラスを通じて内部的に実装されます。NuSOAP ユーザーにとって、WSDL のサポートは、soap_server クラスとsoapclient クラスを正しく使用することで実現できます。 1 WSDLに対応したWEBサービスを作成します
WEBサービスプログラムのWSDL対応を実現するには、soap_serverのconfigureWSDLメソッドを使用し、soap_serverのregisterメソッドを呼び出してWEBサービスプログラムを登録する必要があります。より詳細なパラメータを指定するには、以下のコードを参照してください。コードのファイル名は「/nusoap/nusoap_server3.php」です
コードは次のとおりです:
require_once("lib/nusoap.php");
function concatenate($str1,$str2) {
if (is_string($str1) && is_string($str2))
return $str1 . str2;
else
return newsoap_fault('client',",'concatenate 関数のパラメータは 2 つの文字列である必要があります');
}
$soap = newsoap_server;
$soap->configureWSDL('concatenate' ) ; // WSDL のサポートを初期化します
// サービスを登録します
$soap->register('concatenate',
array(“str1″=>”xsd:string”,”str2″=>”xsd: string”) ), // 入力パラメータの定義
array("return"=>"xsd:string") // 戻りパラメータの定義
); $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) : ";
$soap ->service($HTTP_RAW_POST_DATA);
?>
次に、ブラウザを開いて、作成したファイル http://127.0.0.1/nusoap/nusoap_server3.php にアクセスすると、結果は次のようになります。サービスの WSDL を表示します。操作名をクリックして詳細を表示します。
concatenate
関数名 concatenate をクリックして、関数の説明を表示します。 「WSDL」をクリックするか、WEBサービスファイルにアクセスしてクエリ文字列「?wsdl」(http://127.0.0.1/nusoap/nusoap_server3.php?wsdl)を追加してWEBサービスのWSDLコンテンツを取得します。
2.4.2 WSDL を介した WEB サービスの呼び出し
WSDL を介した WEB サービスの呼び出しは、WSDL を使用せずに WEB サービスを呼び出すこととほぼ同じです。違いは、WSDL を介して WEB サービスを呼び出し、soapclient クラスを初期化するときに、2 つのパラメーターが soapclient のコンストラクターに渡されることです。最初のパラメーターは WSDL ファイルのアドレスであり、2 番目のパラメーターは WSDL を使用するかどうかを指定するだけです。それは真実です。以下のコードを見てください。コードのファイル名は「/nusoap/nusoap_client3.php」です
コードをコピーします
コードは次のとおりです: require_once("lib/nusoap .php");
$ client = new soapclient('http://127.0.0.1/nusoap/nusoap_server3.php?wsdl',true);
$parameters=array('String1','String2');
$ str=$ client->call('concatenate',$parameters);
if (!$err=$client->getError()) {
echo ” プログラムは次を返します:”,$str;
echo ” error :”,$err;
}
?>
2.4.3 プロキシの使用
NuSOAP は、リモート WEB サービスを呼び出すためのプロキシ メソッドを提供します。この方法では、クライアントプログラム内にリモートサービスのプロキシオブジェクトを作成し、soapclientクラスのcallメソッドを経由せずにプロキシ経由でリモートWEBサービスを直接呼び出します。以下のコードを見てください。
コードをコピーします
コードは次のとおりです: require_once("lib/nusoap.php");
$client = newsoapclient('http://127.0.0.1/) nusoap/nusoap_server3.php?wsdl',true);
$proxy=$client -> getProxy(); // プロキシ オブジェクト (soap_proxy クラス) を作成します
$str=$proxy->concatenate(" パラメーター 1", 「パラメータ 2」
}
?>
http://www.bkjia.com/PHPjc/324093.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/324093.html
技術記事
これは、HTTP 経由で SOAP メッセージを送受信する、完全に PHP 言語で記述された一連の PHP クラスであるオープン ソース ソフトウェアであり、NuSphere Corporation (http://dietrich.ganx4.com/nusoap/) によって開発されています。ヌス...