サーバー側の Wsdl を理解した上で、サーバー側のコードを記述せずに、クライアント側のコードを記述するだけでサーバー側のメソッドを呼び出すことはできますか?

WBOY
リリース: 2016-06-23 14:13:05
オリジナル
998 人が閲覧しました

私はアドバイスを求めている初心者ですが、専門家の友人がアドバイスをくれることを願っています。ありがとうございます。
今朝早くから Web サービスの勉強を始めました。あまり専門的ではない参考書を持っていましたが、その中のメソッドを呼び出そうと思いました。しかし、一日中勉強しました。利用してもエラーが発生し続けたので、落ち込んでいました。
コードは次のとおりです:
$client = new SoapClient('http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?WSDL',array('encoding'=>') gb2312') );
$param=array('theStockCode'=>'sh600031');
$result = $client->__soapcall('getStockInfoByCode',$param); getStockInfoByCodeResult;
print_r($jg);
?> これだけです。サーバー コードはありません。Apache+php+mysql を使用しても検出できます。 one 方向は PHP に集中することです。実行後、次のエラー メッセージが表示されます。 致命的なエラー: SoapFault 例外が捕捉されません: [soap:Server] サーバーは要求を処理できません。 ---> オブジェクト参照がオブジェクトのインスタンスに設定されていません。 C:Program Files6000345.php:4 のスタック トレース: #0 C:Program Files6000345.php(4): SoapClient->__soapCall('getStockInfoByC...', Array) #1 C:Program Files6000345 で {main} がスローされました.php 行 4

ディスカッション (解決策) への返信

この投稿は xuzuning によって最終編集されました: 2013-03-05 08:03:50

...$param = array('theStockCode'=>'sh600031');$result = $soapClient->__soapCall('getStockInfoByCode', array($param));
ログイン後にコピー
または
...$param=array('theStockCode'=>'sh600031');$result = $soapClient->getStockInfoByCode($param);print_r($result->getStockInfoByCodeResult);
ログイン後にコピー
stdClass オブジェクト

(

[string] => Array
=> 11.78 => 11.70 [19] => 10.74 / 935.00 [20] => 10.79 / 309.50 => 10.80 / 2509.34
[24] => 10.83 / 39 00
)

)

まず第一に、ありがとう、友人熱心なお返事をいただきましたので、まずは試してみます。

元のコードは以下の通りで、友人 $client = new SoapClient('http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?WSDL ',array('encoding '=>'gb2312'));
$param = array('theStockCode'=>'sh600031');
$result = $soapClient->getStockInfoByCode($param); ($result-> getStockInfoByCodeResult);
?>
友人の指示に従って実行すると、以下のエラーメッセージが表示されます。
致命的なエラー: 4 行目の非オブジェクトでメンバー関数 getStockInfoByCode() を呼び出しています

soapClient


あなたの名前は $client です

soapclient と $client、1 つはインスタンス化されたオブジェクト、もう 1 つは変数名です。これでもポイントを明確に区別でき、プログラムに混乱はありません。私の現在の疑問は、コードに構文エラーがあるのか​​、それとも参照されるオブジェクトが標準化されていないのかということです。それとも、wsdl ファイルのパスに問題があるのか​​、頭が混乱してしまい、まったくわかりません。実際、目的は簡単で、クライアントに株価を表示することです。結果を出します。再度、感謝します。

soapclient と $client、1 つはインスタンス化されたオブジェクトで、もう 1 つは変数名です。これはまだ明確に区別でき、プログラム内で混乱はありません。私の現在の疑問は、コードに構文エラーがあるのか​​、それとも参照されるオブジェクトが標準化されていないのかということです。あるいは、wsdl ファイルのパスに問題があるのか​​もしれません。実際、目標はクライアントに株価を表示するという単純なものです。実際に試してみて結果を出します。再度、感謝します。


ああ?それは...ですか。明確に区別していますか?
これは何ですか? :
$client = new SoapClient('http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?WSDL',array('encoding'=>'gb2312'));
$param = array( 'theStockCode'=>'sh600031');
$result = $soapClient->getStockInfoByCode($param);
当然、次のようになります。 -> ;getStockInfoByCode($param);



試してみましたが、まだ動作しません。致命的なエラー: SoapFault 例外がキャッチされません: [HTTP] C:Program FilesApache Software FoundationApache2.2htdocsCreateSoap600033.php で URL を解析できません: 15 スタック トレース: #0 [内部関数]: SoapClient->__doRequest('__soapCall('getStockInfoByC...', Array) #2 {main} がスローされましたこのような長いエラー メッセージをどうすればよいかわかります。

PHP が非常に弱い理由がわかりました。天気予報インターフェイスはリモート サーバーで正常に呼び出されますが、初心者はせっかちでエラーが頻繁に発生します。本を読んでいただけで、何もわからなかったのですが、努力しなかったわけではなく、ただ検索範囲が広すぎて、何をすればいいのかわからなかっただけなのです。 WEB 呼び出しは非常に簡単で、望んでいたものは 3 ~ 4 行しかないことがわかりましたが、WSDL を見つけて $client = new ステートメントでロードするのに時間がかかりました。 SoapClient。これが重要なステップです。次のステップは、私が間違った方向に進んでいると思ったメソッドを引用することです。例: $param = array('theCityName'=>"Nanyang");

$result = $client->__soapCall('getWeatherbyCityName',array('paramters'=>$param));しかし、標準のインターフェイス WSDL に変更してメソッドを引用すると、何度か試した結果、上記の記述方法を適用しないでください。パラメータを渡してスムーズに取得するメソッドを作成します

例: $param = array('theCityName'=>"Nanyang"); $result = $client->__soapCall('getWeatherbyCityName',array(' paramters'=>$param));
成功しましたが、ストックインターフェイスの WSDL に変更してメソッドを引用すると、何度も試した結果、解決策が見つかりました。配列の問題です。上記の記述方法を適用せずに、パラメータを渡すように記述方法を変更すると、スムーズに取得できます。具体的にどのような方法を使用すればパラメータを渡すことができますか? よろしくお願いします。 !"
私も最近石鹸について研究しています。投稿者の方からアドバイスをいただければ幸いです。ありがとうございます! ! !

結び目。理由を見つけてください。 PHP は非常に弱く、リモート サーバー上の天気予報インターフェイスを呼び出すことはできますが、同じ記述方法を使用してストック インターフェイスを呼び出すとエラーが頻繁に発生します。努力していないわけではなく、ただ検索範囲が広すぎて何をすればいいのか分からなかったのですが、幸いなことに、本当に幸運だったことがわかりました。結果的には 3 ~ 4 行のスクリプトしかなかったのですが、かなり苦労しました。 WSDL を見つけて、$client = new SoapClient というステートメントを使用してロードします。これは重要なステップです。次のステップは、私が間違った方向に進んでいると思ったメソッドを引用することです。例: $param = array('theCityName'=>"Nanyang");
$result = $client->__soapCall('getWeatherbyCityName',array('paramters'=>$param));しかし、標準のインターフェイス WSDL に変更してメソッドを引用すると、何度か試した結果、上記の記述方法を適用しないでください。パラメータを渡してスムーズに取得するメソッドの作成


WSDL を見つけて $client = new SoapClient というステートメントを使用してロードします。これは重要なステップです
その理由は次のとおりです。方法を引用することはできませんか?教えてください


あなた

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート