著者: samisa
次のテキスト内の翻訳された名前の比較表:
ペイロード: 会話コンテンツ
オブジェクト: インスタンス
関数: 関数
PHP を使用してネットワーク サービスを実装します
使用フレームワーク: WSO2 WSF /PHP
インストール環境: Windows または Linux
(最近のコンピューター記事には難しい翻訳や専門用語が無数にあるのにうんざりしているので、ここでは話し言葉と中国語を使用するようにしています。)
WSMessages クラス:
ネットワークを呼び出す場合 サービス処理中には、送信メッセージと受信メッセージの 2 つのメッセージが必要であり、これらを行き来する前にメッセージを行き来する必要があります。 WSMessages クラスは、オープン ソース フレームワーク Web サービス フレームワーク for php (略して WSF) でこれら 2 つのメッセージをカプセル化するために使用されます。
WSMessages には、メッセージの内容を保存し、「ペイロード」を XML 形式で保存するための非常に重要な変数 str があります (彼らはこれをペイロードと呼びます。英語の辞書を調べましたが、その意味ですが、前後に表示されます)繰り返し表示される外観は会話の内容であり、実際には XML の定義やその他のいわゆる「名前空間」 -> 名前空間定義が削除されます。 名前空間とは何かについては、XML の W3C を確認してください。意味)。ペイロードは非常に不可解なので、今後はこれを「会話コンテンツ」と呼ぶことにします。
クライアント プログラムを通じてリクエストを送信する場合は、WSMessage のインスタンスを構築し、そのインスタンスに XML 形式の会話コンテンツを入力する必要があります。リクエストに対する応答は依然としてプログラムを通じて返される「会話コンテンツ」であり、返されるものは依然として WSMessage インスタンスです。
言い換えると、クライアント関数がネットワーク サービスに応答する場合、その戻り値も WSMessage インスタンスになります。
関数でリクエストを送信し、ネットワーク サービス プログラムを呼び出し、返された内容を WSMessage インスタンスに入れて、関数がこの WSMessage インスタンスを返すようにすることができます。
WSMessage は、添付ファイルなどのより複雑なコンテンツを送受信する傾向があります。 WSMessage を使用してクライアントとサーバー間で通信する方法を詳しく説明します。
会話コンテンツの処理:
php を使用してネットワーク サービスを作成する方法をすでに説明し、ワークフローを示すために単純なクライアント サーバー プログラムを作成しました。しかし、これらのプログラムでは、私たちが「会話の内容」をどのように処理するかについては詳しく説明されていません。つまり、会話内容をxml形式でサーバーに送信しただけで、それを加工することは考えていませんでした。ここでは、会話の内容を処理して計算プログラムで使用する方法について詳しく説明します。
会話内容は、ビジネスロジックで定義され、SOAP(Simple Object Access Protocol)を使用してカプセル化された内容です(SOAP w3cの記事を参照してください)。例を使用して階乗を計算する方法を説明しましょう。
クライアントが送信する必要がある会話の内容:
6
サーバーはこの会話の内容を理解する必要があります。変数が解決され、その階乗が計算されます。以下はサーバー プログラムです:
function getFactorial ( $message ) {
$simplexml = new SimpleXMLElement ( $message -> str ) ;
$value = $simplexml ->
$result = 階乗 ( $value ) ;
$responsePayloadString = <<
XML;
return $responsePayloadString;
3 行目で、入力「会話コンテンツ」を使用して 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 ) ; = " . $simplexml -> result [ 0 ] . "
" ;
3 行目では、返信の会話コンテンツを使用して SimpleXMLElement インスタンスが作成されます。同様に、$response も WSMessage のインスタンスであり、応答の会話コンテンツを XML 形式で格納するメンバー変数 str にアクセスできます。これを SimpleXMLElement コンストラクターに渡し、SimpleXMLElement のインスタンスを作成します。次に、結果要素 (またはノード?要素。XML では要素と呼ぶことができますが、ツリー構造の場合、ノードは多すぎませんか?) にアクセスできます。
次に、チャット情報コンテンツを処理する方法を学習する必要があります。それがクライアントのアプリケーションであるか、サーバーの応答であるか。
注: サーバー側の getFactory 関数 (14 行目) では、返信の会話コンテンツの代わりに WSmessage を返すことができます。この機能を実現するには、次の短いプログラムを使用できます。
$outMessage = new WSMessage( $responsePayloadString );
return $outMessage ;
これは実際には、サーバー プログラムが会話コンテンツを XML 形式で返すことができ、WSMessage
Complete のインスタンスも返すことができることを意味します。プログラムはこの記事の最後に添付します。
メッセージの追跡
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 =
応答 =
;soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
SOAP メッセージのトレースは、呼び出されるサービスを調査する場合、特にサービスやクライアントのバグを見つける場合に非常に役立ちます。たとえば、クライアントが送信したメッセージとサーバーが返信したメッセージをすべて確認したり、会話内容(クライアントとサーバー)の形式を確認したりできます。
デバッグ(この言葉はよく使われる言葉なので、ここでは翻訳しませんが、私の夢はいつかプログラムが中国語で書かれることですが、この夢がどんどん遠ざかっていることは明らかです)
php WSF を使用するときに、ユーザーは 2 つの問題に遭遇することがあります。質問:
wsf をインストールします。 この WSF が適切に動作していることをどうやって確認できますか?まず、phpinfo() 関数を使用して確認できます (この関数とその使用方法がわからない場合は、php マニュアルを確認してください)。php ファイルを作成して次のように記述するだけです。文章をブラウザで開きます。
phpinfo () ;
?>
すべての拡張機能が正しくインストールされている場合は、表に wsf という名前の項目が表示されます。 「WSF サポート」などの単語。これは 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 を通じてどのように連携するかについて説明します。