人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP SOAPについて
http://www.php.net/manual/ja/soapclient.soapclient.php
日本語のマニュアルに
非WSDLモードのときはオプションを指定する必要があり、「location はリクエストを行う URL、 uri は SOAP サービスのターゲット名前空間です」とあります。

ここでいう「サービスのターゲット名前空間」とは何でしょうか。locationにはSOAPサーバのプログラムを指定しているのですが、uriに指定する「サービスのターゲット名前空間」というものが具体的によくわかりません。

●質問者: dedara
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP SOAP URI URL WSDL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● yamaneroom
●10ポイント

SOAPでは名前空間を使うことになっています。SOAPエンベロープの名前空間は次のものです。

http://schemas.xmlsoap.org/soap/envelope/

実は、SOAP封筒構造のHeaderやBodyには、なにを入れるか、ということは封筒構造の決まりでは「なにも決めてない」のです。これは現実の世界で封筒に入れるものはとくに決まっていないのと同じです。ただし、「基本的には渡したいXMLをBodyに入れ、付加的なXMLをHeaderに入れる」ということになっています。現実の封筒でいえば、Headerは封筒の外側、Bodyは封筒の中、ということになります。

SOAPはRPCを行うためのプロトコルと思い込んでいる人が多いようですが、SOAPの封筒構造はさまざまな用途に使えることになっています。SOAP-RPCは、SOAP封筒構造の単なるひとつの使い方、ということです。


名前空間接頭辞を付与されたXMLメッセージ

<?xml version="1.0" encoding="shift_jis"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 <soapenv:Body>
 <m:getEstimate xmlns:m="http://www.unitec-denki.utj.co.jp/schema/2002/">
 <m:GoodsName>もぐらたたきキーボード</m:GoodsName>
 <m:Code>k-001</m:Code>
 <m:Value>100</m:Value>
 <m:DeliveryDate>2002-09-30</m:DeliveryDate>
 </m:getEstimate>
 </soapenv:Body>
</soapenv:Envelope>
◎質問者からの返答

すみません。難しくてわかりません。

書いていただいたenvelopeのurlを指定すれば良いのでしょうか。

マニュアルのコードサンプルには

http://test-uri/

と指定されていますが。


2 ● うぃんど
●60ポイント ベストアンサー

厳密にお知りになりたい場合は、下記文書からXMLの名前空間について学んでいただくことになろうかと思います

http://www.doraneko.org/xml/namespace10/19990114/Overview.html

長いことSOAPはいじってないので、ざっくりとしか説明できません、一部ばっすいしてみますと

1. 動機とまとめ

我々が思い描くのは、1つのXML(拡張可能マークづけ言語)文書が、複数のソフトウェアモジュールのために定義され、またモジュールによって使われるエレメントやアトリビュート(ここでは「マークアップ語彙」と呼ばれる)を含んでよいという、XMLの応用物である。このことの一つの動機はモジュラ性にある。よく理解され、有益なソフトウェアが利用可能であるようなマークアップ語彙が存在するならば、このマークアップを開発し直すよりもむしろ再利用するほうがよい。

そうした文書は、複数のマークアップ語彙を含むから、認識や衝突の問題を突きつけてくる。ソフトウェアモジュールは、他のあるソフトウェアパッケージ向けのマークアップが同じエレメント型やアトリビュート名を使っているときに生じる「衝突」に直面した場合であっても、そのモジュールが処理するように設計されているタグやアトリビュートを認識できる必要がある。

これらの考慮は、文書構造物が、スコープがその包含文書を越えて広がるユニバーサルな名前をもつべきことを要求する。この仕様書は、これを実現するXML名前空間という機構を記述したものである。

これをざっくりとまとめると「よそが定義したものとごちゃまぜになると困るからどこの空間で使うものだかわかるように名前書いておいてよ」ということです

http://test-uri/ と書いてあれば http://test-uri/ で使うものという意味になりますし、

http://test-uri/test と書いてあれば http://test-uri/test で使うものという意味になりますので、

サーバにアップする場合はサーバーのアドレスを書いておくことになりますね


WSDLについては下記などですが、これまたざっくりと要約すると「Webサービスでの利用」ということです

http://www.ibm.com/developerworks/jp/webservices/library/ws-soap...

回答1は下記から適当に抜き出しているだけだと思います(著作権もなにもあったものではないですね)

どのように評価なさるかは質問者さんのポイント配分や回答拒否チェックなどでご対応ください

http://www.xmlconsortium.org/websv/kaisetsu/C1/main.html

◎質問者からの返答

http://www.php.net/manual/ja/soapserver.soapserver.php

なんとなくSoapServerクラスをnewするときにもuriを指定しているので

ここをServerとClientで合わせればいいだけなのかな、という感じに思えてきたのですが、


今回SOAPの目的はSOAPサーバで登録したメソッドを呼び出すだけです。

ファイルをアップしたりはしません。

それでもとりあえずSoapServerを置いてあるサーバのアドレスを書いておけばいいのでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ