著者: samisa
以下のテキスト内の翻訳名の比較表:
ペイロード: 会話内容
オブジェクト: インスタンス
function: 関数
phpを使用してネットワークサービスを実装
使用フレームワーク: WSO2 WSF/PHP
インストール環境: WindowsまたはLinux
(うんざり) 現在、コンピューターの記事には理解するのが難しい翻訳や専門用語が無数に含まれているため、ここでは話し言葉と中国語を使用することにします。)
WSMessages クラス:
ネットワーク サービスを呼び出すプロセスでは、2 つのメッセージが必要です。送信メッセージと受信メッセージは、連絡先がある場合にのみ通信できます。 WSMessages クラスは、オープン ソース フレームワーク Web サービス フレームワーク for php (略して WSF) でこれら 2 つのメッセージをカプセル化するために使用されます。
WSMessages には、メッセージの内容を保存し、「ペイロード」を XML 形式で保存するための非常に重要な変数 str があります (彼らはこれをペイロードと呼びます。英語の辞書で調べました。意味はその通りですが、前後に表示されます)繰り返しになりますが、今見てみると、会話の内容は実際には、xml の定義とその他のいわゆる「名前空間」 -> 名前空間の定義を除外しているだけです。名前空間とは何かを理解するには、W3C の xml 定義を確認してください。ペイロードは非常に不可解なので、今後はこれを「会話コンテンツ」と呼ぶことにします。
クライアント プログラムを通じてリクエストを送信する場合は、WSMessage のインスタンスを構築し、そのインスタンスに XML 形式の会話コンテンツを入力する必要があります。リクエストに対する応答は依然としてプログラムを通じて返される「会話コンテンツ」であり、返されるものは依然として WSMessage インスタンスです。
言い換えると、クライアント関数がネットワーク サービスに応答する場合、その戻り値も WSMessage インスタンスになります。
関数でリクエストを送信し、ネットワーク サービス プログラムを呼び出し、戻り内容を WSMessage インスタンスに入れて、関数にこの WSMessage インスタンスを返させることができます。
WSMessage は、添付ファイルなどのより複雑なコンテンツを送受信する傾向があります。 WSMessage を使用してクライアントとサーバー間で通信する方法を詳しく説明します。
会話コンテンツの処理:
php を使用してネットワーク サービスを作成する方法をすでに説明し、ワークフローを示すために単純なクライアント サーバー プログラムを作成しました。しかし、これらのプログラムでは、私たちが「会話の内容」をどのように処理するかについては詳しく説明されていません。つまり、会話内容をxml形式でサーバーに送信しただけで、それを加工することは考えていませんでした。ここでは、会話の内容を処理して計算プログラムで使用する方法について詳しく説明します。
会話内容は、ビジネスロジックで定義され、SOAP(Simple Object Access Protocol)を使用してカプセル化された内容です(SOAP w3cの記事を参照してください)。例を使用して階乗を計算する方法を説明しましょう。
クライアントが送信する必要がある会話の内容:
6
サーバーは、この会話の内容を理解し、変数を区別して階乗を計算する必要があります。以下はサーバー プログラムです:
function getFacttorial ( $message ) {
$simplexml = new SimpleXMLElement ( $message -> str ) ;
$value = $simplexml -> param [ 0 ] ; $ 値 ) ;
$responsePayloadString = <
}
3 番目の OK、入力「会話コンテンツ」を使用して simpleXmlElement のインスタンスを作成します。入力した会話内容が、関数パラメータで渡されたWSMessageインスタンスの$messageのstr変数に保存されていることがわかります。注: SimpleXml は、XML ファイルまたは文字列を処理するための PHP 拡張機能です。 WSO2 WSF/PHP では、XML を処理するためにどの PHP 拡張子を使用する必要があるかが指定されていません。 domdocument、saxdom など、お気に入りの XML および PHP 拡張機能を使用して処理できます。
4 行目は会話コンテンツからパラメータ値を抽出します。これは、サービス プログラムがパラメータの種類など、これらのパラメータを理解する方法を知る必要があることを意味します。 (通常、このパラメータのタイプは会話の内容に記載する必要があります)。関数の残りの部分は階乗の通常の処理です。 6 行目では、他の関数を呼び出して階乗が計算されます。 8行目から12行目までは返信の会話内容も記載されており、返信する必要があります。 14行目で返信の会話内容を返しています。
返信の会話コンテンツは次のようになります:
同様に、クライアントも同じメソッドを使用して返信の会話コンテンツを処理できます。
$response = $client -> request ($reqestPayloadString) ;
$simplexml = new SimpleXMLElement ($response -> str) ;
echo "$simplexml -> 結果" br/>" ;
3 行目では、返信の会話コンテンツを使用して SimpleXMLElement インスタンスが作成されます。同様に、$response も WSMessage のインスタンスであり、応答の会話コンテンツを XML 形式で保存するメンバー変数 str にアクセスできます。これを SimpleXMLElement コンストラクターに渡し、SimpleXMLElement のインスタンスを作成します。次に、結果要素 (またはノード?要素、XML では要素と呼ぶことができますが、ツリー構造の場合、ノードは多すぎませんか?) にアクセスできます。
ここで、会話情報コンテンツの処理方法を学ぶ必要があります。それがクライアントのアプリケーションであるか、サーバーの応答であるか。
注: サーバー側の getFactory 関数 (14 行目) では、返信の会話コンテンツの代わりに WSmessage を返すことができます。この機能を実現するには、次の短いプログラムを使用できます。
$outMessage = new WSMessage( $responsePayloadString );
return $outMessage ;
これは実際には、サーバー プログラムが会話コンテンツを XML 形式で返すことができ、WSMessage のインスタンスも返すことができることを意味します
完全なプログラムは最後にありますこの記事を添付します。
メッセージの追跡
PHP 用の WSO2 Web サービス フレームワークを通じて、クライアントによって送信された SOAP メッセージを追跡でき、クライアントはサーバーからメッセージ (つまり、会話の内容) を受信します。ネットワーク クライアント サービス クラスの WSClient には、この目的を達成するための 2 つの関数 getLastReauest() と getLastResponse() があります。クライアントが request() 関数を使用した後、これら 2 つの関数を通じて会話情報を取得できます。
$response = $client -> request ( $reqestPayloadString ) ;
printf ( "
Request = %s " ,
htmlspecialchars ( $client -> getLastRequest ()) ;
printf ( "
Response = %s " ,
htmlspecialchars ( $client -> getLastResponse ())) ;
上記のプログラム フラグメントは、request() によって実装されたリクエストを表示します。機能と返信の内容。
実際、このプログラムは次のような出力を行います:
Request =
Response =
SOAP メッセージのトレースは、呼び出されたサービスの調査、特にサービスとクライアントのバグの発見に非常に役立ちます。例えば、クライアントが送信したメッセージとサーバーが返信したメッセージをすべて確認したり、会話内容(クライアントとサーバー)の形式を確認したりできます。
デバッグ(この言葉はよく使われるので、勝ちました)ここでは翻訳しないでください。私の夢は、いつかプログラムが中国語で書かれるようになるということですが、この夢がどんどん遠ざかっていることは明らかです)
ユーザーは php WSF を使用するときに 2 つの問題に遭遇することがあります:
wsf のインストール。 。 この WSF が適切に動作していることをどうやって確認できますか?まず、phpinfo() 関数を使用して確認できます (この関数とその使用方法がわからない場合は、php マニュアルを確認してください)。php ファイルを作成して次のように記述するだけです。文章をブラウザで開きます。
phpinfo () ;
?>
すべての拡張機能が正しくインストールされている場合、表に「wsf Words like support」という項目が表示されます。これは php.ini で定義されています (または、たとえば、php.ini で定義せずに、wsf.ini という新しいファイルを /etc/php5/conf.d/ に書きました。実際には、このファイルはすべてこの中にあります)フォルダーは後で php.ini にマージされるため、php.ini で対応する設定が見つからず、wsf が利用できない場合は、ここに来て確認してください)
この拡張子が表示されない場合。 phpinfo で、インストール ガイドを見つけて注意深く検討する必要があります。見つからない場合は、ferdinandfly@yahoo.ca までメールを送ってください。
インストールに成功したら、2 番目の質問は「できます」です。この例は正しく動作しないようです。同様に、一部の設定が正しいことを確認する必要があります。 1 つ目は、php.ini レコードに一部のログ ファイルへのパスが設定されていることが多いということです。おそらく、ログ ファイルが存在しないか、設定されたパスが php5 によって読み書きできない可能性があります。また、php.ini にいくつかのスクリプト ファイルが含まれていること、およびこれらのスクリプト ファイルが読み取り可能であることを確認する必要があります。
上記は正しいが、wsf が動作していない場合は、ログ ファイルを確認できます。ログ ファイルは、wsf.log_path レコードによって決定されるパスに書き込まれます。これはphp.iniで設定します。設定されていない場合、ログは /tmp (Linux) にあります。知っておく必要があるのは、Windows プラットフォームではデフォルトのパスが存在しない可能性があるため、そのログ パスを指定する必要があるということです。サービスに関連するログは wsf_php_server.log に記録され、クライアントに関連するログは wsf_php_client.log に保存されます。クライアントとサービス ホストが同じマシンではない場合、両方のファイルがサーバー上にあります。ログ レベルを調整することで、さまざまな詳細レベルのログ ファイルを取得できます。デバッグの場合は、レベル 4 に設定できます。もちろん、成熟したソフトウェアの場合は、0 (重大なエラーのみ) または 1 (エラー) に設定できます。
交換コンテンツ (SOAP) が希望の形式であることを確認したい場合は、前に説明したように、SOAP メッセージ トレースを使用してデバッグできます。
まとめ:
この記事では、WSMessage クラスと会話コンテンツの処理方法について説明しました。これを使用すると、クライアントまたはサーバーは WSMessage の str メンバー変数を呼び出すことで会話コンテンツ (xml) を取得できます。通常、会話コンテンツの形式は WSDL によって定義されるため、クライアントとサーバーが同じ形式に準拠することを要求するのは合理的です。次の章では、WSF/PHP と WSDL が WSO2 を通じてどのように連携するかについて説明します。