ホームページ  >  記事  >  バックエンド開発  >  NuSOAP チュートリアル_PHP チュートリアル

NuSOAP チュートリアル_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:35:25795ブラウズ

这个文档描述了如何取得和安装 NuSOAP,然后提供一些实例来说明 NuSOAP 的功能,这并不是一个全面的 NuSOAP 的介绍,但是希望能够然一些 PHP 开发者可以有一个很好的入门。

NuSOAP 是一组 PHP 类,它让开发者可以创建和使用 SOAP web services。它不需要安装任何的 PHP 扩展。它是在2004年12月3日被开发,当前的版本是 NuSOAP(0.6.7) 。支持 SOAP 1.1 规范,它能够生产 WSDL 1.1 ,当然也可以使用它,同时也支持 rpc/encoded and document/literal service。但是,必须注意 NuSOAP 没有像 .NET 和 Apache Axis 那样提供完全的实现。

Hello, World
我会以 "Hello, World" 为实例做开始,编写基本的 NuSOAP 客户端和服务器端的代码。

我们先从服务器端开始,应为没有服务器端,有客户端也是没有意义的。我们将编写一个带有单个参数并返回一个字符串,名叫 Hello 的 SOAP 方法,希望代码中的注释能够提供有效的说明。

// Pull in the NuSOAP code
require_once(nusoap.php);
// Create the server instance
$server = new soap_server;
// Register the method to expose
$server->register(hello);
// Define the method as a PHP function
function hello($name) {
    return Hello, . $name;
}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ;
$server->service($HTTP_RAW_POST_DATA);
?>

以下是客户端的代码,有一些重要的事情需要注意:首先,当创建实例 soapclient 时,需要指定一个 service 的 URL 为参数,在这个实例中,helloworld.php 从 http://localhost/phphack 访问的。当然,你要使用的 services 放在不同的 URL;第二,当调用service 时,第一个参数是 service 的名字,必须要匹配有效的方法名(有的服务器是大小写敏感的)。在这个实例,他必须匹配在 helloworld.php 中已经注册了的方法。最后,第二个参数是一个数组,它将是传递给 SOAP service 方法作为参数。既然 helloworld.php 中的方法 hello 只有一个参数,那么数组就只有一个元素。

// Pull in the NuSOAP code
require_once(nusoap.php);
// Create the client instance
$client = new soapclient(http://localhost/phphack/helloworld.php);
// Call the SOAP method
$result = $client->call(hello, array(name => Scott));
// Display the result
print_r($result);
?>

Debugging
编程时,当有问题出现的时候你都需要调试。NuSOAP 提供了一组工具来帮助你做这个工作。NuSOAP 调试的时候需要查看的信息是发送的请求信息和返回的相应信息。NuSOAP 的客户端类允许你通过它的两个成员来查看这些信息。例如,这里是显示请求和响应的 helloworldclient.php 的修改版。在下一部分我会回顾显示在客户端代码的请求和响应信息。

// Pull in the NuSOAP code
require_once(nusoap.php);
// Create the client instance
$client = new soapclient(http://localhost/phphack/helloworld.php);
// Call the SOAP method
$result = $client->call(hello, array(name => Scott));
// Display the result
print_r($result);
// Display the request and response
echo

Request

;
echo
 . htmlspecialchars($client->request, ENT_QUOTES) . 
;
echo

Response

;
echo
 . htmlspecialchars($client->response, ENT_QUOTES) . 
;
?>

NuSOAP 也提供了一个方法使用它的类就可以通过日志来查看调试信息。加入以下的代码将会显示冗长的调试信息。不幸的是输出的说明必须留给读者。

// Display the debug messages
echo

Debug

;
echo
 . htmlspecialchars($client->debug_str, ENT_QUOTES) . 
;

服务器端能够提供相似的调试信息,有趣的是,这些调试信息是在SOAP 的相应的末尾以 xml 格式显示,因此它可以在客户端中查看到。服务器端的调试看起来像这样:

// NuSOAP コードを取り込みます
require_once(nusoap.php);
// サーバー インスタンスを作成する *前* デバッグを有効にします
$debug = 1;
// サーバー インスタンスを作成します
$server = new soap_server;
// 公開するメソッドを登録します
$server->register(hello);
// メソッドを PHP 関数として定義します
function hello($name) {
Return $name;
}
// リクエストを使用してサービスを呼び出します
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ;
$server->service($HTTP_RAW_POST_DATA);
?>

3 番目のデバッグ方法は実際のデバッグではなく、良いプログラミングの練習です。上記の例では、SOAP を呼び出すときにエラー チェックを行いません。より堅牢なクライアントは次のようになります。

// NuSOAP コードを取り込みます
require_once(nusoap.php);
// クライアント インスタンスを作成します
$client = newsoapclient(http://localhost/phphack/helloworld.php);
/ / エラーを確認します
$err = $client->getError();
if ($err) {
// エラーを表示します
echo

コンストラクタエラー: . /b>

;
// この時点で、後続の呼び出しは失敗することがわかります
}
// SOAP メソッドを呼び出します
$result = $client->call(hello, array(name = > Scott));
// 障害をチェックします
if ($client->fault) {
echo

Fault: ;
print_r($result);
echo ;
} else {
// エラーをチェック
$err = $client->getError();
if ($err) {
// エラーを表示
echo

< ;b>エラー: . $err .

;
} else {

コードをテストするには、エラーを発生させる必要があります。たとえば、呼び出されるメソッド名 hello を Goodbye に変更します。

リクエストとレスポンス
上記の例では、SOAP リクエストとレスポンス情報を表示するのがいかに簡単かを示しました。hello2client.php のリクエスト情報は次のとおりです。
POST /phphack/helloworld2.php HTTP/1.0

ホスト: localhost

ユーザーエージェント: NuSOAP/0.6.8 (1.81)

Content-Type: text/xml; charset=ISO-8859-1

SOAPAction: ""
コンテンツの長さ: 538


SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/エンコード/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"

xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:si="http:/ /soapinterop.org/xsd">


Scott



HTTP ヘッダーでは、SOAPAction が空の文字列。これはデフォルト値です。サービス メソッドで SOAPAction の値を設定し、クライアント コードで SOAPAction をパラメータとして指定してメソッドを呼び出すことができます。
XML ペイロードでは、NuSOAP が Latin-1 としてよく知られている ISO-8859-1 をエンコーディングとして使用していることがわかります。別のエンコーディングを指定するには、クライアントのsoapclient インスタンスにsoap_defencoding 属性を設定します。もちろん、指定されたエンコーディングを使用してパラメータ データをエンコードするのはプログラマの責任です。幸いなことに、PHP には、UTF-8 など、SOAP で最も一般的なエンコード データをエンコードおよびデコードするための関数が多数用意されています。


もう 1 つの注意点は、hello という名前の要素が http://tempuri.org のドメイン名の下に配置されることです。多くのサービスでは、実際のドメイン名を指定するのがベスト プラクティスです。も非常に必要です。将来のドキュメントはここに示されています:

SOAP サービスの応答は次のようになります:

HTTP/1.1 200 OK

サーバー: Microsoft-IIS/5.0

日付: Wed, 03 Nov 2004 21:32:34 GMT

X-Powere

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/508345.html技術記事このドキュメントでは、NuSOAP の入手方法とインストール方法を説明し、NuSOAP の機能を説明するための例をいくつか示します。これは NuSOAP の包括的な紹介ではありませんが、理解できるようになれば幸いです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。