2011-01-08 22 views
4

wdslとsoapを使用してWebサービスを作成しようとしています。サーバーはPHPで書かれています。soapとwsdlを使用したWebサービスが動作していません。

現在のところ、私は石鹸サーバオブジェクトにただ1つの関数を追加することで試しています。私の要件は、この関数は連想配列を取る必要があります。現在は文字列を返しますが、現在は試行錯誤しており、必要に応じて配列を返します。

assoc配列を入力として、私はwsdlにcomplexTypeを定義しました。私は、ブラウザでのSOAPクライアントファイルを実行すると 後は、それが次のエラーを与え、コード

<types> 
    <xsd:schema 
    targetNamespace="http://projects.kp/test/webservice/StoreService.wsdl" 
    xmlns="http://www.w3.org/1999/XMLSchema/"> 
    <xsd:complexType name="store"> 
     <xsd:element name="name" type="xsd:string" /> 
     <xsd:element name="subdomain" type="xsd:string" /> 
    </xsd:complexType> 
    </xsd:schema> 
</types> 
<message name="StoreRequest"> 
    <part name="store" type="tns:store"/> 
</message> 
<message name="StoreResponse"> 
    <part name="url" type="xsd:string"/> 
</message> 

です。

Fatal error: Uncaught SoapFault exception: 
[WSDL] SOAP-ERROR: Parsing Schema: unexpected in complexType 

complexTypeの代わりに文字列データ型を使用すると、正しく動作します。 私はまだcomplexTypeがどのように動作しているのか分からないので、これをデバッグできません。

また、 クライアントが.NETと言ういくつかの言語でコード化されている場合、要求と応答の型として配列が機能するかどうかを知りたいと思います。

(今私はUbuntuのデスクトップ上に仮想ホスト上でこれをテストしていてサーバとクライアントが同じバーチャルホスト上にあり、両方のは、PHPで書かれた)

おかげ

+0

は、なぜあなたは 'メッセージ要素の' part'でtype'がを使用しているこれはあなたのWSDLている要素。これは、RPC /エンコードに使用されています。 RPCまたはdoc/literalを使用していますか?代わりにdocを使用すると、 ''に置き換えられます。targ prefixはtargerNamespaceにバインドされますか? – Cratylus

+0

お返事ありがとうございます。はい、私のWSDLです。どのように私はそのRPCまたはdoc/literal!申し訳ありませんが、愚かな質問ですが、私はこれを行うためのさまざまなオンラインチュートリアルとリソースを参照しています。私は "タイプ"の代わりに "要素"を試してみましたが、それは私が出くわしたチュートリアルの通りです。しかし、それは助けにならず、代わりに混乱を引き起こしました。また、基礎を説明する堅実なリファレンスを見つけることができなかったので、良いリンクが本当に役立つでしょう。ありがとう – naiquevin

+1

'message'の' part'子が属性 'type'を持っていれば、それはRPCエンディングを意味し、これもバインディングセクションで言及する必要があります。 'message'の' part'子要素が 'element'属性を持つ場合、これはdocであり、バインディングのdocとしても言及されています。相違点の詳細な説明はここにあります(最近ではありませんがまだまだ良いです)。http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/ – Cratylus

答えて

6

私はあなたが設定する必要があると思いますのxsd:すべてのまたはのxsd:?のxsd 前にシーケンス:?

関連する問題