0

単純なログインを処理するためのWSDLの基本的な定義を作成することに頭を悩ませています。

呼び出しているサービスを作成していますuQuizService

まだまだ初期段階なので、オペレーションを作成したいと思います。と呼ばれるポートと、PHPスクリプトによって処理さuQuizMembershipれると呼ばれる操作があります。DoLogin

必要な入力と出力DoLogin

  • loginRequest:これでUSERNAMEとPASSWORDを文字列として使用したいと思います。
  • loginResponse:生成されたSESSION_IDを文字列として返したい。

現時点では、入力は単一の文字列として指定されています(私は:/だと思います)。

loginRequest操作への入力にUSERNAMEとPASSWORDをどのように指定するかわかりませんDoLogin

これまでの私のWSDLファイルは次のとおりです。

<?xml version="1.0"?>

<wsdl:definitions name="uQuizSOAP"
targetNamespace="urn:uQuizSoap"
xmlns:tns="urn:uQuizSoap"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">

<wsdl:service name="uQuizService">
    <port name="uQuizPort" binding="uQuizBinding">
        <soap:address location="http://uquiz/soap_server.php" />
    </port>
</wsdl:service>

<wsdl:portType name="uQuizMembership">
    <wsdl:operation name="DoLogin">
        <wsdl:input message="tns:loginRequest" />
        <wsdl:output message="tns:loginResponse" />
    </wsdl:operation>
</wsdl:portType>

<wsdl:message name="loginRequest">
    <part name="username" type="xsd:string"/>
</wsdl:message>

<wsdl:message name="loginResponse">
    <part name="login_session_id" type="xsd:string" />
</wsdl:message>

<wsdl:binding name="uQuizBinding" type="tns:uQuizPortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="DoLogin">
        <soap:operation soapAction="urn:xmethods-delayed-quotes#DoLogin" />
        <wsdl:input>
            <soap:body use="encoded" namespace="urn:xmethods-delayed-quotes"
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/'" />
        </wsdl:input>
        <wsdl:output>
            <soap:body use="encoded" namespace="urn:xmethods-delayed-quotes"
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>

</wsdl:definitions>

私の問題:

現在の状態で、入力と出力の定義が正しいかどうかはわかりませんbinding

単一の文字列ではなく、ユーザー名とパスワードの文字列を受け入れるように変更する方法がわかりません。

ご協力いただきありがとうございます

4

1 に答える 1

2

まず、投稿したWSDLが無効です。サービスセクションでは、ポートバインディングはuQuizBinding必要なときに設定されますtns:uQuizBinding

<port name="uQuizPort" binding="tns:uQuizBinding">

バインディングセクションでは、type属性が設定されてtns:uQuizBindingいるはずです。tns:uQuizMembership

<wsdl:binding name="uQuizBinding" type="tns:uQuizMembership">

usernameまた、メッセージに対して1つの部分しか定義していないため、要求は実際には単一の文字列(のみ)として指定されます。

<wsdl:message name="loginRequest">
    <part name="username" type="xsd:string"/>
    <!-- this is missing -->
    <part name="password" type="xsd:string"/>
</wsdl:message>

これらの項目を修正すると、次のような要求と応答が得られるはずです。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xmethods-delayed-quotes">
   <soapenv:Body>
      <urn:DoLogin>
         <username>...</username>
         <password>...</password>
      </urn:DoLogin>
   </soapenv:Body>
</soapenv:Envelope>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xmethods-delayed-quotes">
   <soapenv:Body>
      <urn:DoLoginResponse>
         <login_session_id>...</login_session_id>
      </urn:DoLoginResponse>
   </soapenv:Body>
</soapenv:Envelope>

また、相互運用性のために推奨されていないRPC/エンコードされたスタイルを使用していることに注意してください。いくつかのガイドラインについては、この記事を参照してください:どのスタイルのWSDLを使用する必要がありますか?そして多分ドキュメント/リテラル​​スタイルを使用する実用的な例を見てください:http ://www.html2xml.nl/Services/Calculator/Version1/Calculator.asmx

ログイン操作を行っているので、これを安全にすることもできます:)

于 2012-11-10T21:58:21.417 に答える